#pragma once #include #include #include #include #include namespace crepe::api { class AssetManager { private: std::unordered_map asset_cache; private: AssetManager(); virtual ~AssetManager(); public: AssetManager(const AssetManager &) = delete; AssetManager(AssetManager &&) = delete; AssetManager & operator=(const AssetManager &) = delete; AssetManager & operator=(AssetManager &&) = delete; static AssetManager & get_instance(); public: template std::shared_ptr cache(const std::string & file_path, bool reload = false) { auto it = asset_cache.find(file_path); if (!reload && it != asset_cache.end()) { return std::any_cast>(it->second); } std::shared_ptr new_asset = std::make_shared(file_path.c_str()); asset_cache[file_path] = new_asset; return new_asset; } }; } // namespace crepe::api