diff --git a/libs/app/include/psemek/app/app.hpp b/libs/app/include/psemek/app/app.hpp index 9b8b33e9..2e3db24b 100644 --- a/libs/app/include/psemek/app/app.hpp +++ b/libs/app/include/psemek/app/app.hpp @@ -10,7 +10,7 @@ namespace psemek::app { struct app - : scene + : scene_base { app(std::string const & name); app(std::string const & name, int multisampling); @@ -18,9 +18,9 @@ namespace psemek::app virtual bool running() const; virtual void stop(); + virtual void on_quit(); void on_resize(int width, int height) override; - virtual void on_quit(); void render() override; diff --git a/libs/app/include/psemek/app/scene.hpp b/libs/app/include/psemek/app/scene.hpp index 8fc601d0..cf8fc62b 100644 --- a/libs/app/include/psemek/app/scene.hpp +++ b/libs/app/include/psemek/app/scene.hpp @@ -1,7 +1,12 @@ #pragma once +#include + #include +#include +#include + namespace psemek::app { @@ -34,4 +39,35 @@ namespace psemek::app inline scene::~scene() = default; + struct scene_base + : scene + { + void on_mouse_move(int x, int y, int, int) override { mouse_ = geom::point{x, y}; } + void on_left_button_down() override { left_button_down_ = true; } + void on_left_button_up() override { left_button_down_ = false; } + void on_middle_button_down() override { middle_button_down_ = true; } + void on_middle_button_up() override { middle_button_down_ = false; } + void on_right_button_down() override { right_button_down_ = true; } + void on_right_button_up() override { right_button_down_ = false; } + void on_key_down(SDL_Keycode key) override { keys_.insert(key); } + void on_key_up(SDL_Keycode key) override { keys_.erase(key); } + + bool is_left_button_down() const { return left_button_down_; } + bool is_middle_button_down() const { return middle_button_down_; } + bool is_right_button_down() const { return right_button_down_; } + + std::optional> mouse() const { return mouse_; } + + bool is_key_down(SDL_Keycode key) const { return keys_.count(key) > 0; } + + private: + bool left_button_down_ = false; + bool middle_button_down_ = false; + bool right_button_down_ = false; + + std::optional> mouse_; + + std::set keys_; + }; + }