#pragma once #include "note.h" #include "precisionevaluator.h" #include "classicactions.h" #include #include class ClassicSprite; class ClassicGraphicsManager; class ClassicAnimationScenario; class ClassicNote : public Note { public: enum class Grade { PERFECT, GOOD, BAD }; enum State { NONE, FLYING, ACTIVE, DYING, DEAD }; explicit ClassicNote(const std::vector& intervals, microsec perfect_offset, Type type, const Coordinates& coord, const std::unique_ptr& manager); virtual ~ClassicNote() = default; virtual bool isActive() const override; virtual void update(const microsec &music_offset) override; virtual void input(PlayerInput&& inputdata) override; virtual void putToGame(const microsec &music_offset) override; virtual bool isInGame() const override; virtual bool isExpired() const override; virtual void draw() const override; Type type() const noexcept; std::shared_ptr sprite() const noexcept; void setSprite(const std::shared_ptr& sprite) noexcept; const Coordinates& getCoordinates() const noexcept; private: struct NoteElement { std::shared_ptr _sprite; std::array, 5> _animations; const std::array _keys; const Coordinates _coordinates; const Type _type; bool pressed = false; sf::Keyboard::Key pressed_as; }; std::vector _elements; const PrecisionEvaluator _evaluator; const std::unique_ptr& _graphics_manager; State _state; };