#pragma once #include "AssetPool.h" #include "GlobalAssetPool.h" #include "XAssetInfo.h" #include template class AssetPoolDynamic final : public AssetPool { using AssetPool::m_asset_lookup; std::vector*> m_assets; asset_type_t m_type; public: AssetPoolDynamic(const int priority, const asset_type_t type) { GlobalAssetPool::LinkAssetPool(this, priority); m_type = type; } AssetPoolDynamic(AssetPoolDynamic&) = delete; AssetPoolDynamic(AssetPoolDynamic&&) = delete; AssetPoolDynamic& operator =(AssetPoolDynamic&) = delete; AssetPoolDynamic& operator =(AssetPoolDynamic&&) = default; ~AssetPoolDynamic() override { GlobalAssetPool::UnlinkAssetPool(this); for(auto* entry : m_assets) { delete entry->Asset(); delete entry; } m_assets.clear(); m_asset_lookup.clear(); } XAssetInfo* AddAsset(std::string name, T* asset, Zone* zone, std::vector& dependencies) override { auto* newInfo = new XAssetInfo(); newInfo->m_type = m_type; newInfo->m_name = std::move(name); newInfo->m_zone = zone; newInfo->m_dependencies = std::move(dependencies); T* newAsset = new T(); memcpy(newAsset, asset, sizeof(T)); newInfo->m_ptr = newAsset; m_assets.push_back(newInfo); m_asset_lookup[newInfo->m_name] = newInfo; GlobalAssetPool::LinkAsset(this, newInfo); return newInfo; } };