diff --git a/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.cpp b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.cpp new file mode 100644 index 00000000..f9192d6c --- /dev/null +++ b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.cpp @@ -0,0 +1,43 @@ +#include "StructuredDataDefDumper.h" + +#include + +StructuredDataDefDumper::StructuredDataDefDumper(std::ostream& stream) + : AbstractTextDumper(stream), + m_flags{} +{ +} + +void StructuredDataDefDumper::BeginVersion(const int version) +{ + assert(!m_flags.m_in_version); + if (m_flags.m_in_version) + return; + + if (m_flags.m_empty_line_before_version) + m_stream << "\n"; + else + m_flags.m_empty_line_before_version = true; + + Indent(); + m_stream << "version " << version << "\n"; + + Indent(); + m_stream << "{\n"; + + IncIndent(); + + m_flags.m_in_version = true; +} + +void StructuredDataDefDumper::EndVersion() +{ + assert(m_flags.m_in_version); + if (!m_flags.m_in_version) + return; + + DecIndent(); + Indent(); + m_stream << "}\n"; + m_flags.m_in_version = false; +} diff --git a/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.h b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.h new file mode 100644 index 00000000..52bc9b58 --- /dev/null +++ b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.h @@ -0,0 +1,18 @@ +#pragma once + +#include "Dumping/AbstractTextDumper.h" + +class StructuredDataDefDumper : AbstractTextDumper +{ + struct + { + bool m_in_version : 1; + bool m_empty_line_before_version : 1; + } m_flags; + +public: + explicit StructuredDataDefDumper(std::ostream& stream); + + void BeginVersion(int version); + void EndVersion(); +}; diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp new file mode 100644 index 00000000..11c80a88 --- /dev/null +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp @@ -0,0 +1,32 @@ +#include "AssetDumperStructuredDataDefSet.h" + +#include "Dumping/StructuredDataDef/StructuredDataDefDumper.h" + +using namespace IW4; + +bool AssetDumperStructuredDataDefSet::ShouldDump(XAssetInfo* asset) +{ + return true; +} + +void AssetDumperStructuredDataDefSet::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) +{ + const auto* set = asset->Asset(); + const auto assetFile = context.OpenAssetFile(asset->m_name); + + if (!assetFile || set->defs == nullptr) + return; + + StructuredDataDefDumper dumper(*assetFile); + + for(auto defIndex = 0u; defIndex < set->defCount; defIndex++) + { + const auto& def = set->defs[defIndex]; + + dumper.BeginVersion(def.version); + + // TODO + + dumper.EndVersion(); + } +} diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.h new file mode 100644 index 00000000..dfaa9c7a --- /dev/null +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.h @@ -0,0 +1,14 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/IW4/IW4.h" + +namespace IW4 +{ + class AssetDumperStructuredDataDefSet final : public AbstractAssetDumper + { + protected: + bool ShouldDump(XAssetInfo* asset) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; + }; +} diff --git a/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp b/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp index f8d7a2aa..fbb67ea3 100644 --- a/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp @@ -16,6 +16,7 @@ #include "AssetDumpers/AssetDumperRawFile.h" #include "AssetDumpers/AssetDumperSndCurve.h" #include "AssetDumpers/AssetDumperStringTable.h" +#include "AssetDumpers/AssetDumperStructuredDataDefSet.h" #include "AssetDumpers/AssetDumperTracer.h" #include "AssetDumpers/AssetDumperVehicle.h" #include "AssetDumpers/AssetDumperWeapon.h" @@ -71,7 +72,7 @@ bool ZoneDumper::DumpZone(AssetDumpingContext& context) const DUMP_ASSET_POOL(AssetDumperRawFile, m_raw_file, ASSET_TYPE_RAWFILE) DUMP_ASSET_POOL(AssetDumperStringTable, m_string_table, ASSET_TYPE_STRINGTABLE) // DUMP_ASSET_POOL(AssetDumperLeaderboardDef, m_leaderboard, ASSET_TYPE_LEADERBOARD) - // DUMP_ASSET_POOL(AssetDumperStructuredDataDefSet, m_structed_data_def_set, ASSET_TYPE_STRUCTURED_DATA_DEF) + DUMP_ASSET_POOL(AssetDumperStructuredDataDefSet, m_structed_data_def_set, ASSET_TYPE_STRUCTURED_DATA_DEF) DUMP_ASSET_POOL(AssetDumperTracer, m_tracer, ASSET_TYPE_TRACER) DUMP_ASSET_POOL(AssetDumperVehicle, m_vehicle, ASSET_TYPE_VEHICLE) DUMP_ASSET_POOL(AssetDumperAddonMapEnts, m_addon_map_ents, ASSET_TYPE_ADDON_MAP_ENTS)