diff --git a/src/Linker/ZoneCreation/ZoneCreator.cpp b/src/Linker/ZoneCreation/ZoneCreator.cpp index 207ff814..1be5335e 100644 --- a/src/Linker/ZoneCreation/ZoneCreator.cpp +++ b/src/Linker/ZoneCreation/ZoneCreator.cpp @@ -84,7 +84,8 @@ namespace zone_creator ++zoneDefinitionContext.m_asset_index_in_definition; } - creatorCollection.FinalizeZone(creationContext); + if (!creatorCollection.FinalizeZone(creationContext)) + return nullptr; return zone; } diff --git a/src/ObjCompiling/Game/T6/KeyValuePairs/KeyValuePairsCompilerT6.cpp b/src/ObjCompiling/Game/T6/KeyValuePairs/KeyValuePairsCompilerT6.cpp index 35724a68..3d52dab7 100644 --- a/src/ObjCompiling/Game/T6/KeyValuePairs/KeyValuePairsCompilerT6.cpp +++ b/src/ObjCompiling/Game/T6/KeyValuePairs/KeyValuePairsCompilerT6.cpp @@ -32,12 +32,12 @@ namespace return AssetCreationResult::NoAction(); } - void FinalizeZone(AssetCreationContext& context) override + bool FinalizeZone(AssetCreationContext& context) override { m_kvp_creator.Finalize(m_zone_definition); const auto commonKvps = m_kvp_creator.GetFinalKeyValuePairs(); if (commonKvps.empty()) - return; + return true; auto* gameKvps = m_memory.Alloc(); gameKvps->name = m_memory.Dup(m_zone.m_name.c_str()); @@ -61,6 +61,8 @@ namespace } context.AddAsset(AssetRegistration(m_zone.m_name, gameKvps)); + + return true; } private: diff --git a/src/ObjLoading/Asset/AssetCreatorCollection.cpp b/src/ObjLoading/Asset/AssetCreatorCollection.cpp index ee237293..f6eb2754 100644 --- a/src/ObjLoading/Asset/AssetCreatorCollection.cpp +++ b/src/ObjLoading/Asset/AssetCreatorCollection.cpp @@ -79,10 +79,15 @@ AssetCreationResult AssetCreatorCollection::CreateDefaultAsset(const asset_type_ return AssetCreationResult::NoAction(); } -void AssetCreatorCollection::FinalizeZone(AssetCreationContext& context) const +bool AssetCreatorCollection::FinalizeZone(AssetCreationContext& context) const { for (const auto& creator : m_asset_creators) - creator->FinalizeZone(context); + { + if (!creator->FinalizeZone(context)) + return false; + } for (const auto& postProcessor : m_asset_post_processors) postProcessor->FinalizeZone(context); + + return true; } diff --git a/src/ObjLoading/Asset/AssetCreatorCollection.h b/src/ObjLoading/Asset/AssetCreatorCollection.h index 9b720b11..d11a237b 100644 --- a/src/ObjLoading/Asset/AssetCreatorCollection.h +++ b/src/ObjLoading/Asset/AssetCreatorCollection.h @@ -27,7 +27,7 @@ public: AssetCreationResult CreateAsset(asset_type_t assetType, const std::string& assetName, AssetCreationContext& context) const; AssetCreationResult CreateDefaultAsset(asset_type_t assetType, const std::string& assetName, AssetCreationContext& context) const; - void FinalizeZone(AssetCreationContext& context) const; + bool FinalizeZone(AssetCreationContext& context) const; private: std::vector> m_asset_creators_by_type; diff --git a/src/ObjLoading/Asset/IAssetCreator.h b/src/ObjLoading/Asset/IAssetCreator.h index 33153df6..f44329c0 100644 --- a/src/ObjLoading/Asset/IAssetCreator.h +++ b/src/ObjLoading/Asset/IAssetCreator.h @@ -25,7 +25,11 @@ public: [[nodiscard]] virtual std::optional GetHandlingAssetType() const = 0; virtual AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) = 0; - virtual void FinalizeZone(AssetCreationContext& context) {}; + + virtual bool FinalizeZone(AssetCreationContext& context) + { + return true; + }; }; template class AssetCreator : public IAssetCreator diff --git a/src/ObjLoading/Game/IW4/Menu/LoaderMenuListIW4.cpp b/src/ObjLoading/Game/IW4/Menu/LoaderMenuListIW4.cpp index 98ede01a..bd40d0d2 100644 --- a/src/ObjLoading/Game/IW4/Menu/LoaderMenuListIW4.cpp +++ b/src/ObjLoading/Game/IW4/Menu/LoaderMenuListIW4.cpp @@ -73,9 +73,11 @@ namespace return AssetCreationResult::Success(context.AddAsset(std::move(registration))); } - void FinalizeZone(AssetCreationContext& context) override + bool FinalizeZone(AssetCreationContext& context) override { context.GetZoneAssetCreationState().FinalizeSupportingData(); + + return true; } private: diff --git a/src/ObjLoading/Game/IW5/Menu/LoaderMenuListIW5.cpp b/src/ObjLoading/Game/IW5/Menu/LoaderMenuListIW5.cpp index b16d7fcf..5f4297b6 100644 --- a/src/ObjLoading/Game/IW5/Menu/LoaderMenuListIW5.cpp +++ b/src/ObjLoading/Game/IW5/Menu/LoaderMenuListIW5.cpp @@ -73,9 +73,11 @@ namespace return AssetCreationResult::Success(context.AddAsset(std::move(registration))); } - void FinalizeZone(AssetCreationContext& context) override + bool FinalizeZone(AssetCreationContext& context) override { context.GetZoneAssetCreationState().FinalizeSupportingData(); + + return true; } private: diff --git a/src/ObjLoading/Game/T6/BSP/LoaderBSP_T6.cpp b/src/ObjLoading/Game/T6/BSP/LoaderBSP_T6.cpp index e73c3201..a1399c8e 100644 --- a/src/ObjLoading/Game/T6/BSP/LoaderBSP_T6.cpp +++ b/src/ObjLoading/Game/T6/BSP/LoaderBSP_T6.cpp @@ -30,23 +30,18 @@ namespace return AssetCreationResult::NoAction(); } - void FinalizeZone(AssetCreationContext& context) override + bool FinalizeZone(AssetCreationContext& context) override { - // custom maps must have a map_gfx file - std::string mapGfxFileName = "map_gfx.fbx"; - auto mapGfxFile = m_search_path.Open(BSPUtil::getFileNameForBSPAsset(mapGfxFileName)); - if (!mapGfxFile.IsOpen()) - return; - std::unique_ptr bsp = BSP::createBSPData(m_zone.m_name, m_search_path); if (bsp == nullptr) - return; + return false; BSPLinker linker(m_memory, m_search_path, context); - if (!linker.linkBSP(bsp.get())) + bool result = linker.linkBSP(bsp.get()); + if (!result) con::error("BSP link has failed."); - return; + return result; } private: