project-kyoku/modes/classicmode/game/classicgame.cpp

115 lines
2.9 KiB
C++
Raw Normal View History

#include "classicgame.h"
2021-07-21 20:15:56 +02:00
#include "classicnote.h"
#include "classicmapcreator.h"
2021-12-27 19:41:25 +01:00
#include "game/classicgamegraphicsmanager.h"
2021-10-04 17:30:21 +02:00
#include "holdmanager.h"
2021-12-21 18:07:19 +01:00
ClassicGame::ClassicGame() :
2021-12-27 19:41:25 +01:00
_graphics_manager(new ClassicGameGraphicsManager(_timeline, 1648648)),
2021-12-21 18:07:19 +01:00
_hold_manager(std::make_unique<HoldManager>())
2021-05-31 19:04:16 +02:00
{
2021-10-04 17:30:21 +02:00
_slap_buffer.loadFromFile("Tick.ogg");
_slap.setBuffer(_slap_buffer);
_slap.setVolume(50);
2021-05-31 19:04:16 +02:00
_keys_to_buttons =
{
{sf::Keyboard::Up, Type::UP}, // Load from settings
{sf::Keyboard::Right, Type::RIGHT},
{sf::Keyboard::Down, Type::DOWN},
{sf::Keyboard::Left, Type::LEFT},
{sf::Keyboard::W, Type::UP},
{sf::Keyboard::D, Type::RIGHT},
{sf::Keyboard::S, Type::DOWN},
{sf::Keyboard::A, Type::LEFT},
{sf::Keyboard::E, Type::SLIDER_RIGHT},
{sf::Keyboard::Q, Type::SLIDER_LEFT}
2021-05-31 19:04:16 +02:00
};
_buttons_to_pressed_actions=
{
{Type::UP, Action::PRESS_UP},
{Type::RIGHT, Action::PRESS_RIGHT},
{Type::DOWN, Action::PRESS_DOWN},
{Type::LEFT, Action::PRESS_LEFT},
2021-05-31 19:04:16 +02:00
{Type::SLIDER_RIGHT, Action::PRESS_SLIDER_RIGHT},
{Type::SLIDER_LEFT, Action::PRESS_SLIDER_LEFT}
2021-05-31 19:04:16 +02:00
};
_buttons_to_released_actions=
{
{Type::UP, Action::RELEASE_UP},
{Type::RIGHT, Action::RELEASE_RIGHT},
{Type::DOWN, Action::RELEASE_DOWN},
{Type::LEFT, Action::RELEASE_LEFT},
2021-05-31 19:04:16 +02:00
{Type::SLIDER_RIGHT, Action::RELEASE_SLIDER_RIGHT},
{Type::SLIDER_LEFT, Action::RELEASE_SLIDER_LEFT}
2021-05-31 19:04:16 +02:00
};
}
ClassicGame::~ClassicGame()
{}
2021-05-31 19:04:16 +02:00
void ClassicGame::run()
{
_context.hold_manager = _hold_manager;
2021-10-04 17:30:21 +02:00
auto beatmap = classic::createBeatmap("aa", _context);
_timeline.setNotes(beatmap.notes);
2021-05-31 19:04:16 +02:00
}
void ClassicGame::input(PlayerInput&& inputdata)
2021-05-31 19:04:16 +02:00
{
switch (inputdata.event.type)
2021-05-31 19:04:16 +02:00
{
default:
2021-06-11 18:58:44 +02:00
return;
2021-07-21 20:15:56 +02:00
break;
2021-05-31 19:04:16 +02:00
case sf::Event::KeyPressed:
2021-07-21 20:15:56 +02:00
{
auto note_it = _timeline.getActiveNote(inputdata.timestamp);
2021-07-21 20:15:56 +02:00
if (!_timeline.isExpired(note_it))
2021-05-31 19:04:16 +02:00
{
2021-07-21 20:15:56 +02:00
auto note = (*note_it);
note->input(std::move(inputdata));
2021-07-21 20:15:56 +02:00
_slap.play();
2021-05-31 19:04:16 +02:00
}
2021-07-21 20:15:56 +02:00
}
break;
case sf::Event::KeyReleased:
{
2021-10-04 17:30:21 +02:00
_hold_manager->checkRelease(inputdata.event.key.code);
2021-07-21 20:15:56 +02:00
}
break;
2021-05-31 19:04:16 +02:00
}
}
void ClassicGame::update(UpdateData&& updatedata)
2021-05-31 19:04:16 +02:00
{
2021-12-27 19:41:25 +01:00
// UNCOMMENT TO TEST AUTOPLAY
/*auto note_it = _timeline.getActiveNote(updatedata.timestamp);
if (!_timeline.isExpired(note_it) && updatedata.timestamp >= (*note_it)->offset())
{
auto note = (*note_it);
note->input(PlayerInput{updatedata.timestamp, sf::Event{}});
_slap.play();
}*/
_timeline.update(updatedata.timestamp);
_graphics_manager->update(updatedata.timestamp);
2021-05-31 19:04:16 +02:00
}
2021-12-27 19:41:25 +01:00
void ClassicGame::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
2021-12-27 19:41:25 +01:00
_graphics_manager->draw(target, states);
}