#pragma once #include "note.h" #include "precisionevaluator.h" #include "classicinputtype.h" #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, Action action, const Coordinates& coord); virtual ~ClassicNote() = default; virtual bool isActive(microsec music_offset) const override; virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override; GRADE input(ClassicInputType&& input_data); Action action() const; std::shared_ptr sprite() const noexcept; void setSprite(const std::shared_ptr& sprite) noexcept; inline const Coordinates& getCoordinates() const noexcept; private: const Coordinates _coordinates; const PrecisionEvaluator _evaluator; const Action _action; std::shared_ptr _sprite; };