#pragma once #include "spritecontainer.h" #include "classicmode/classicactions.h" #include "graphics/classicspritefactory.h" #include "classicarrownote.h" #include "core/timeline.h" #include class ClassicSprite; class ClassicGraphicsManager : public sf::Drawable { public: explicit ClassicGraphicsManager(Timeline& timeline, const microsec& visibility_offset); virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override; void draw(const std::vector& elements, sf::RenderTarget& target, sf::RenderStates states) const; void setGraphics(std::vector &elements, TimeRange&& range); void update(const microsec& offset); void fetchFirstNote(const microsec& offset); void fetchLastNote(const microsec& offset); private: using Iterator = Timeline::Iterator; Iterator _first; Iterator _last; SpriteContainer _sprite_container; Timeline * const _timeline; microsec _visibility_offset; inline bool nothingToDraw() const noexcept; inline bool isVisiblyClose(const Iterator& iterator, const microsec& music_offset) const noexcept; inline sf::VertexArray makeLine(const Coordinates& c1, const Coordinates& c2) const; };