diff --git a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderStructuredDataDefSet.cpp b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderStructuredDataDefSet.cpp index b3fcf72b..dc702015 100644 --- a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderStructuredDataDefSet.cpp +++ b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderStructuredDataDefSet.cpp @@ -95,7 +95,7 @@ void AssetLoaderStructuredDataDefSet::ConvertStruct(StructuredDataStruct* output outputProperty.name = memory->Dup(inputProperty.m_name.c_str()); outputProperty.type = ConvertType(inputProperty.m_type); - if(outputProperty.type.type != DATA_BOOL) + if (outputProperty.type.type != DATA_BOOL) { assert(inputProperty.m_offset_in_bits % 8 == 0); outputProperty.offset = inputProperty.m_offset_in_bits / 8; diff --git a/src/ObjLoading/Parsing/StructuredDataDef/Sequence/StructuredDataDefDefScopeSequences.cpp b/src/ObjLoading/Parsing/StructuredDataDef/Sequence/StructuredDataDefDefScopeSequences.cpp index 81985500..3dfd7eef 100644 --- a/src/ObjLoading/Parsing/StructuredDataDef/Sequence/StructuredDataDefDefScopeSequences.cpp +++ b/src/ObjLoading/Parsing/StructuredDataDef/Sequence/StructuredDataDefDefScopeSequences.cpp @@ -101,18 +101,34 @@ namespace sdd::def_scope_sequences }); } + private: + static void CreateDefaultStructWhenNoStructsSpecified(const StructuredDataDefParserState* state) + { + if (state->m_current_def->m_structs.empty()) + { + state->m_current_def->m_structs.emplace_back(std::make_unique()); + state->m_current_def->m_root_type = CommonStructuredDataDefType(CommonStructuredDataDefTypeCategory::STRUCT, 0u); + } + } + + static void SetDefSizeFromRootStruct(const StructuredDataDefParserState* state) + { + if (state->m_current_def->m_root_type.m_category == CommonStructuredDataDefTypeCategory::STRUCT + && state->m_current_def->m_root_type.m_info.type_index < state->m_current_def->m_structs.size()) + { + const auto* _struct = state->m_current_def->m_structs[state->m_current_def->m_root_type.m_info.type_index].get(); + state->m_current_def->m_size_in_byte = _struct->m_size_in_byte; + } + } + protected: void ProcessMatch(StructuredDataDefParserState* state, SequenceResult& result) const override { assert(state->m_current_enum == nullptr); assert(state->m_current_struct == nullptr); - if(state->m_current_def->m_root_type.m_category == CommonStructuredDataDefTypeCategory::STRUCT - && state->m_current_def->m_root_type.m_info.type_index < state->m_current_def->m_structs.size()) - { - const auto* _struct = state->m_current_def->m_structs[state->m_current_def->m_root_type.m_info.type_index].get(); - state->m_current_def->m_size_in_byte = _struct->m_size_in_byte; - } + CreateDefaultStructWhenNoStructsSpecified(state); + SetDefSizeFromRootStruct(state); state->m_current_def = nullptr; state->m_def_types_by_name.clear();