#pragma once #include "AssetCreationContext.h" #include "AssetCreationResult.h" #include "Game/IAsset.h" #include "Pool/XAssetInfo.h" #include "SearchPath/ISearchPath.h" #include "Utils/MemoryManager.h" #include "Zone/ZoneTypes.h" #include #include class AssetCreationContext; class IAssetCreator { public: IAssetCreator() = default; virtual ~IAssetCreator() = default; IAssetCreator(const IAssetCreator& other) = default; IAssetCreator(IAssetCreator&& other) noexcept = default; IAssetCreator& operator=(const IAssetCreator& other) = default; IAssetCreator& operator=(IAssetCreator&& other) noexcept = default; [[nodiscard]] virtual std::optional GetHandlingAssetType() const = 0; virtual AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) = 0; virtual void FinalizeZone(AssetCreationContext& context) {} }; class ISubAssetCreator { public: ISubAssetCreator() = default; virtual ~ISubAssetCreator() = default; ISubAssetCreator(const ISubAssetCreator& other) = default; ISubAssetCreator(ISubAssetCreator&& other) noexcept = default; ISubAssetCreator& operator=(const ISubAssetCreator& other) = default; ISubAssetCreator& operator=(ISubAssetCreator&& other) noexcept = default; [[nodiscard]] virtual std::optional GetHandlingSubAssetType() const = 0; virtual AssetCreationResult CreateSubAsset(const std::string& subAssetName, AssetCreationContext& context) = 0; virtual void FinalizeZone(AssetCreationContext& context) {} }; template class AssetCreator : public IAssetCreator { public: [[nodiscard]] std::optional GetHandlingAssetType() const override { return Asset_t::EnumEntry; } }; template class SubAssetCreator : public ISubAssetCreator { public: [[nodiscard]] std::optional GetHandlingSubAssetType() const override { return SubAsset_t::EnumEntry; } };