From 5327ce8ec95759c27486b02cb4d84714485a2380 Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 22 Jan 2022 14:29:07 +0100 Subject: [PATCH] Fix StructuredDataDefDumper not dumping empty structs or arrays --- .../AssetDumperStructuredDataDefSet.cpp | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp index 5f235904..d07af99e 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp @@ -111,23 +111,23 @@ bool AssetDumperStructuredDataDefSet::ShouldDump(XAssetInfoentries || _enum->entryCount <= 0) - return; - std::ostringstream ss; ss << "ENUM_" << enumIndex; dumper.BeginEnum(ss.str(), static_cast(_enum->entryCount), static_cast(_enum->reservedEntryCount)); - for (auto i = 0; i < _enum->entryCount; i++) + if(_enum->entries && _enum->entryCount > 0) { - const auto& entry = _enum->entries[i]; + for (auto i = 0; i < _enum->entryCount; i++) + { + const auto& entry = _enum->entries[i]; - assert(entry.string); - if (!entry.string) - continue; + assert(entry.string); + if (!entry.string) + continue; - dumper.WriteEnumEntry(entry.string, entry.index); + dumper.WriteEnumEntry(entry.string, entry.index); + } } dumper.EndEnum(); @@ -244,9 +244,6 @@ void AssetDumperStructuredDataDefSet::DumpProperty(StructuredDataDefDumper& dump void AssetDumperStructuredDataDefSet::DumpStruct(StructuredDataDefDumper& dumper, const size_t structIndex, const StructuredDataStruct* _struct, const StructuredDataDef* def, const int rootStructIndex) { - if (!_struct->properties || _struct->propertyCount <= 0) - return; - std::string structName; if (static_cast(structIndex) == rootStructIndex) { @@ -262,12 +259,15 @@ void AssetDumperStructuredDataDefSet::DumpStruct(StructuredDataDefDumper& dumper dumper.WriteLineComment("BitOffset: "s + std::to_string(_struct->bitOffset)); dumper.WriteLineComment("Size: "s + std::to_string(_struct->size)); dumper.BeginStruct(structName, static_cast(_struct->propertyCount)); - - for (auto i = 0; i < _struct->propertyCount; i++) - { - const auto& property = _struct->properties[i]; - DumpProperty(dumper, property, def, rootStructIndex); + if(_struct->properties && _struct->propertyCount > 0) + { + for (auto i = 0; i < _struct->propertyCount; i++) + { + const auto& property = _struct->properties[i]; + + DumpProperty(dumper, property, def, rootStructIndex); + } } dumper.EndStruct();