#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; public: explicit AssetPoolDynamic(const zone_priority_t priority) { GlobalAssetPool::LinkAssetPool(this, priority); } AssetPoolDynamic(AssetPoolDynamic&) = delete; AssetPoolDynamic(AssetPoolDynamic&&) = delete; AssetPoolDynamic& operator=(AssetPoolDynamic&) = delete; AssetPoolDynamic& operator=(AssetPoolDynamic&&) = default; ~AssetPoolDynamic() override { GlobalAssetPool::UnlinkAssetPool(this); m_assets.clear(); m_asset_lookup.clear(); } XAssetInfo* AddAsset(std::unique_ptr> xAssetInfo) override { const auto normalizedName = XAssetInfo::NormalizeAssetName(xAssetInfo->m_name); auto* pAssetInfo = xAssetInfo.get(); m_asset_lookup[normalizedName] = pAssetInfo; m_assets.emplace_back(std::move(xAssetInfo)); GlobalAssetPool::LinkAsset(this, normalizedName, pAssetInfo); return pAssetInfo; } };