2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-11-23 05:12:05 +00:00

The FinalizeZone step can now fail and the zone link will not ouput a fastfile if the FinalizeZone step fails.

This commit is contained in:
LJW-Dev
2025-11-01 17:25:14 +08:00
parent 81e0331252
commit 56186d1d80
8 changed files with 30 additions and 19 deletions

View File

@@ -84,7 +84,8 @@ namespace zone_creator
++zoneDefinitionContext.m_asset_index_in_definition; ++zoneDefinitionContext.m_asset_index_in_definition;
} }
creatorCollection.FinalizeZone(creationContext); if (!creatorCollection.FinalizeZone(creationContext))
return nullptr;
return zone; return zone;
} }

View File

@@ -32,12 +32,12 @@ namespace
return AssetCreationResult::NoAction(); return AssetCreationResult::NoAction();
} }
void FinalizeZone(AssetCreationContext& context) override bool FinalizeZone(AssetCreationContext& context) override
{ {
m_kvp_creator.Finalize(m_zone_definition); m_kvp_creator.Finalize(m_zone_definition);
const auto commonKvps = m_kvp_creator.GetFinalKeyValuePairs(); const auto commonKvps = m_kvp_creator.GetFinalKeyValuePairs();
if (commonKvps.empty()) if (commonKvps.empty())
return; return true;
auto* gameKvps = m_memory.Alloc<KeyValuePairs>(); auto* gameKvps = m_memory.Alloc<KeyValuePairs>();
gameKvps->name = m_memory.Dup(m_zone.m_name.c_str()); gameKvps->name = m_memory.Dup(m_zone.m_name.c_str());
@@ -61,6 +61,8 @@ namespace
} }
context.AddAsset(AssetRegistration<AssetKeyValuePairs>(m_zone.m_name, gameKvps)); context.AddAsset(AssetRegistration<AssetKeyValuePairs>(m_zone.m_name, gameKvps));
return true;
} }
private: private:

View File

@@ -79,10 +79,15 @@ AssetCreationResult AssetCreatorCollection::CreateDefaultAsset(const asset_type_
return AssetCreationResult::NoAction(); return AssetCreationResult::NoAction();
} }
void AssetCreatorCollection::FinalizeZone(AssetCreationContext& context) const bool AssetCreatorCollection::FinalizeZone(AssetCreationContext& context) const
{ {
for (const auto& creator : m_asset_creators) for (const auto& creator : m_asset_creators)
creator->FinalizeZone(context); {
if (!creator->FinalizeZone(context))
return false;
}
for (const auto& postProcessor : m_asset_post_processors) for (const auto& postProcessor : m_asset_post_processors)
postProcessor->FinalizeZone(context); postProcessor->FinalizeZone(context);
return true;
} }

View File

@@ -27,7 +27,7 @@ public:
AssetCreationResult CreateAsset(asset_type_t assetType, const std::string& assetName, AssetCreationContext& context) const; 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; AssetCreationResult CreateDefaultAsset(asset_type_t assetType, const std::string& assetName, AssetCreationContext& context) const;
void FinalizeZone(AssetCreationContext& context) const; bool FinalizeZone(AssetCreationContext& context) const;
private: private:
std::vector<std::vector<IAssetCreator*>> m_asset_creators_by_type; std::vector<std::vector<IAssetCreator*>> m_asset_creators_by_type;

View File

@@ -25,7 +25,11 @@ public:
[[nodiscard]] virtual std::optional<asset_type_t> GetHandlingAssetType() const = 0; [[nodiscard]] virtual std::optional<asset_type_t> GetHandlingAssetType() const = 0;
virtual AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) = 0; virtual AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) = 0;
virtual void FinalizeZone(AssetCreationContext& context) {};
virtual bool FinalizeZone(AssetCreationContext& context)
{
return true;
};
}; };
template<typename AssetType> class AssetCreator : public IAssetCreator template<typename AssetType> class AssetCreator : public IAssetCreator

View File

@@ -73,9 +73,11 @@ namespace
return AssetCreationResult::Success(context.AddAsset(std::move(registration))); return AssetCreationResult::Success(context.AddAsset(std::move(registration)));
} }
void FinalizeZone(AssetCreationContext& context) override bool FinalizeZone(AssetCreationContext& context) override
{ {
context.GetZoneAssetCreationState<MenuConversionZoneState>().FinalizeSupportingData(); context.GetZoneAssetCreationState<MenuConversionZoneState>().FinalizeSupportingData();
return true;
} }
private: private:

View File

@@ -73,9 +73,11 @@ namespace
return AssetCreationResult::Success(context.AddAsset(std::move(registration))); return AssetCreationResult::Success(context.AddAsset(std::move(registration)));
} }
void FinalizeZone(AssetCreationContext& context) override bool FinalizeZone(AssetCreationContext& context) override
{ {
context.GetZoneAssetCreationState<MenuConversionZoneState>().FinalizeSupportingData(); context.GetZoneAssetCreationState<MenuConversionZoneState>().FinalizeSupportingData();
return true;
} }
private: private:

View File

@@ -30,23 +30,18 @@ namespace
return AssetCreationResult::NoAction(); 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<BSPData> bsp = BSP::createBSPData(m_zone.m_name, m_search_path); std::unique_ptr<BSPData> bsp = BSP::createBSPData(m_zone.m_name, m_search_path);
if (bsp == nullptr) if (bsp == nullptr)
return; return false;
BSPLinker linker(m_memory, m_search_path, context); 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."); con::error("BSP link has failed.");
return; return result;
} }
private: private: