diff options
Diffstat (limited to 'src/interfaces')
-rw-r--r-- | src/interfaces/command.hpp | 2 | ||||
-rw-r--r-- | src/interfaces/cursor.hpp | 25 | ||||
-rw-r--r-- | src/interfaces/subscriber.hpp | 2 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/interfaces/command.hpp b/src/interfaces/command.hpp index 62d7a59..6220af1 100644 --- a/src/interfaces/command.hpp +++ b/src/interfaces/command.hpp @@ -7,7 +7,7 @@ class ICommand : public ISubscriber<std::nullptr_t> { public: - virtual ~ICommand() = default; + ~ICommand() override = default; virtual void execute() noexcept = 0; diff --git a/src/interfaces/cursor.hpp b/src/interfaces/cursor.hpp index 77c5096..ec2f60c 100644 --- a/src/interfaces/cursor.hpp +++ b/src/interfaces/cursor.hpp @@ -1,17 +1,30 @@ #pragma once +#include "interfaces/publisher.hpp" +#include "interfaces/subscriber.hpp" + #include "engine/data/vector2.hpp" #include <memory> -class ICursorController +enum CursorEvent +{ + POSITION_CHANGE +}; + +class ICursorController : public IPublisher<CursorEvent, Vector2> { public: - virtual ~ICursorController() noexcept = default; + using Event = CursorEvent; + using Context = Vector2; + using Subscriber = std::shared_ptr<ISubscriber<Context>>; + + ~ICursorController() noexcept override = default; virtual void move(const Vector2 &direction, const uint32_t &amount) noexcept = 0; - virtual void move_to(const Vector2 &position) noexcept = 0; + // NOLINTNEXTLINE(google-default-arguments) + virtual void move_to(const Vector2 &position, bool silent = false) noexcept = 0; [[nodiscard]] virtual Vector2 where() const noexcept = 0; @@ -20,4 +33,10 @@ public: static void hide() noexcept; static void show() noexcept; + + void subscribe(const Event &event, + const Subscriber &subscriber) noexcept override = 0; + + void notify_subscribers(const Event &event, + const Context &context) const noexcept override = 0; }; diff --git a/src/interfaces/subscriber.hpp b/src/interfaces/subscriber.hpp index 17d87ef..6641be7 100644 --- a/src/interfaces/subscriber.hpp +++ b/src/interfaces/subscriber.hpp @@ -4,5 +4,7 @@ template <typename Context> class ISubscriber { public: + virtual ~ISubscriber() = default; + virtual void update(const Context &context) noexcept = 0; }; |