Work on game input

This commit is contained in:
NaiJi ✨ 2021-05-31 20:04:16 +03:00
parent 89e9002b5e
commit 3c733cd490
5 changed files with 119 additions and 4 deletions

View File

@ -14,4 +14,17 @@ enum class Action
PRESS_SLIDER_LEFT, RELEASE_SLIDER_LEFT PRESS_SLIDER_LEFT, RELEASE_SLIDER_LEFT
}; };
enum class Button
{
NONE,
UP,
RIGHT,
DOWN,
LEFT,
SLIDER_RIGHT,
SLIDER_LEFT
};
#endif // CLASSICACTIONS_H #endif // CLASSICACTIONS_H

View File

@ -1,6 +1,95 @@
#include "classicgame.h" #include "classicgame.h"
#include "classicinputtype.h"
ClassicGame::ClassicGame() 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
{ {
} }

View File

@ -1,19 +1,30 @@
#ifndef CLASSICGAME_H #ifndef CLASSICGAME_H
#define CLASSICGAME_H #define CLASSICGAME_H
#include "game.h" #include <map>
class ClassicGame : public Game #include "game.h"
#include "classicactions.h"
class ClassicGame final : public Game
{ {
public: public:
explicit ClassicGame(); explicit ClassicGame();
virtual ~ClassicGame() override; virtual ~ClassicGame() override = default;
virtual void run() override; virtual void run() override;
virtual void input(const sf::Event& event) override; virtual void input(const sf::Event& event) override;
virtual void update() override; virtual void update() override;
virtual void draw(const sf::RenderWindow& window) const override; virtual void draw(const sf::RenderWindow& window) const override;
private:
std::map<sf::Keyboard::Key, Button> _keys_to_buttons;
std::map<Button, Action> _buttons_to_pressed_actions;
std::map<Button, Action> _buttons_to_released_actions;
Action getActionKeyPressed(Button button) const;
Action getActionKeyReleased(Button button) const;
}; };
#endif // CLASSICGAME_H #endif // CLASSICGAME_H

View File

@ -15,5 +15,6 @@ bool ClassicInputType::operator==(const Action& comparing_action) const
bool ClassicInputType::operator==(const ClassicInputType& 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;
} }

View File

@ -15,6 +15,7 @@ public:
private: private:
Action _action; Action _action;
Button _button;
}; };
#endif // CLASSICINPUTTYPE_H #endif // CLASSICINPUTTYPE_H