mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-11-22 21:02:07 +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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user