#pragma once #include "note.h" #include "precisionevaluator.h" #include "classicgraphicsmanager.h" #include #include struct Coordinates { float x; float y; inline Coordinates operator+(const Coordinates& right) noexcept { return {right.x + x, right.y - y}; } }; // MOVE TO OWN HEADER ^ class ClassicSprite; class ClassicNote : public Note { public: enum class Grade { PERFECT, GOOD, BAD }; 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 microsec &music_offset) 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 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: const Coordinates _coordinates; const PrecisionEvaluator _evaluator; const std::unique_ptr& _graphics_manager; std::shared_ptr _sprite; bool _is_expired; std::array _keys; const Type _type; };