#pragma once #include "beatmap.h" #include #include #include "beatset.h" using json = nlohmann::json; namespace Beatsaber { class BeatMapImpl : public BeatMap, protected std::enable_shared_from_this { protected: const std::string path; const bool isZip; json infobase; std::vector> beatSets; bool load(); public: BeatMapImpl(const std::string& path, bool isZip); ~BeatMapImpl(); virtual std::string getVersion() const override; virtual std::string getSongName() const override; virtual std::string getSubName() const override; virtual std::string getSongAuthorName() const override; virtual std::string getMapperName() const override; virtual double getBPM() const override; virtual double getTimeOffset() const override; virtual double getSchuffle() const override; virtual double getSchufflePeriod() const override; virtual double getPreviewStart() const override; virtual double getPreviewDuration() const override; virtual std::string getSongFilename() const override; virtual std::string getImageFilename() const override; virtual std::string getEnvName() const override; virtual std::string get360EnvName() const override; virtual std::string getCustomData() const override; virtual const std::vector>& getBeatSets() const override; virtual std::uint32_t getBeatSetCount() const override; virtual const std::shared_ptr getBeatSet(BeatmapCharacteristic::BeatmapCharacteristic characteristic = BeatmapCharacteristic::STANDARD) const override; virtual std::shared_ptr getBeatSet(BeatmapCharacteristic::BeatmapCharacteristic characteristic = BeatmapCharacteristic::STANDARD) override; virtual void printDebug() const override; friend std::unique_ptr BeatMap::loadFromFolder(const std::string& folderPath); friend std::unique_ptr BeatMap::loadFromZip(const std::string& zipPath); }; }