#pragma once #include "classicnote.h" #include "initializers/arrownoteinitializer.h" class ClassicArrowNote : public ClassicNote { public: explicit ClassicArrowNote(ArrowNoteInitializer&& init); virtual ~ClassicArrowNote() = default; virtual void putToGame(const microsec& music_offset) override; virtual void update(const microsec &music_offset) override; virtual void input(PlayerInput&& inputdata) override; virtual void draw() const override; bool allElementsPressed() const; bool isPressedAs(sf::Keyboard::Key key) const; private: struct ArrowElement { std::shared_ptr sprite; std::array, 5> animations; sf::Keyboard::Key pressed_as = sf::Keyboard::Unknown; Coordinates coordinates; std::vector falling_curve_interpolation; std::array keys; Type type = Type::NONE; bool pressed = false; // Each note may consist of several buttons. // For example, ↑ → or ↓ → ← // Note Element represents this idea. }; std::vector _elements; bool _is_hold; };