#include "classicmocknote.h" #include "graphics/classicscenegraphicsmanager.h" #include "graphics/animations/classicanimationscenario.h" #include "holdmanager.h" ClassicMockNote::ClassicMockNote(ArrowNoteInitializer&& init) : ClassicNote(std::move(init.initializer)) { _elements.resize(init.elements.size()); for (std::size_t i = 0; i < _elements.size(); ++i) { _elements[i].position = init.elements[i].element.position; _elements[i].type = init.elements[i].element.type; } } bool ClassicMockNote::isActive(const kku::microsec &offset) const { (void)offset; return _state != State::DEAD && _state != State::NONE; } void ClassicMockNote::input(kku::GameEvent&& input) { switch (input.event.type) { default: break; case kku::SystemEvent::Type::MousePress: { const auto position = std::get(input.event.data).position; for (auto& element : _elements) { if (element.sprite->getRectangle()->contains(position)) { element.selected = !element.selected; element.selection->toggle(element.selected); } } break; } } } void ClassicMockNote::update(const kku::microsec& music_offset) { switch (_state) { default: return; break; case State::FLYING: if (music_offset >= getPerfectOffset()) { _state = State::DYING; for (auto& element : _elements) element.animations[_state]->launch(element.sprite, music_offset, getPerfectOffset()); } break; case State::DYING: if (_elements[0].animations[_state]->isDone()) _state = State::DEAD; break; } for (auto& element : _elements) if (element.animations[_state]) element.animations[_state]->update(music_offset); } void ClassicMockNote::display(const ClassicGraphicsManager * const manager) const { manager->display(_elements); } void ClassicMockNote::setGraphics(ClassicGraphicsManager * const manager, kku::TimeRange&& range) { manager->setGraphics(_elements, std::move(range)); }