#include "classicnote.h" #include "classicsprite.h" #include #include ClassicNote::ClassicNote(const std::vector& intervals, microsec perfect_offset, Action action, const Coordinates& coord) : Note(perfect_offset), _coordinates(coord), _evaluator(intervals, _perfect_offset), _action(action), _appearance_time(0), _current_state(ClassicNoteState::NONE) {} bool ClassicNote::isActive() const { return _states.at(_current_state)->value() == ClassicNoteState::ACTIVE; } bool ClassicNote::isActive(const microsec &music_offset) const { return _evaluator.isActive(music_offset); } void ClassicNote::putToGame(const microsec &music_offset) { _appearance_time = music_offset; // To animation manager _trail_path_percent = ((_perfect_offset - _appearance_time) * 0.01); _current_state = ClassicNoteState::FLYING; _states.at(_current_state)->onEntering(this); } bool ClassicNote::isExpired() const { return _states.at(_current_state)->value() == ClassicNoteState::NONE; } void ClassicNote::update(const microsec& music_offset) { auto next_state = _states.at(_current_state)->update(this, music_offset); if (next_state != _current_state) { _current_state = next_state; _states.at(_current_state)->onEntering(this); } } auto ClassicNote::input(ClassicInputType&& input_data) -> Grade { auto grade = ClassicNote::Grade::BAD; if (input_data == _action) grade = _evaluator.calculatePrecision(input_data.timestamp()); _current_state = ClassicNoteState::DYING; _states.at(_current_state)->onEntering(this); std::cout << "User input: " << static_cast(grade) << "\n"; return grade; } Action ClassicNote::action() const { return _action; } 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; }