#pragma once #include "Asset/IZoneAssetCreationState.h" #include "AssetRegistration.h" #include "Game/IAsset.h" #include "Pool/XAssetInfo.h" #include "Zone/AssetList/AssetList.h" #include "Zone/ZoneTypes.h" #include #include #include #include #include class AssetCreatorCollection; class IgnoredAssetLookup { public: IgnoredAssetLookup(); explicit IgnoredAssetLookup(const AssetList& assetList); [[nodiscard]] bool IsAssetIgnored(asset_type_t assetType, const std::string& name) const; std::unordered_multimap m_ignored_asset_lookup; }; class AssetCreationContext : public ZoneAssetCreationStateContainer { public: AssetCreationContext(Zone& zone, const AssetCreatorCollection* creators, const IgnoredAssetLookup* ignoredAssetLookup); template XAssetInfo* AddAsset(AssetRegistration registration) { static_assert(std::is_base_of_v); return static_cast*>(AddAssetGeneric(std::move(registration))); } template XAssetInfo* AddAsset(std::string assetName, typename AssetType::Type* asset) { static_assert(std::is_base_of_v); return static_cast*>(AddAssetGeneric(AssetRegistration(std::move(assetName), asset))); } XAssetInfoGeneric* AddAssetGeneric(GenericAssetRegistration registration) const; template XAssetInfo* LoadDependency(const std::string& assetName) { static_assert(std::is_base_of_v); return static_cast*>(LoadDependencyGeneric(AssetType::EnumEntry, assetName)); } XAssetInfoGeneric* LoadDependencyGeneric(asset_type_t assetType, const std::string& assetName); template IndirectAssetReference LoadIndirectAssetReference(const std::string& assetName) { static_assert(std::is_base_of_v); return LoadIndirectAssetReferenceGeneric(AssetType::EnumEntry, assetName); } IndirectAssetReference LoadIndirectAssetReferenceGeneric(asset_type_t assetType, const std::string& assetName); private: [[nodiscard]] XAssetInfoGeneric* LoadDefaultAssetDependency(asset_type_t assetType, const std::string& assetName); Zone& m_zone; const AssetCreatorCollection* m_creators; const IgnoredAssetLookup* m_ignored_asset_lookup; }; #include "AssetCreatorCollection.h"