From 3c733cd490a988491b4ff04f49680a385e7a2262 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Mon, 31 May 2021 20:04:16 +0300 Subject: [PATCH] Work on game input --- src/classicgame/classicactions.h | 13 ++++ src/classicgame/classicgame.cpp | 89 ++++++++++++++++++++++++++++ src/classicgame/classicgame.h | 17 +++++- src/classicgame/classicinputtype.cpp | 3 +- src/classicgame/classicinputtype.h | 1 + 5 files changed, 119 insertions(+), 4 deletions(-) diff --git a/src/classicgame/classicactions.h b/src/classicgame/classicactions.h index 058f7f7..9591618 100644 --- a/src/classicgame/classicactions.h +++ b/src/classicgame/classicactions.h @@ -14,4 +14,17 @@ enum class Action PRESS_SLIDER_LEFT, RELEASE_SLIDER_LEFT }; +enum class Button +{ + NONE, + + UP, + RIGHT, + DOWN, + LEFT, + + SLIDER_RIGHT, + SLIDER_LEFT +}; + #endif // CLASSICACTIONS_H diff --git a/src/classicgame/classicgame.cpp b/src/classicgame/classicgame.cpp index 6579b0b..0823b59 100644 --- a/src/classicgame/classicgame.cpp +++ b/src/classicgame/classicgame.cpp @@ -1,6 +1,95 @@ #include "classicgame.h" +#include "classicinputtype.h" ClassicGame::ClassicGame() +{ + _keys_to_buttons = + { + {sf::Keyboard::Up, Button::UP}, // Load from settings + {sf::Keyboard::Right, Button::RIGHT}, + {sf::Keyboard::Down, Button::DOWN}, + {sf::Keyboard::Left, Button::LEFT}, + + {sf::Keyboard::W, Button::UP}, + {sf::Keyboard::D, Button::RIGHT}, + {sf::Keyboard::S, Button::DOWN}, + {sf::Keyboard::A, Button::LEFT}, + + {sf::Keyboard::E, Button::SLIDER_RIGHT}, + {sf::Keyboard::Q, Button::SLIDER_LEFT} + }; + + _buttons_to_pressed_actions= + { + {Button::UP, Action::PRESS_UP}, + {Button::RIGHT, Action::PRESS_RIGHT}, + {Button::DOWN, Action::PRESS_DOWN}, + {Button::LEFT, Action::PRESS_LEFT}, + + {Button::SLIDER_RIGHT, Action::PRESS_SLIDER_RIGHT}, + {Button::SLIDER_LEFT, Action::PRESS_SLIDER_LEFT} + }; + + _buttons_to_released_actions= + { + {Button::UP, Action::RELEASE_UP}, + {Button::RIGHT, Action::RELEASE_RIGHT}, + {Button::DOWN, Action::RELEASE_DOWN}, + {Button::LEFT, Action::RELEASE_LEFT}, + + {Button::SLIDER_RIGHT, Action::RELEASE_SLIDER_RIGHT}, + {Button::SLIDER_LEFT, Action::RELEASE_SLIDER_LEFT} + }; +} + +void ClassicGame::run() +{ + +} + +void ClassicGame::input(const sf::Event& event) +{ + Action new_action = Action::NONE; + microsec timestamp = 0; /* 0 is temp. get from timeline */ + + switch (event.type) + { + default: + break; + case sf::Event::KeyPressed: + { + if (_keys_to_buttons.find(event.key.code) != _keys_to_buttons.end()) + new_action = getActionKeyPressed(_keys_to_buttons[event.key.code]); + } + break; + case sf::Event::KeyReleased: + { + if (_keys_to_buttons.find(event.key.code) != _keys_to_buttons.end()) + new_action = getActionKeyReleased(_keys_to_buttons[event.key.code]); + } + break; + } + + ClassicInputType input(timestamp, new_action); + /* Here get active Note from timeline and pass the input object to it */ +} + +Action ClassicGame::getActionKeyPressed(Button button) const +{ + return _buttons_to_pressed_actions.at(button); +} + +Action ClassicGame::getActionKeyReleased(Button button) const +{ + return _buttons_to_released_actions.at(button); +} + +void ClassicGame::update() +{ + +} + +void ClassicGame::draw(const sf::RenderWindow& window) const { } diff --git a/src/classicgame/classicgame.h b/src/classicgame/classicgame.h index 2a90748..2ed6c21 100644 --- a/src/classicgame/classicgame.h +++ b/src/classicgame/classicgame.h @@ -1,19 +1,30 @@ #ifndef CLASSICGAME_H #define CLASSICGAME_H -#include "game.h" +#include -class ClassicGame : public Game +#include "game.h" +#include "classicactions.h" + +class ClassicGame final : public Game { public: explicit ClassicGame(); - virtual ~ClassicGame() override; + virtual ~ClassicGame() override = default; virtual void run() override; virtual void input(const sf::Event& event) override; virtual void update() override; virtual void draw(const sf::RenderWindow& window) const override; + +private: + std::map _keys_to_buttons; + std::map _buttons_to_pressed_actions; + std::map _buttons_to_released_actions; + + Action getActionKeyPressed(Button button) const; + Action getActionKeyReleased(Button button) const; }; #endif // CLASSICGAME_H diff --git a/src/classicgame/classicinputtype.cpp b/src/classicgame/classicinputtype.cpp index 473aa38..0c7c892 100644 --- a/src/classicgame/classicinputtype.cpp +++ b/src/classicgame/classicinputtype.cpp @@ -15,5 +15,6 @@ bool ClassicInputType::operator==(const Action& comparing_action) const bool ClassicInputType::operator==(const ClassicInputType& comparing_action) const { - return _action == comparing_action._action; + return _action == comparing_action._action + && _button == comparing_action._button; } diff --git a/src/classicgame/classicinputtype.h b/src/classicgame/classicinputtype.h index c233b55..d40cd86 100644 --- a/src/classicgame/classicinputtype.h +++ b/src/classicgame/classicinputtype.h @@ -15,6 +15,7 @@ public: private: Action _action; + Button _button; }; #endif // CLASSICINPUTTYPE_H