From eaa05e7a981b0f581f5393882e4753d9294a3dba Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Wed, 23 Oct 2024 13:49:20 +0200 Subject: rendering and asset_manager poc : --- src/crepe/api/AssetManager.h | 47 +++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 27 deletions(-) (limited to 'src/crepe/api/AssetManager.h') diff --git a/src/crepe/api/AssetManager.h b/src/crepe/api/AssetManager.h index a646d95..1b8b86f 100644 --- a/src/crepe/api/AssetManager.h +++ b/src/crepe/api/AssetManager.h @@ -2,56 +2,49 @@ +#include #include #include #include #include -#include "api/baseResource.h" - namespace crepe::api{ -class ResourceManager{ +class AssetManager{ private: + std::unordered_map< std::string, std::any> asset_cache; - std::unordered_map< std::string, std::unique_ptr> m_resources; - - -protected: - ResourceManager() = default; - ~ResourceManager(); +private: + AssetManager(); + virtual ~AssetManager(); public: - ResourceManager(const ResourceManager &) = delete; - ResourceManager(ResourceManager &&) = delete; - ResourceManager &operator=(const ResourceManager &) = delete; - ResourceManager &operator=(ResourceManager &&) = delete; + AssetManager(const AssetManager &) = delete; + AssetManager(AssetManager &&) = delete; + AssetManager &operator=(const AssetManager &) = delete; + AssetManager &operator=(AssetManager &&) = delete; - static ResourceManager& get_instance(); + static AssetManager& get_instance(); public: - template - T* Load(const std::string& file_path){ - - if (m_resources.find(file_path) != m_resources.end()) { - return static_cast(m_resources[file_path].get()); - } + template + std::shared_ptr cache(const std::string& file_path, bool reload = false){ + auto it = asset_cache.find(file_path); - auto resource = std::make_unique(file_path.c_str()); - if (resource) { - m_resources[file_path] = std::move(resource); - return static_cast(m_resources[file_path].get() ); + if (!reload && it != asset_cache.end()) { + return std::any_cast>(it->second); } - return nullptr; - } + std::shared_ptr new_asset = std::make_shared(file_path.c_str()); - void Unload(const std::string& file_path); + asset_cache[file_path] = new_asset; + return new_asset; + } }; } -- cgit v1.2.3