diff options
author | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-10-25 20:59:34 +0200 |
---|---|---|
committer | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-10-25 20:59:34 +0200 |
commit | 15a4c4a1cf67e13be53ef423c51c56488f332ea9 (patch) | |
tree | 661084fc8171089ce32bf779f2b3a85d634b38e4 /mwe/resource-manager/resource_manager.h | |
parent | f472e0ba3bf54fc5055cf9f08925bed3f98a1dbc (diff) | |
parent | b3b762a34e7ccb4a0dcd041a693ac7180af16002 (diff) |
merge conficts fixed
Diffstat (limited to 'mwe/resource-manager/resource_manager.h')
-rw-r--r-- | mwe/resource-manager/resource_manager.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/mwe/resource-manager/resource_manager.h b/mwe/resource-manager/resource_manager.h new file mode 100644 index 0000000..446bedb --- /dev/null +++ b/mwe/resource-manager/resource_manager.h @@ -0,0 +1,46 @@ +#pragma once + +#include <SDL_render.h> +#include <unordered_map> + +#include "constants.h" +#include "resource.h" +#include "resource_fabricator.h" + +using namespace crepe; + +class ResourceManager { + +private: + static ResourceManager * m_single_resource_manager; + std::unordered_map<Constants::FILE_PATH, Resource *> m_resources; + +protected: + ResourceManager(); + ~ResourceManager(); + +public: + ResourceManager(const ResourceManager &) = delete; + ResourceManager(ResourceManager &&) = delete; + ResourceManager & operator=(const ResourceManager &) = delete; + ResourceManager & operator=(ResourceManager &&) = delete; + + static ResourceManager * get_instance(); + +public: + template <typename T> + T * Load(const Constants::FILE_PATH & file_path) { + + if (m_resources.find(file_path) != m_resources.end()) { + return static_cast<T *>(m_resources[file_path]); + } + + Resource * resource = ResourceFactory::create_resource<T>(file_path); + if (resource) { + m_resources[file_path] = std::move(resource); + } + return static_cast<T *>(m_resources[file_path]); + } + + void Unload(const Constants::FILE_PATH & file_path); +}; |