2021-05-28 19:50:57 +02:00
|
|
|
#include "classicgame.h"
|
2021-05-31 19:04:16 +02:00
|
|
|
#include "classicinputtype.h"
|
2021-06-07 20:19:58 +02:00
|
|
|
#include "classictimeline.h"
|
2021-06-09 20:08:58 +02:00
|
|
|
#include "classicviewmanager.h"
|
2021-06-08 20:32:36 +02:00
|
|
|
#include "classicnote.h"
|
2021-05-28 19:50:57 +02:00
|
|
|
|
2021-06-07 20:19:58 +02:00
|
|
|
ClassicGame::ClassicGame() :
|
2021-06-09 20:08:58 +02:00
|
|
|
_timeline(std::make_unique<ClassicTimeline>()),
|
|
|
|
_view_manager(std::make_unique<ClassicViewManager>())
|
2021-05-31 19:04:16 +02:00
|
|
|
{
|
2021-06-10 00:47:18 +02:00
|
|
|
_timeline->fetchVisibleNotes(_view_manager);
|
|
|
|
_timeline->init();
|
|
|
|
|
2021-05-31 19:04:16 +02:00
|
|
|
_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}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2021-06-09 20:08:58 +02:00
|
|
|
ClassicGame::~ClassicGame()
|
|
|
|
{}
|
|
|
|
|
2021-05-31 19:04:16 +02:00
|
|
|
void ClassicGame::run()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void ClassicGame::input(const sf::Event& event)
|
|
|
|
{
|
|
|
|
Action new_action = Action::NONE;
|
2021-06-08 20:32:36 +02:00
|
|
|
microsec timestamp = _timeline->currentMusicOffset();
|
2021-05-31 19:04:16 +02:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2021-06-08 20:32:36 +02:00
|
|
|
auto note = _timeline->getActiveNote();
|
|
|
|
|
|
|
|
if (!_timeline->isExpired(note))
|
|
|
|
(*note)->input(ClassicInputType(timestamp, new_action));
|
2021-05-31 19:04:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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()
|
|
|
|
{
|
2021-06-08 20:32:36 +02:00
|
|
|
_timeline->update();
|
|
|
|
_timeline->fetchVisibleNotes(_view_manager);
|
2021-05-31 19:04:16 +02:00
|
|
|
}
|
|
|
|
|
2021-06-09 20:08:58 +02:00
|
|
|
void ClassicGame::draw(sf::RenderWindow& window) const
|
2021-05-28 19:50:57 +02:00
|
|
|
{
|
2021-06-09 20:08:58 +02:00
|
|
|
_timeline->drawVisibleNotes(window);
|
2021-05-28 19:50:57 +02:00
|
|
|
}
|