Program Listing for File AssetManager.cpp

Return to documentation for file (src/Assets/AssetManager.cpp)

#include "Ramus/Assets/AssetManager.hpp"
#include "Ramus/Assets/Loaders/MaterialLoader.hpp"
#include "Ramus/Assets/Loaders/ModelLoader.hpp"
#include "Ramus/Assets/Loaders/TextureLoader.hpp"

namespace ramus
{

    AssetManager::AssetManager()
    {
        m_materialLoader = std::make_unique<MaterialLoader>();
        m_modelLoader = std::make_unique<ModelLoader>();
        m_textureLoader = std::make_unique<TextureLoader>();
    }

    std::shared_ptr<Material> AssetManager::GetMaterial(const std::string& path)
    {
        return GetAsset(path, m_materialCache, *m_materialLoader);
    }

    std::shared_ptr<Model> AssetManager::GetModel(const std::string& path)
    {
        return GetAsset(path, m_modelCache, *m_modelLoader);
    }

    std::shared_ptr<Texture> AssetManager::GetTexture(const std::string& path)
    {
        return GetAsset(path, m_textureCache, *m_textureLoader);
    }

    template <typename T>
    std::shared_ptr<T> AssetManager::GetAsset(const std::string& path, AssetCache<T>& cache, AssetLoader<T>& loader)
    {
        auto it = cache.find(path);
        if (it != cache.end()) return it->second;

        auto resource = loader.Load(path);
        if (resource) cache[path] = resource;

        return resource;
    }

}