#pragma once #include #include #include #include #include "beatmapcharacteristic.h" #include "beatlevel.h" #include "beatset.h" namespace Beatsaber { class BeatMap { public: virtual ~BeatMap() {} virtual std::string getVersion() const = 0; virtual std::string getSongName() const = 0; virtual std::string getSubName() const = 0; virtual std::string getSongAuthorName() const = 0; virtual std::string getMapperName() const = 0; virtual double getBPM() const = 0; virtual double getTimeOffset() const = 0; virtual double getSchuffle() const = 0; virtual double getSchufflePeriod() const = 0; virtual double getPreviewStart() const = 0; //in seconds virtual double getPreviewDuration() const = 0; //in seconds virtual std::string getSongFilename() const = 0; virtual std::string getImageFilename() const = 0; virtual std::string getEnvName() const = 0; virtual std::string get360EnvName() const = 0; virtual std::string getCustomData() const = 0; virtual const std::vector>& getBeatSets() const = 0; virtual std::uint32_t getBeatSetCount() const = 0; virtual const std::shared_ptr getBeatSet(BeatmapCharacteristic::BeatmapCharacteristic characteristic = BeatmapCharacteristic::STANDARD) const = 0; virtual std::shared_ptr getBeatSet(BeatmapCharacteristic::BeatmapCharacteristic characteristic = BeatmapCharacteristic::STANDARD) = 0; virtual void printDebug() const = 0; static std::unique_ptr loadFromFolder(const std::string& folderPath); static std::unique_ptr loadFromZip(const std::string& zipPath); }; }