Program Listing for File ResourceManager.hpp

Return to documentation for file (engine/include/Cacao/ResourceManager.hpp)

#pragma once

#include "DllHelper.hpp"
#include "Resource.hpp"
#include "Cubemap.hpp"
#include "Mesh.hpp"
#include "Model.hpp"
#include "Sound.hpp"
#include "Tex2D.hpp"

#include <memory>

namespace Cacao {
    class CACAO_API ResourceManager {
      public:
        static ResourceManager& Get();

        ResourceManager(const ResourceManager&) = delete;
        ResourceManager(ResourceManager&&) = delete;
        ResourceManager& operator=(const ResourceManager&) = delete;
        ResourceManager& operator=(ResourceManager&&) = delete;

        template<typename T>
            requires std::is_base_of_v<Resource, T> && (!std::is_same_v<BlobResource, T>)
        std::shared_ptr<T> Load(const std::string& address) = delete;

        struct Impl;
      private:
        std::unique_ptr<Impl> impl;
        friend class ImplAccessor;

        ResourceManager();
        ~ResourceManager();
    };

    //Allowed Load specializations
    template<>
    std::shared_ptr<Cubemap> ResourceManager::Load<Cubemap>(const std::string&);

    template<>
    std::shared_ptr<Mesh> ResourceManager::Load<Mesh>(const std::string&);

    template<>
    std::shared_ptr<Model> ResourceManager::Load<Model>(const std::string&);

    template<>
    std::shared_ptr<Sound> ResourceManager::Load<Sound>(const std::string&);

    template<>
    std::shared_ptr<Tex2D> ResourceManager::Load<Tex2D>(const std::string&);
}