#pragma once #include "beatlevelrenderhelper.h" #include namespace Beatsaber { class BeatLevelRenderHelperImpl : public BeatLevelRenderHelper { public: BeatLevelRenderHelperImpl(std::shared_ptr level); virtual ~BeatLevelRenderHelperImpl(); class LevelRenderIteratorImpl : public LevelRenderIterator { public: virtual bool hasNextNote() const override; virtual const Note& getNextNote() override; virtual const Wall& getNextWall() override; private: using noteIterator = std::multimap::const_iterator; double pos; uint32_t timebegin; uint32_t timeend; noteIterator noteit; noteIterator noteitend; double njs; double bps; float* matrix; void setMat(double time, const Note& note); public: LevelRenderIteratorImpl(double pos, uint32_t begin, uint32_t end, std::multimap notes, double njs, double bps, float* matrix); //friend class BeatLevelRenderHelperImpl; }; virtual std::unique_ptr getIterator(double time, float* matrix) const override; private: std::shared_ptr level; std::multimap notes; double bps; //beats per second double njs; // note jump speed (in m/s) double jumpDuration; // amount of seconds when a object is active double jumpDistance; // distnce the objects travel within the jump duration }; }