project-kyoku/src/classicgame/classicgame.cpp

111 lines
2.9 KiB
C++
Raw Normal View History

#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"
#include "classicviewmanager.h"
2021-06-08 20:32:36 +02:00
#include "classicnote.h"
2021-06-07 20:19:58 +02:00
ClassicGame::ClassicGame() :
_timeline(std::make_unique<ClassicTimeline>()),
_view_manager(std::make_unique<ClassicViewManager>())
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}
};
}
ClassicGame::~ClassicGame()
{}
2021-05-31 19:04:16 +02:00
void ClassicGame::run()
{
2021-06-11 18:58:44 +02:00
_timeline->fetchVisibleNotes(_view_manager);
_timeline->run();
2021-05-31 19:04:16 +02:00
}
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:
2021-06-11 18:58:44 +02:00
return;
break;
2021-05-31 19:04:16 +02:00
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)->state() == ClassicNote::State::FLYING)
2021-06-11 18:58:44 +02:00
{
(*note)->input(ClassicInputType(timestamp, new_action));
2021-06-11 18:58:44 +02:00
}
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
}
void ClassicGame::draw(sf::RenderWindow& window) const
{
_timeline->drawVisibleNotes(window);
}