#include "classicnote.h" #include "classicsprite.h" #include "classicgraphicsmanager.h" #include "classicflyinganimationscenario.h" #include "classicdyinganimationscenario.h" #include ClassicNote::ClassicNote(const std::vector& intervals, microsec perfect_offset, Type type, const Coordinates& coord, const std::unique_ptr &manager) : Note(perfect_offset), _coordinates(coord), _evaluator(intervals, _perfect_offset), _keys({sf::Keyboard::W, sf::Keyboard::Up}), _graphics_manager(manager), _is_expired(true), _type(type), _state(State::NONE) { _animations[State::NONE] = nullptr; _animations[State::FLYING] = std::make_shared(); _animations[State::DYING] = std::make_shared(); } bool ClassicNote::isActive(const microsec &music_offset) const { return _evaluator.isActive(music_offset); } void ClassicNote::putToGame(const microsec &music_offset) { _is_expired = false; _graphics_manager->initGraphics(this); _state = State::FLYING; _animations[_state]->launch(_sprite, music_offset, offset()); } bool ClassicNote::isExpired() const { return _is_expired; } void ClassicNote::update(const microsec& music_offset) { if (!_animations[_state]) return; bool is_not_active_anymore = (!_is_expired && !isActive(music_offset)); if (is_not_active_anymore) { _state = State::DYING; _animations[_state]->launch(_sprite, music_offset, offset()); } _animations[_state]->update(music_offset); _is_expired = _animations[_state]->isDone(); } void ClassicNote::input(PlayerInput&& inputdata) { auto grade = ClassicNote::Grade::BAD; if (std::find(_keys.begin(), _keys.end(), inputdata.event.key.code) != _keys.end()) grade = _evaluator.calculatePrecision(inputdata.timestamp); _state = State::DYING; _animations[_state]->launch(_sprite, inputdata.timestamp, offset()); std::cout << "User input: " << static_cast(grade) << "\n"; } std::shared_ptr ClassicNote::sprite() const noexcept { return _sprite; } void ClassicNote::setSprite(const std::shared_ptr& sprite) noexcept { _sprite = sprite; } const Coordinates& ClassicNote::getCoordinates() const noexcept { return _coordinates; } Type ClassicNote::type() const noexcept { return _type; } void ClassicNote::draw() const { _graphics_manager->draw(this); }