Add a helper scene_base & inherit app from it

This commit is contained in:
Nikita Lisitsa 2020-09-29 19:20:38 +03:00
parent e42c5dc054
commit 517f964ce7
2 changed files with 38 additions and 2 deletions

View file

@ -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;

View file

@ -1,7 +1,12 @@
#pragma once
#include <psemek/geom/point.hpp>
#include <SDL2/SDL_keycode.h>
#include <optional>
#include <set>
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<geom::point<int, 2>> 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<geom::point<int, 2>> mouse_;
std::set<SDL_Keycode> keys_;
};
}