diff options
Diffstat (limited to 'src/crepe/api/AssetManager.h')
-rw-r--r-- | src/crepe/api/AssetManager.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/crepe/api/AssetManager.h b/src/crepe/api/AssetManager.h new file mode 100644 index 0000000..1b8b86f --- /dev/null +++ b/src/crepe/api/AssetManager.h @@ -0,0 +1,50 @@ +#pragma once + + + +#include <any> +#include <memory> +#include <string> +#include <unordered_map> +#include <utility> + + +namespace crepe::api{ + +class AssetManager{ + + +private: + std::unordered_map< std::string, std::any> 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<typename asset> + std::shared_ptr<asset> 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<std::shared_ptr<asset>>(it->second); + } + + std::shared_ptr<asset> new_asset = std::make_shared<asset>(file_path.c_str()); + + asset_cache[file_path] = new_asset; + + return new_asset; + } +}; +} |