#pragma once #include "classicmode/context.h" #include "core/note.h" #include "core/precisionevaluator.h" #include "classicmode/noteinitializer.h" class ClassicSprite; class ClassicAnimationScenario; class ClassicGraphicsManager; namespace sf { class RenderTarget; class RenderStates; } class ClassicNote : public Note { public: enum class Grade { PERFECT, GOOD, BAD }; enum State { NONE, FLYING, DYING, DEAD }; explicit ClassicNote(NoteInitializer&& init); virtual ~ClassicNote() override = default; virtual bool isActive(const microsec& offset) const override final; virtual bool isInGame() const override final; virtual bool shouldRemove() const override final; virtual void putToGame() override = 0; virtual void update(const microsec &music_offset) override = 0; virtual void input(PlayerInput&& inputdata) = 0; // encapsulate virtual void draw(const ClassicGraphicsManager * const manager, sf::RenderTarget& target, sf::RenderStates states) const = 0; virtual void setGraphics(ClassicGraphicsManager * const manager, TimeRange&& range) = 0; // protected: const PrecisionEvaluator _evaluator; State _state; const Context *_context; };