#pragma once #include #include #include using microsec = sf::Int64; class Note : public sf::Drawable { public: explicit Note(microsec perfect_offset) : _perfect_offset(perfect_offset) {} virtual ~Note() = default; virtual bool isActive() const = 0; virtual bool isActive(const microsec& music_offset) const = 0; virtual void update(const microsec& music_offset) = 0; virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const = 0; virtual void putToGame(const microsec &offset) = 0; virtual bool isExpired() const = 0; microsec offset() const { return _perfect_offset; } protected: microsec _perfect_offset; };