diff --git a/src/ObjLoading/Asset/IAssetCreator.h b/src/ObjLoading/Asset/IAssetCreator.h index 33153df6..42dfeed0 100644 --- a/src/ObjLoading/Asset/IAssetCreator.h +++ b/src/ObjLoading/Asset/IAssetCreator.h @@ -25,7 +25,8 @@ public: [[nodiscard]] virtual std::optional GetHandlingAssetType() const = 0; virtual AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) = 0; - virtual void FinalizeZone(AssetCreationContext& context) {}; + + virtual void FinalizeZone(AssetCreationContext& context) {} }; template class AssetCreator : public IAssetCreator diff --git a/src/ObjWriting/Dumping/AbstractAssetDumper.h b/src/ObjWriting/Dumping/AbstractAssetDumper.h index f1b6aa27..c0371bc4 100644 --- a/src/ObjWriting/Dumping/AbstractAssetDumper.h +++ b/src/ObjWriting/Dumping/AbstractAssetDumper.h @@ -1,18 +1,24 @@ #pragma once +#include "Game/IAsset.h" #include "IAssetDumper.h" +#include "Pool/AssetPool.h" -template class AbstractAssetDumper : public IAssetDumper +template class AbstractAssetDumper : public IAssetDumper { + static_assert(std::is_base_of_v); + public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override + using AssetType_t = AssetType; + + [[nodiscard]] size_t GetProgressTotalCount() const override { - return pool.m_asset_lookup.size(); + return m_pool.m_asset_lookup.size(); } - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override + void Dump(AssetDumpingContext& context) override { - for (const auto* assetInfo : pool) + for (const auto* assetInfo : m_pool) { if (assetInfo->m_name[0] == ',' || !ShouldDump(*assetInfo)) { @@ -26,10 +32,38 @@ public: } protected: - virtual bool ShouldDump(const XAssetInfo& asset) + explicit AbstractAssetDumper(const AssetPool& pool) + : m_pool(pool) + { + } + + virtual bool ShouldDump(const XAssetInfo& asset) { return true; } - virtual void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) = 0; + virtual void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) = 0; + + const AssetPool& m_pool; +}; + +template class AbstractSingleProgressAssetDumper : public IAssetDumper +{ + static_assert(std::is_base_of_v); + +public: + using AssetType_t = AssetType; + + [[nodiscard]] size_t GetProgressTotalCount() const override + { + return m_pool.m_asset_lookup.empty() ? 0uz : 1uz; + } + +protected: + explicit AbstractSingleProgressAssetDumper(const AssetPool& pool) + : m_pool(pool) + { + } + + const AssetPool& m_pool; }; diff --git a/src/ObjWriting/Dumping/IAssetDumper.h b/src/ObjWriting/Dumping/IAssetDumper.h index 44827fd9..7c046de3 100644 --- a/src/ObjWriting/Dumping/IAssetDumper.h +++ b/src/ObjWriting/Dumping/IAssetDumper.h @@ -1,9 +1,8 @@ #pragma once #include "AssetDumpingContext.h" -#include "Pool/AssetPool.h" -template class IAssetDumper +class IAssetDumper { public: IAssetDumper() = default; @@ -13,6 +12,6 @@ public: IAssetDumper& operator=(const IAssetDumper& other) = default; IAssetDumper& operator=(IAssetDumper&& other) noexcept = default; - [[nodiscard]] virtual size_t GetProgressTotalCount(const AssetPool& pool) const = 0; - virtual void DumpPool(AssetDumpingContext& context, const AssetPool& pool) = 0; + [[nodiscard]] virtual size_t GetProgressTotalCount() const = 0; + virtual void Dump(AssetDumpingContext& context) = 0; }; diff --git a/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.cpp b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.cpp index 9ba662c1..06d0b422 100644 --- a/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.cpp +++ b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.cpp @@ -62,7 +62,8 @@ namespace namespace image { - DumperIW3::DumperIW3() + DumperIW3::DumperIW3(const AssetPool& pool) + : AbstractAssetDumper(pool) { switch (ObjWriting::Configuration.ImageOutputFormat) { diff --git a/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.h b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.h index ef8552aa..32fdf23e 100644 --- a/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.h +++ b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.h @@ -8,13 +8,13 @@ namespace image { - class DumperIW3 final : public AbstractAssetDumper + class DumperIW3 final : public AbstractAssetDumper { public: - DumperIW3(); + explicit DumperIW3(const AssetPool& pool); protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; private: std::unique_ptr m_writer; diff --git a/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.cpp b/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.cpp index 2b683dd5..e1e1c9e5 100644 --- a/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.cpp +++ b/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.cpp @@ -11,14 +11,19 @@ using namespace IW3; namespace localize { - size_t DumperIW3::GetProgressTotalCount(const AssetPool& pool) const + DumperIW3::DumperIW3(const AssetPool& pool) + : AbstractSingleProgressAssetDumper(pool) { - return pool.m_asset_lookup.empty() ? 0uz : 1uz; } - void DumperIW3::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + size_t DumperIW3::GetProgressTotalCount() const { - if (pool.m_asset_lookup.empty()) + return m_pool.m_asset_lookup.empty() ? 0uz : 1uz; + } + + void DumperIW3::Dump(AssetDumpingContext& context) + { + if (m_pool.m_asset_lookup.empty()) return; const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language); @@ -35,7 +40,7 @@ namespace localize stringFileDumper.SetNotes(""); - for (const auto* localizeEntry : pool) + for (const auto* localizeEntry : m_pool) { stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value); } diff --git a/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.h b/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.h index da0718eb..18971f83 100644 --- a/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.h +++ b/src/ObjWriting/Game/IW3/Localize/LocalizeDumperIW3.h @@ -2,13 +2,16 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW3/IW3.h" +#include "Pool/AssetPool.h" namespace localize { - class DumperIW3 final : public IAssetDumper + class DumperIW3 final : public AbstractSingleProgressAssetDumper { public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override; - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit DumperIW3(const AssetPool& pool); + + [[nodiscard]] size_t GetProgressTotalCount() const override; + void Dump(AssetDumpingContext& context) override; }; } // namespace localize diff --git a/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp b/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp index 53af032e..e89014a4 100644 --- a/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp +++ b/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp @@ -4,6 +4,11 @@ using namespace IW3; namespace map_ents { + DumperIW3::DumperIW3(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* mapEnts = asset.Asset(); diff --git a/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.h b/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.h index 04c3c380..7e7786ea 100644 --- a/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.h +++ b/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.h @@ -5,8 +5,11 @@ namespace map_ents { - class DumperIW3 final : public AbstractAssetDumper + class DumperIW3 final : public AbstractAssetDumper { + public: + explicit DumperIW3(const AssetPool& pool); + protected: void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; diff --git a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp index 93600335..aba69545 100644 --- a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp +++ b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp @@ -15,56 +15,55 @@ using namespace IW3; bool ObjWriter::DumpZone(AssetDumpingContext& context) const { -#define DUMP_ASSET_POOL(dumperType, poolName, assetType) \ - if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \ +#define REGISTER_DUMPER(dumperType, poolName) \ + if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \ { \ - dumperType dumper; \ - totalProgress += dumper.GetProgressTotalCount(*assetPools->poolName); \ - dumpingFunctions.emplace_back( \ - [](AssetDumpingContext& funcContext, const GameAssetPoolIW3* funcPools) \ - { \ - dumperType dumper; \ - dumper.DumpPool(funcContext, *funcPools->poolName); \ - }); \ + dumpers.emplace_back(std::make_unique(*assetPools->poolName)); \ } const auto* assetPools = dynamic_cast(context.m_zone.m_pools.get()); + std::vector> dumpers; - size_t totalProgress = 0uz; - std::vector> dumpingFunctions; + // REGISTER_DUMPER(AssetDumperPhysPreset, m_phys_preset) + // REGISTER_DUMPER(AssetDumperXAnimParts, m_xanim_parts) + REGISTER_DUMPER(xmodel::DumperIW3, m_xmodel) + REGISTER_DUMPER(material::JsonDumperIW3, m_material) + // REGISTER_DUMPER(AssetDumperMaterialTechniqueSet, m_technique_set) + REGISTER_DUMPER(image::DumperIW3, m_image) + // REGISTER_DUMPER(AssetDumpersnd_alias_list_t, m_sound) + // REGISTER_DUMPER(AssetDumperSndCurve, m_sound_curve) + REGISTER_DUMPER(sound::LoadedSoundDumperIW3, m_loaded_sound) + // REGISTER_DUMPER(AssetDumperClipMap, m_clip_map) + // REGISTER_DUMPER(AssetDumperComWorld, m_com_world) + // REGISTER_DUMPER(AssetDumperGameWorldSp, m_game_world_sp) + // REGISTER_DUMPER(AssetDumperGameWorldMp, m_game_world_mp) + REGISTER_DUMPER(map_ents::DumperIW3, m_map_ents) + // REGISTER_DUMPER(AssetDumperGfxWorld, m_gfx_world) + // REGISTER_DUMPER(AssetDumperGfxLightDef, m_gfx_light_def) + // REGISTER_DUMPER(AssetDumperFont_s, m_font) + // REGISTER_DUMPER(AssetDumperMenuList, m_menu_list) + // REGISTER_DUMPER(AssetDumpermenuDef_t, m_menu_def) + REGISTER_DUMPER(localize::DumperIW3, m_localize) + // REGISTER_DUMPER(AssetDumperWeapon, m_weapon) + // REGISTER_DUMPER(AssetDumperSndDriverGlobals, m_snd_driver_globals) + // REGISTER_DUMPER(AssetDumperFxEffectDef, m_fx) + // REGISTER_DUMPER(AssetDumperFxImpactTable, m_fx_impact_table) + REGISTER_DUMPER(raw_file::DumperIW3, m_raw_file) + REGISTER_DUMPER(string_table::DumperIW3, m_string_table) - // DUMP_ASSET_POOL(AssetDumperPhysPreset, m_phys_preset, ASSET_TYPE_PHYSPRESET) - // DUMP_ASSET_POOL(AssetDumperXAnimParts, m_xanim_parts, ASSET_TYPE_XANIMPARTS) - DUMP_ASSET_POOL(xmodel::DumperIW3, m_xmodel, ASSET_TYPE_XMODEL) - DUMP_ASSET_POOL(material::JsonDumperIW3, m_material, ASSET_TYPE_MATERIAL) - // DUMP_ASSET_POOL(AssetDumperMaterialTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(image::DumperIW3, m_image, ASSET_TYPE_IMAGE) - // DUMP_ASSET_POOL(AssetDumpersnd_alias_list_t, m_sound, ASSET_TYPE_SOUND) - // DUMP_ASSET_POOL(AssetDumperSndCurve, m_sound_curve, ASSET_TYPE_SOUND_CURVE) - DUMP_ASSET_POOL(sound::LoadedSoundDumperIW3, m_loaded_sound, ASSET_TYPE_LOADED_SOUND) - // DUMP_ASSET_POOL(AssetDumperClipMap, m_clip_map, ASSET_TYPE_CLIPMAP_PVS) - // DUMP_ASSET_POOL(AssetDumperComWorld, m_com_world, ASSET_TYPE_COMWORLD) - // DUMP_ASSET_POOL(AssetDumperGameWorldSp, m_game_world_sp, ASSET_TYPE_GAMEWORLD_SP) - // DUMP_ASSET_POOL(AssetDumperGameWorldMp, m_game_world_mp, ASSET_TYPE_GAMEWORLD_MP) - DUMP_ASSET_POOL(map_ents::DumperIW3, m_map_ents, ASSET_TYPE_MAP_ENTS) - // DUMP_ASSET_POOL(AssetDumperGfxWorld, m_gfx_world, ASSET_TYPE_GFXWORLD) - // DUMP_ASSET_POOL(AssetDumperGfxLightDef, m_gfx_light_def, ASSET_TYPE_LIGHT_DEF) - // DUMP_ASSET_POOL(AssetDumperFont_s, m_font, ASSET_TYPE_FONT) - // DUMP_ASSET_POOL(AssetDumperMenuList, m_menu_list, ASSET_TYPE_MENULIST) - // DUMP_ASSET_POOL(AssetDumpermenuDef_t, m_menu_def, ASSET_TYPE_MENU) - DUMP_ASSET_POOL(localize::DumperIW3, m_localize, ASSET_TYPE_LOCALIZE_ENTRY) - // DUMP_ASSET_POOL(AssetDumperWeapon, m_weapon, ASSET_TYPE_WEAPON) - // DUMP_ASSET_POOL(AssetDumperSndDriverGlobals, m_snd_driver_globals, ASSET_TYPE_SNDDRIVER_GLOBALS) - // DUMP_ASSET_POOL(AssetDumperFxEffectDef, m_fx, ASSET_TYPE_FX) - // DUMP_ASSET_POOL(AssetDumperFxImpactTable, m_fx_impact_table, ASSET_TYPE_IMPACT_FX) - DUMP_ASSET_POOL(raw_file::DumperIW3, m_raw_file, ASSET_TYPE_RAWFILE) - DUMP_ASSET_POOL(string_table::DumperIW3, m_string_table, ASSET_TYPE_STRINGTABLE) + if (context.ShouldTrackProgress()) + { + size_t totalProgress = 0uz; + for (const auto& dumper : dumpers) + totalProgress += dumper->GetProgressTotalCount(); - context.SetTotalProgress(totalProgress); - for (const auto& func : dumpingFunctions) - func(context, assetPools); + context.SetTotalProgress(totalProgress); + } + + for (const auto& dumper : dumpers) + dumper->Dump(context); return true; -#undef DUMP_ASSET_POOL +#undef REGISTER_DUMPER } diff --git a/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.cpp b/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.cpp index b6efba38..9ec12f1d 100644 --- a/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.cpp +++ b/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.cpp @@ -4,6 +4,11 @@ using namespace IW3; namespace raw_file { + DumperIW3::DumperIW3(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* rawFile = asset.Asset(); diff --git a/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.h b/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.h index 1b710800..eb6a80b2 100644 --- a/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.h +++ b/src/ObjWriting/Game/IW3/RawFile/RawFileDumperIW3.h @@ -5,8 +5,11 @@ namespace raw_file { - class DumperIW3 final : public AbstractAssetDumper + class DumperIW3 final : public AbstractAssetDumper { + public: + explicit DumperIW3(const AssetPool& pool); + protected: void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; diff --git a/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.cpp b/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.cpp index ca7b7109..2fe85a25 100644 --- a/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.cpp +++ b/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.cpp @@ -25,6 +25,11 @@ namespace namespace sound { + LoadedSoundDumperIW3::LoadedSoundDumperIW3(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + void LoadedSoundDumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* loadedSound = asset.Asset(); diff --git a/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.h b/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.h index 746e82c4..c639ff07 100644 --- a/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.h +++ b/src/ObjWriting/Game/IW3/Sound/LoadedSoundDumperIW3.h @@ -5,9 +5,12 @@ namespace sound { - class LoadedSoundDumperIW3 final : public AbstractAssetDumper + class LoadedSoundDumperIW3 final : public AbstractAssetDumper { + public: + explicit LoadedSoundDumperIW3(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace sound diff --git a/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.cpp b/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.cpp index 0dc0322c..cf36f2fe 100644 --- a/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.cpp +++ b/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.cpp @@ -6,6 +6,11 @@ using namespace IW3; namespace string_table { + DumperIW3::DumperIW3(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* stringTable = asset.Asset(); diff --git a/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.h b/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.h index 1b9de2ff..78c87d6f 100644 --- a/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.h +++ b/src/ObjWriting/Game/IW3/StringTable/StringTableDumperIW3.h @@ -5,8 +5,11 @@ namespace string_table { - class DumperIW3 final : public AbstractAssetDumper + class DumperIW3 final : public AbstractAssetDumper { + public: + explicit DumperIW3(const AssetPool& pool); + protected: void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; diff --git a/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.cpp b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.cpp index 216e36d3..d921581c 100644 --- a/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.cpp @@ -59,7 +59,8 @@ namespace namespace image { - DumperIW4::DumperIW4() + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) { switch (ObjWriting::Configuration.ImageOutputFormat) { @@ -76,7 +77,7 @@ namespace image } } - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* image = asset.Asset(); const auto texture = LoadImageData(context.m_obj_search_path, *image); diff --git a/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.h b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.h index b555f3e7..e87e71a9 100644 --- a/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.h @@ -8,13 +8,13 @@ namespace image { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { public: - DumperIW4(); + explicit DumperIW4(const AssetPool& pool); protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; private: std::unique_ptr m_writer; diff --git a/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.cpp b/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.cpp index 7e139ebb..41840a68 100644 --- a/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.cpp @@ -77,7 +77,12 @@ namespace namespace leaderboard { - void JsonDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + JsonDumperIW4::JsonDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void JsonDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAsset(asset.m_name)); diff --git a/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.h b/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.h index 341e46b1..e5098b64 100644 --- a/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Leaderboard/LeaderboardJsonDumperIW4.h @@ -5,9 +5,12 @@ namespace leaderboard { - class JsonDumperIW4 final : public AbstractAssetDumper + class JsonDumperIW4 final : public AbstractAssetDumper { + public: + explicit JsonDumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace leaderboard diff --git a/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.cpp b/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.cpp index 1f4f9925..402ed74a 100644 --- a/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.cpp @@ -6,7 +6,12 @@ using namespace IW4; namespace light_def { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* lightDef = asset.Asset(); const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset.m_name)); diff --git a/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.h b/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.h index b6131929..9bc28e3a 100644 --- a/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.h +++ b/src/ObjWriting/Game/IW4/LightDef/LightDefDumperIW4.h @@ -5,9 +5,12 @@ namespace light_def { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace light_def diff --git a/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.cpp b/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.cpp index 3c6bd176..67003134 100644 --- a/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.cpp @@ -10,14 +10,14 @@ using namespace IW4; namespace localize { - size_t DumperIW4::GetProgressTotalCount(const AssetPool& pool) const + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractSingleProgressAssetDumper(pool) { - return pool.m_asset_lookup.empty() ? 0uz : 1uz; } - void DumperIW4::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + void DumperIW4::Dump(AssetDumpingContext& context) { - if (pool.m_asset_lookup.empty()) + if (m_pool.m_asset_lookup.empty()) return; const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language); @@ -34,7 +34,7 @@ namespace localize stringFileDumper.SetNotes(""); - for (const auto* localizeEntry : pool) + for (const auto* localizeEntry : m_pool) { stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value); } diff --git a/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.h b/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.h index 7f36c074..781e75f0 100644 --- a/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Localize/LocalizeDumperIW4.h @@ -5,10 +5,11 @@ namespace localize { - class DumperIW4 final : public IAssetDumper + class DumperIW4 final : public AbstractSingleProgressAssetDumper { public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override; - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit DumperIW4(const AssetPool& pool); + + void Dump(AssetDumpingContext& context) override; }; } // namespace localize diff --git a/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.cpp b/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.cpp index 6e1b0cb2..11de5e0e 100644 --- a/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.cpp @@ -7,7 +7,12 @@ using namespace IW4; namespace addon_map_ents { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* addonMapEnts = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.h b/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.h index a2bb4339..9e3439ea 100644 --- a/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Maps/AddonMapEntsDumperIW4.h @@ -5,9 +5,12 @@ namespace addon_map_ents { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace addon_map_ents diff --git a/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp b/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp index de6c1636..749c8d52 100644 --- a/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp @@ -1110,7 +1110,12 @@ namespace namespace material { - void DecompilingGdtDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DecompilingGdtDumperIW4::DecompilingGdtDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DecompilingGdtDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { if (!context.m_gdt) return; diff --git a/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.h b/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.h index ef1b4d99..f66ad842 100644 --- a/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.h @@ -5,9 +5,12 @@ namespace material { - class DecompilingGdtDumperIW4 final : public AbstractAssetDumper + class DecompilingGdtDumperIW4 final : public AbstractAssetDumper { + public: + explicit DecompilingGdtDumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace material diff --git a/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp b/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp index 42013e2e..e25e983a 100644 --- a/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp @@ -1,7 +1,6 @@ #include "MenuDumperIW4.h" #include "Game/IW4/GameAssetPoolIW4.h" -#include "Game/IW4/Menu/MenuDumperIW4.h" #include "MenuListDumperIW4.h" #include "MenuWriterIW4.h" #include "ObjWriting.h" @@ -26,7 +25,12 @@ namespace namespace menu { - void MenuDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + MenuDumperIW4::MenuDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void MenuDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* menu = asset.Asset(); auto* zoneState = context.GetZoneAssetDumperState(); diff --git a/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.h b/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.h index 95e50569..91e452ab 100644 --- a/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" -#include "Menu/MenuDumpingZoneState.h" namespace menu { - class MenuDumperIW4 final : public AbstractAssetDumper + class MenuDumperIW4 final : public AbstractAssetDumper { + public: + explicit MenuDumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace menu diff --git a/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.cpp b/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.cpp index 7e98b598..217a3c3f 100644 --- a/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.cpp @@ -147,7 +147,12 @@ namespace menu } } - void MenuListDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + MenuListDumperIW4::MenuListDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void MenuListDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* menuList = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); @@ -169,13 +174,13 @@ namespace menu menuWriter->End(); } - void MenuListDumperIW4::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + void MenuListDumperIW4::Dump(AssetDumpingContext& context) { auto* zoneState = context.GetZoneAssetDumperState(); - for (const auto* asset : pool) + for (const auto* asset : m_pool) CreateDumpingStateForMenuListIW4(zoneState, asset->Asset()); - AbstractAssetDumper::DumpPool(context, pool); + AbstractAssetDumper::Dump(context); } } // namespace menu diff --git a/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.h b/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.h index 9a01b7f8..93610331 100644 --- a/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Menu/MenuListDumperIW4.h @@ -2,19 +2,20 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" -#include "Game/IW4/Menu/MenuDumperIW4.h" #include "Menu/MenuDumpingZoneState.h" namespace menu { void CreateDumpingStateForMenuListIW4(MenuDumpingZoneState* zoneState, const IW4::MenuList* menuList); - class MenuListDumperIW4 final : public AbstractAssetDumper + class MenuListDumperIW4 final : public AbstractAssetDumper { public: - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit MenuListDumperIW4(const AssetPool& pool); + + void Dump(AssetDumpingContext& context) override; protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace menu diff --git a/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp b/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp index 416dbd82..f0f42cfa 100644 --- a/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp +++ b/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp @@ -30,68 +30,67 @@ using namespace IW4; bool ObjWriter::DumpZone(AssetDumpingContext& context) const { -#define DUMP_ASSET_POOL(dumperType, poolName, assetType) \ - if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \ +#define REGISTER_DUMPER(dumperType, poolName) \ + if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \ { \ - dumperType dumper; \ - totalProgress += dumper.GetProgressTotalCount(*assetPools->poolName); \ - dumpingFunctions.emplace_back( \ - [](AssetDumpingContext& funcContext, const GameAssetPoolIW4* funcPools) \ - { \ - dumperType dumper; \ - dumper.DumpPool(funcContext, *funcPools->poolName); \ - }); \ + dumpers.emplace_back(std::make_unique(*assetPools->poolName)); \ } const auto* assetPools = dynamic_cast(context.m_zone.m_pools.get()); + std::vector> dumpers; - size_t totalProgress = 0uz; - std::vector> dumpingFunctions; - - DUMP_ASSET_POOL(phys_preset::InfoStringDumperIW4, m_phys_preset, ASSET_TYPE_PHYSPRESET) - DUMP_ASSET_POOL(phys_collmap::DumperIW4, m_phys_collmap, ASSET_TYPE_PHYSCOLLMAP) - // DUMP_ASSET_POOL(AssetDumperXAnimParts, m_xanim_parts, ASSET_TYPE_XANIMPARTS) - DUMP_ASSET_POOL(xmodel::DumperIW4, m_xmodel, ASSET_TYPE_XMODEL) - DUMP_ASSET_POOL(material::JsonDumperIW4, m_material, ASSET_TYPE_MATERIAL) + REGISTER_DUMPER(phys_preset::InfoStringDumperIW4, m_phys_preset) + REGISTER_DUMPER(phys_collmap::DumperIW4, m_phys_collmap) + // REGISTER_DUMPER(AssetDumperXAnimParts, m_xanim_parts) + REGISTER_DUMPER(xmodel::DumperIW4, m_xmodel) + REGISTER_DUMPER(material::JsonDumperIW4, m_material) #ifdef EXPERIMENTAL_MATERIAL_COMPILATION - DUMP_ASSET_POOL(material::DecompilingGdtDumperIW4, m_material, ASSET_TYPE_MATERIAL) + DUMP_ASSET_POOL(material::DecompilingGdtDumperIW4, m_material) #endif - DUMP_ASSET_POOL(shader::PixelShaderDumperIW4, m_material_pixel_shader, ASSET_TYPE_PIXELSHADER) - DUMP_ASSET_POOL(shader::VertexShaderDumperIW4, m_material_vertex_shader, ASSET_TYPE_VERTEXSHADER) - DUMP_ASSET_POOL(techset::DumperIW4, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(image::DumperIW4, m_image, ASSET_TYPE_IMAGE) - // DUMP_ASSET_POOL(AssetDumpersnd_alias_list_t, m_sound, ASSET_TYPE_SOUND) - DUMP_ASSET_POOL(sound_curve::DumperIW4, m_sound_curve, ASSET_TYPE_SOUND_CURVE) - DUMP_ASSET_POOL(sound::LoadedSoundDumperIW4, m_loaded_sound, ASSET_TYPE_LOADED_SOUND) - // DUMP_ASSET_POOL(AssetDumperClipMap, m_clip_map, ASSET_TYPE_CLIPMAP_MP) - // DUMP_ASSET_POOL(AssetDumperComWorld, m_com_world, ASSET_TYPE_COMWORLD) - // DUMP_ASSET_POOL(AssetDumperGameWorldSp, m_game_world_sp, ASSET_TYPE_GAMEWORLD_SP) - // DUMP_ASSET_POOL(AssetDumperGameWorldMp, m_game_world_mp, ASSET_TYPE_GAMEWORLD_MP) - // DUMP_ASSET_POOL(AssetDumperMapEnts, m_map_ents, ASSET_TYPE_MAP_ENTS) - // DUMP_ASSET_POOL(AssetDumperFxWorld, m_fx_world, ASSET_TYPE_FXWORLD) - // DUMP_ASSET_POOL(AssetDumperGfxWorld, m_gfx_world, ASSET_TYPE_GFXWORLD) - DUMP_ASSET_POOL(light_def::DumperIW4, m_gfx_light_def, ASSET_TYPE_LIGHT_DEF) - // DUMP_ASSET_POOL(AssetDumperFont_s, m_font, ASSET_TYPE_FONT) - DUMP_ASSET_POOL(menu::MenuListDumperIW4, m_menu_list, ASSET_TYPE_MENULIST) - DUMP_ASSET_POOL(menu::MenuDumperIW4, m_menu_def, ASSET_TYPE_MENU) - DUMP_ASSET_POOL(localize::DumperIW4, m_localize, ASSET_TYPE_LOCALIZE_ENTRY) - DUMP_ASSET_POOL(weapon::DumperIW4, m_weapon, ASSET_TYPE_WEAPON) - // DUMP_ASSET_POOL(AssetDumperSndDriverGlobals, m_snd_driver_globals, ASSET_TYPE_SNDDRIVER_GLOBALS) - // DUMP_ASSET_POOL(AssetDumperFxEffectDef, m_fx, ASSET_TYPE_FX) - // DUMP_ASSET_POOL(AssetDumperFxImpactTable, m_fx_impact_table, ASSET_TYPE_IMPACT_FX) - DUMP_ASSET_POOL(raw_file::DumperIW4, m_raw_file, ASSET_TYPE_RAWFILE) - DUMP_ASSET_POOL(string_table::DumperIW4, m_string_table, ASSET_TYPE_STRINGTABLE) - DUMP_ASSET_POOL(leaderboard::JsonDumperIW4, m_leaderboard, ASSET_TYPE_LEADERBOARD) - DUMP_ASSET_POOL(structured_data_def::DumperIW4, m_structed_data_def_set, ASSET_TYPE_STRUCTURED_DATA_DEF) - DUMP_ASSET_POOL(tracer::DumperIW4, m_tracer, ASSET_TYPE_TRACER) - DUMP_ASSET_POOL(vehicle::DumperIW4, m_vehicle, ASSET_TYPE_VEHICLE) - DUMP_ASSET_POOL(addon_map_ents::DumperIW4, m_addon_map_ents, ASSET_TYPE_ADDON_MAP_ENTS) + REGISTER_DUMPER(shader::PixelShaderDumperIW4, m_material_pixel_shader) + REGISTER_DUMPER(shader::VertexShaderDumperIW4, m_material_vertex_shader) + REGISTER_DUMPER(techset::DumperIW4, m_technique_set) + REGISTER_DUMPER(image::DumperIW4, m_image) + // REGISTER_DUMPER(AssetDumpersnd_alias_list_t, m_sound) + REGISTER_DUMPER(sound_curve::DumperIW4, m_sound_curve) + REGISTER_DUMPER(sound::LoadedSoundDumperIW4, m_loaded_sound) + // REGISTER_DUMPER(AssetDumperClipMap, m_clip_map) + // REGISTER_DUMPER(AssetDumperComWorld, m_com_world) + // REGISTER_DUMPER(AssetDumperGameWorldSp, m_game_world_sp) + // REGISTER_DUMPER(AssetDumperGameWorldMp, m_game_world_mp) + // REGISTER_DUMPER(AssetDumperMapEnts, m_map_ents) + // REGISTER_DUMPER(AssetDumperFxWorld, m_fx_world) + // REGISTER_DUMPER(AssetDumperGfxWorld, m_gfx_world) + REGISTER_DUMPER(light_def::DumperIW4, m_gfx_light_def) + // REGISTER_DUMPER(AssetDumperFont_s, m_font) + REGISTER_DUMPER(menu::MenuListDumperIW4, m_menu_list) + REGISTER_DUMPER(menu::MenuDumperIW4, m_menu_def) + REGISTER_DUMPER(localize::DumperIW4, m_localize) + REGISTER_DUMPER(weapon::DumperIW4, m_weapon) + // REGISTER_DUMPER(AssetDumperSndDriverGlobals, m_snd_driver_globals) + // REGISTER_DUMPER(AssetDumperFxEffectDef, m_fx) + // REGISTER_DUMPER(AssetDumperFxImpactTable, m_fx_impact_table) + REGISTER_DUMPER(raw_file::DumperIW4, m_raw_file) + REGISTER_DUMPER(string_table::DumperIW4, m_string_table) + REGISTER_DUMPER(leaderboard::JsonDumperIW4, m_leaderboard) + REGISTER_DUMPER(structured_data_def::DumperIW4, m_structed_data_def_set) + REGISTER_DUMPER(tracer::DumperIW4, m_tracer) + REGISTER_DUMPER(vehicle::DumperIW4, m_vehicle) + REGISTER_DUMPER(addon_map_ents::DumperIW4, m_addon_map_ents) - context.SetTotalProgress(totalProgress); - for (const auto& func : dumpingFunctions) - func(context, assetPools); + if (context.ShouldTrackProgress()) + { + size_t totalProgress = 0uz; + for (const auto& dumper : dumpers) + totalProgress += dumper->GetProgressTotalCount(); + + context.SetTotalProgress(totalProgress); + } + + for (const auto& dumper : dumpers) + dumper->Dump(context); return true; -#undef DUMP_ASSET_POOL +#undef REGISTER_DUMPER } diff --git a/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.cpp b/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.cpp index 48f148c3..2cf39ef3 100644 --- a/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.cpp @@ -10,7 +10,12 @@ using namespace IW4; namespace phys_collmap { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* physCollmap = asset.Asset(); const auto assetFile = context.OpenAssetFile(phys_collmap::GetFileNameForAssetName(asset.m_name)); diff --git a/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.h b/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.h index da035d1d..c3cb8061 100644 --- a/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.h +++ b/src/ObjWriting/Game/IW4/PhysCollmap/PhysCollmapDumperIW4.h @@ -5,9 +5,12 @@ namespace phys_collmap { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace phys_collmap diff --git a/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp b/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp index 5521e14f..c60e38a8 100644 --- a/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp @@ -80,7 +80,12 @@ namespace namespace phys_preset { - void InfoStringDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + InfoStringDumperIW4::InfoStringDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void InfoStringDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.h b/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.h index 1d3ee86b..17457ce9 100644 --- a/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.h +++ b/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" -#include "InfoString/InfoString.h" namespace phys_preset { - class InfoStringDumperIW4 final : public AbstractAssetDumper + class InfoStringDumperIW4 final : public AbstractAssetDumper { + public: + explicit InfoStringDumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace phys_preset diff --git a/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.cpp b/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.cpp index 15a19469..39109672 100644 --- a/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.cpp @@ -10,7 +10,12 @@ using namespace IW4; namespace raw_file { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* rawFile = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.h b/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.h index 184b2b3c..5a3b7559 100644 --- a/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.h +++ b/src/ObjWriting/Game/IW4/RawFile/RawFileDumperIW4.h @@ -5,9 +5,12 @@ namespace raw_file { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace raw_file diff --git a/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.cpp b/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.cpp index c34a06b1..9ef1571b 100644 --- a/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.cpp @@ -6,7 +6,12 @@ using namespace IW4; namespace shader { - void PixelShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + PixelShaderDumperIW4::PixelShaderDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void PixelShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* pixelShader = asset.Asset(); const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForPixelShaderAssetName(asset.m_name)); diff --git a/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.h b/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.h index 6f04dca1..0c1e5339 100644 --- a/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Shader/PixelShaderDumperIW4.h @@ -5,9 +5,12 @@ namespace shader { - class PixelShaderDumperIW4 final : public AbstractAssetDumper + class PixelShaderDumperIW4 final : public AbstractAssetDumper { + public: + explicit PixelShaderDumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace shader diff --git a/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.cpp b/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.cpp index 763f7880..d5a66fcb 100644 --- a/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.cpp @@ -6,7 +6,12 @@ using namespace IW4; namespace shader { - void VertexShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + VertexShaderDumperIW4::VertexShaderDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void VertexShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* vertexShader = asset.Asset(); const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForVertexShaderAssetName(asset.m_name)); diff --git a/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.h b/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.h index 78e52040..5702e94d 100644 --- a/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Shader/VertexShaderDumperIW4.h @@ -5,9 +5,12 @@ namespace shader { - class VertexShaderDumperIW4 final : public AbstractAssetDumper + class VertexShaderDumperIW4 final : public AbstractAssetDumper { + public: + explicit VertexShaderDumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace shader diff --git a/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.cpp b/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.cpp index 622bc8c5..e0d2ed2d 100644 --- a/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.cpp @@ -25,7 +25,12 @@ namespace namespace sound { - void LoadedSoundDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + LoadedSoundDumperIW4::LoadedSoundDumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void LoadedSoundDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* loadedSound = asset.Asset(); const auto assetFile = context.OpenAssetFile(std::format("sound/{}", asset.m_name)); diff --git a/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.h b/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.h index a1f53d62..fa28defe 100644 --- a/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Sound/LoadedSoundDumperIW4.h @@ -5,9 +5,12 @@ namespace sound { - class LoadedSoundDumperIW4 final : public AbstractAssetDumper + class LoadedSoundDumperIW4 final : public AbstractAssetDumper { + public: + explicit LoadedSoundDumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace sound diff --git a/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.cpp b/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.cpp index d1afcb19..8a6ab9a2 100644 --- a/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.cpp @@ -7,7 +7,12 @@ using namespace IW4; namespace sound_curve { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* sndCurve = asset.Asset(); diff --git a/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.h b/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.h index 97b573eb..0c4358d5 100644 --- a/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Sound/SndCurveDumperIW4.h @@ -5,9 +5,12 @@ namespace sound_curve { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace sound_curve diff --git a/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.cpp b/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.cpp index c23980b1..27a92ecb 100644 --- a/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.cpp @@ -6,7 +6,12 @@ using namespace IW4; namespace string_table { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* stringTable = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.h b/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.h index 6aa82436..8abb9057 100644 --- a/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.h +++ b/src/ObjWriting/Game/IW4/StringTable/StringTableDumperIW4.h @@ -5,9 +5,12 @@ namespace string_table { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace string_table diff --git a/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.cpp b/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.cpp index 28b2998b..10665f83 100644 --- a/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.cpp @@ -1,9 +1,11 @@ #include "StructuredDataDefDumperIW4.h" +#include "StructuredDataDef/CommonStructuredDataDef.h" #include "StructuredDataDef/StructuredDataDefDumper.h" #include #include +#include #include using namespace IW4; @@ -185,7 +187,12 @@ namespace namespace structured_data_def { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* set = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.h b/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.h index b4bb4130..47b14f89 100644 --- a/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.h +++ b/src/ObjWriting/Game/IW4/StructuredDataDef/StructuredDataDefDumperIW4.h @@ -2,15 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" -#include "StructuredDataDef/CommonStructuredDataDef.h" - -#include namespace structured_data_def { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace structured_data_def diff --git a/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp b/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp index 1d5e5537..8714cd74 100644 --- a/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp @@ -536,7 +536,12 @@ namespace IW4 namespace techset { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* techset = asset.Asset(); diff --git a/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.h b/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.h index 10d060a7..ea8f076f 100644 --- a/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.h @@ -5,9 +5,12 @@ namespace techset { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace techset diff --git a/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp b/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp index 21821c81..63076021 100644 --- a/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp @@ -52,7 +52,12 @@ namespace namespace tracer { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.h b/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.h index b9fb1660..708d7c76 100644 --- a/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" -#include "InfoString/InfoString.h" namespace tracer { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace tracer diff --git a/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp b/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp index ed121bfa..5830391f 100644 --- a/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp @@ -93,7 +93,12 @@ namespace namespace vehicle { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.h b/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.h index 3e46b1c8..1af2dcaa 100644 --- a/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" -#include "InfoString/InfoString.h" namespace vehicle { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace vehicle diff --git a/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp b/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp index 0300836a..6ca11889 100644 --- a/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp @@ -405,7 +405,12 @@ namespace namespace weapon { - void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW4::DumperIW4(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.h b/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.h index 6004947c..a97ff280 100644 --- a/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.h +++ b/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" -#include "InfoString/InfoString.h" namespace weapon { - class DumperIW4 final : public AbstractAssetDumper + class DumperIW4 final : public AbstractAssetDumper { + public: + explicit DumperIW4(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace weapon diff --git a/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.cpp b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.cpp index 0e67625a..6a219864 100644 --- a/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.cpp @@ -60,7 +60,8 @@ namespace namespace image { - DumperIW5::DumperIW5() + DumperIW5::DumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) { switch (ObjWriting::Configuration.ImageOutputFormat) { @@ -77,7 +78,7 @@ namespace image } } - void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* image = asset.Asset(); const auto texture = LoadImageData(context.m_obj_search_path, *image); diff --git a/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.h b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.h index 89418db2..7c4f8200 100644 --- a/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.h @@ -8,13 +8,13 @@ namespace image { - class DumperIW5 final : public AbstractAssetDumper + class DumperIW5 final : public AbstractAssetDumper { public: - DumperIW5(); + explicit DumperIW5(const AssetPool& pool); protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; private: std::unique_ptr m_writer; diff --git a/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.cpp b/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.cpp index 446ab366..08586629 100644 --- a/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.cpp @@ -94,7 +94,12 @@ namespace namespace leaderboard { - void JsonDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + JsonDumperIW5::JsonDumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void JsonDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAsset(asset.m_name)); diff --git a/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.h b/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.h index f32722fb..04d07ecf 100644 --- a/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Leaderboard/LeaderboardJsonDumperIW5.h @@ -5,9 +5,12 @@ namespace leaderboard { - class JsonDumperIW5 final : public AbstractAssetDumper + class JsonDumperIW5 final : public AbstractAssetDumper { + public: + explicit JsonDumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace leaderboard diff --git a/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.cpp b/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.cpp index 9ecc2717..55894aed 100644 --- a/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.cpp @@ -11,14 +11,14 @@ using namespace IW5; namespace localize { - size_t DumperIW5::GetProgressTotalCount(const AssetPool& pool) const + DumperIW5::DumperIW5(const AssetPool& pool) + : AbstractSingleProgressAssetDumper(pool) { - return pool.m_asset_lookup.empty() ? 0uz : 1uz; } - void DumperIW5::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + void DumperIW5::Dump(AssetDumpingContext& context) { - if (pool.m_asset_lookup.empty()) + if (m_pool.m_asset_lookup.empty()) return; const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language); @@ -35,7 +35,7 @@ namespace localize stringFileDumper.SetNotes(""); - for (const auto* localizeEntry : pool) + for (const auto* localizeEntry : m_pool) { stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value); } diff --git a/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.h b/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.h index 80549d97..427ca8dd 100644 --- a/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Localize/LocalizeDumperIW5.h @@ -5,10 +5,11 @@ namespace localize { - class DumperIW5 final : public IAssetDumper + class DumperIW5 final : public AbstractSingleProgressAssetDumper { public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override; - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit DumperIW5(const AssetPool& pool); + + void Dump(AssetDumpingContext& context) override; }; } // namespace localize diff --git a/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.cpp b/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.cpp index b381acc8..6c2ba3a3 100644 --- a/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.cpp @@ -7,7 +7,12 @@ using namespace IW5; namespace addon_map_ents { - void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW5::DumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* addonMapEnts = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.h b/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.h index 2dd3e716..d7a8d226 100644 --- a/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Maps/AddonMapEntsDumperIW5.h @@ -5,9 +5,12 @@ namespace addon_map_ents { - class DumperIW5 final : public AbstractAssetDumper + class DumperIW5 final : public AbstractAssetDumper { + public: + explicit DumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace addon_map_ents diff --git a/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.cpp b/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.cpp index a512ccc9..986ee1cc 100644 --- a/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.cpp @@ -51,7 +51,12 @@ namespace namespace menu { - void MenuDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + MenuDumperIW5::MenuDumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void MenuDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* menu = asset.Asset(); const auto menuFilePath = GetPathForMenu(asset); diff --git a/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.h b/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.h index 5ded9191..e996e47d 100644 --- a/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Menu/MenuDumperIW5.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW5/IW5.h" -#include "Game/IW5/Menu/MenuDumperIW5.h" namespace menu { - class MenuDumperIW5 final : public AbstractAssetDumper + class MenuDumperIW5 final : public AbstractAssetDumper { + public: + explicit MenuDumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace menu diff --git a/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.cpp b/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.cpp index 8298dc8b..55e61eb1 100644 --- a/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.cpp @@ -106,7 +106,12 @@ namespace namespace menu { - void MenuListDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + MenuListDumperIW5::MenuListDumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void MenuListDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* menuList = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.h b/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.h index 9a87fcf4..7b87deda 100644 --- a/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Menu/MenuListDumperIW5.h @@ -5,9 +5,12 @@ namespace menu { - class MenuListDumperIW5 final : public AbstractAssetDumper + class MenuListDumperIW5 final : public AbstractAssetDumper { + public: + explicit MenuListDumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace menu diff --git a/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp b/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp index 65542a8d..e7ca7a8f 100644 --- a/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp +++ b/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp @@ -21,70 +21,69 @@ using namespace IW5; bool ObjWriter::DumpZone(AssetDumpingContext& context) const { -#define DUMP_ASSET_POOL(dumperType, poolName, assetType) \ - if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \ +#define REGISTER_DUMPER(dumperType, poolName) \ + if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \ { \ - dumperType dumper; \ - totalProgress += dumper.GetProgressTotalCount(*assetPools->poolName); \ - dumpingFunctions.emplace_back( \ - [](AssetDumpingContext& funcContext, const GameAssetPoolIW5* funcPools) \ - { \ - dumperType dumper; \ - dumper.DumpPool(funcContext, *funcPools->poolName); \ - }); \ + dumpers.emplace_back(std::make_unique(*assetPools->poolName)); \ } const auto* assetPools = dynamic_cast(context.m_zone.m_pools.get()); + std::vector> dumpers; - size_t totalProgress = 0uz; - std::vector> dumpingFunctions; + // REGISTER_DUMPER(AssetDumperPhysPreset, m_phys_preset) + // REGISTER_DUMPER(AssetDumperPhysCollmap, m_phys_collmap) + // REGISTER_DUMPER(AssetDumperXAnimParts, m_xanim_parts) + // REGISTER_DUMPER(AssetDumperXModelSurfs, m_xmodel_surfs) + REGISTER_DUMPER(xmodel::DumperIW5, m_xmodel) + REGISTER_DUMPER(material::JsonDumperIW5, m_material) + // REGISTER_DUMPER(AssetDumperMaterialPixelShader, m_material_pixel_shader) + // REGISTER_DUMPER(AssetDumperMaterialVertexShader, m_material_vertex_shader) + // REGISTER_DUMPER(AssetDumperMaterialVertexDeclaration, m_material_vertex_decl) + // REGISTER_DUMPER(AssetDumperMaterialTechniqueSet, m_technique_set) + REGISTER_DUMPER(image::DumperIW5, m_image) + // REGISTER_DUMPER(AssetDumpersnd_alias_list_t, m_sound) + // REGISTER_DUMPER(AssetDumperSndCurve, m_sound_curve) + REGISTER_DUMPER(sound::LoadedSoundDumperIW5, m_loaded_sound) + // REGISTER_DUMPER(AssetDumperclipMap_t, m_clip_map) + // REGISTER_DUMPER(AssetDumperComWorld, m_com_world) + // REGISTER_DUMPER(AssetDumperGlassWorld, m_glass_world) + // REGISTER_DUMPER(AssetDumperPathData, m_path_data) + // REGISTER_DUMPER(AssetDumperVehicleTrack, m_vehicle_track) + // REGISTER_DUMPER(AssetDumperMapEnts, m_map_ents) + // REGISTER_DUMPER(AssetDumperFxWorld, m_fx_world) + // REGISTER_DUMPER(AssetDumperGfxWorld, m_gfx_world) + // REGISTER_DUMPER(AssetDumperGfxLightDef, m_gfx_light_def) + // REGISTER_DUMPER(AssetDumperFont_s, m_font) + REGISTER_DUMPER(menu::MenuListDumperIW5, m_menu_list) + REGISTER_DUMPER(menu::MenuDumperIW5, m_menu_def) + REGISTER_DUMPER(localize::DumperIW5, m_localize) + REGISTER_DUMPER(attachment::JsonDumperIW5, m_attachment) + REGISTER_DUMPER(weapon::DumperIW5, m_weapon) + // REGISTER_DUMPER(AssetDumperFxEffectDef, m_fx) + // REGISTER_DUMPER(AssetDumperFxImpactTable, m_fx_impact_table) + // REGISTER_DUMPER(AssetDumperSurfaceFxTable, m_surface_fx_table) + REGISTER_DUMPER(raw_file::DumperIW5, m_raw_file) + REGISTER_DUMPER(script::DumperIW5, m_script_file) + REGISTER_DUMPER(string_table::DumperIW5, m_string_table) + REGISTER_DUMPER(leaderboard::JsonDumperIW5, m_leaderboard) + // REGISTER_DUMPER(AssetDumperStructuredDataDefSet, m_structed_data_def_set) + // REGISTER_DUMPER(AssetDumperTracerDef, m_tracer) + // REGISTER_DUMPER(AssetDumperVehicleDef, m_vehicle) + REGISTER_DUMPER(addon_map_ents::DumperIW5, m_addon_map_ents) - // DUMP_ASSET_POOL(AssetDumperPhysPreset, m_phys_preset, ASSET_TYPE_PHYSPRESET) - // DUMP_ASSET_POOL(AssetDumperPhysCollmap, m_phys_collmap, ASSET_TYPE_PHYSCOLLMAP) - // DUMP_ASSET_POOL(AssetDumperXAnimParts, m_xanim_parts, ASSET_TYPE_XANIMPARTS) - // DUMP_ASSET_POOL(AssetDumperXModelSurfs, m_xmodel_surfs, ASSET_TYPE_XMODEL_SURFS) - DUMP_ASSET_POOL(xmodel::DumperIW5, m_xmodel, ASSET_TYPE_XMODEL) - DUMP_ASSET_POOL(material::JsonDumperIW5, m_material, ASSET_TYPE_MATERIAL) - // DUMP_ASSET_POOL(AssetDumperMaterialPixelShader, m_material_pixel_shader, ASSET_TYPE_PIXELSHADER) - // DUMP_ASSET_POOL(AssetDumperMaterialVertexShader, m_material_vertex_shader, ASSET_TYPE_VERTEXSHADER) - // DUMP_ASSET_POOL(AssetDumperMaterialVertexDeclaration, m_material_vertex_decl, ASSET_TYPE_VERTEXDECL) - // DUMP_ASSET_POOL(AssetDumperMaterialTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(image::DumperIW5, m_image, ASSET_TYPE_IMAGE) - // DUMP_ASSET_POOL(AssetDumpersnd_alias_list_t, m_sound, ASSET_TYPE_SOUND) - // DUMP_ASSET_POOL(AssetDumperSndCurve, m_sound_curve, ASSET_TYPE_SOUND_CURVE) - DUMP_ASSET_POOL(sound::LoadedSoundDumperIW5, m_loaded_sound, ASSET_TYPE_LOADED_SOUND) - // DUMP_ASSET_POOL(AssetDumperclipMap_t, m_clip_map, ASSET_TYPE_CLIPMAP) - // DUMP_ASSET_POOL(AssetDumperComWorld, m_com_world, ASSET_TYPE_COMWORLD) - // DUMP_ASSET_POOL(AssetDumperGlassWorld, m_glass_world, ASSET_TYPE_GLASSWORLD) - // DUMP_ASSET_POOL(AssetDumperPathData, m_path_data, ASSET_TYPE_PATHDATA) - // DUMP_ASSET_POOL(AssetDumperVehicleTrack, m_vehicle_track, ASSET_TYPE_VEHICLE_TRACK) - // DUMP_ASSET_POOL(AssetDumperMapEnts, m_map_ents, ASSET_TYPE_MAP_ENTS) - // DUMP_ASSET_POOL(AssetDumperFxWorld, m_fx_world, ASSET_TYPE_FXWORLD) - // DUMP_ASSET_POOL(AssetDumperGfxWorld, m_gfx_world, ASSET_TYPE_GFXWORLD) - // DUMP_ASSET_POOL(AssetDumperGfxLightDef, m_gfx_light_def, ASSET_TYPE_LIGHT_DEF) - // DUMP_ASSET_POOL(AssetDumperFont_s, m_font, ASSET_TYPE_FONT) - DUMP_ASSET_POOL(menu::MenuListDumperIW5, m_menu_list, ASSET_TYPE_MENULIST) - DUMP_ASSET_POOL(menu::MenuDumperIW5, m_menu_def, ASSET_TYPE_MENU) - DUMP_ASSET_POOL(localize::DumperIW5, m_localize, ASSET_TYPE_LOCALIZE_ENTRY) - DUMP_ASSET_POOL(attachment::JsonDumperIW5, m_attachment, ASSET_TYPE_ATTACHMENT) - DUMP_ASSET_POOL(weapon::DumperIW5, m_weapon, ASSET_TYPE_WEAPON) - // DUMP_ASSET_POOL(AssetDumperFxEffectDef, m_fx, ASSET_TYPE_FX) - // DUMP_ASSET_POOL(AssetDumperFxImpactTable, m_fx_impact_table, ASSET_TYPE_IMPACT_FX) - // DUMP_ASSET_POOL(AssetDumperSurfaceFxTable, m_surface_fx_table, ASSET_TYPE_SURFACE_FX) - DUMP_ASSET_POOL(raw_file::DumperIW5, m_raw_file, ASSET_TYPE_RAWFILE) - DUMP_ASSET_POOL(script::DumperIW5, m_script_file, ASSET_TYPE_SCRIPTFILE) - DUMP_ASSET_POOL(string_table::DumperIW5, m_string_table, ASSET_TYPE_STRINGTABLE) - DUMP_ASSET_POOL(leaderboard::JsonDumperIW5, m_leaderboard, ASSET_TYPE_LEADERBOARD) - // DUMP_ASSET_POOL(AssetDumperStructuredDataDefSet, m_structed_data_def_set, ASSET_TYPE_STRUCTURED_DATA_DEF) - // DUMP_ASSET_POOL(AssetDumperTracerDef, m_tracer, ASSET_TYPE_TRACER) - // DUMP_ASSET_POOL(AssetDumperVehicleDef, m_vehicle, ASSET_TYPE_VEHICLE) - DUMP_ASSET_POOL(addon_map_ents::DumperIW5, m_addon_map_ents, ASSET_TYPE_ADDON_MAP_ENTS) + if (context.ShouldTrackProgress()) + { + size_t totalProgress = 0uz; + for (const auto& dumper : dumpers) + totalProgress += dumper->GetProgressTotalCount(); - context.SetTotalProgress(totalProgress); - for (const auto& func : dumpingFunctions) - func(context, assetPools); + context.SetTotalProgress(totalProgress); + } + + for (const auto& dumper : dumpers) + dumper->Dump(context); return true; -#undef DUMP_ASSET_POOL +#undef REGISTER_DUMPER } diff --git a/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.cpp b/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.cpp index f087ec0c..30b9fcfb 100644 --- a/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.cpp @@ -10,7 +10,12 @@ using namespace IW5; namespace raw_file { - void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW5::DumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* rawFile = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.h b/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.h index a88e1522..1da93e45 100644 --- a/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.h +++ b/src/ObjWriting/Game/IW5/RawFile/RawFileDumperIW5.h @@ -5,9 +5,12 @@ namespace raw_file { - class DumperIW5 final : public AbstractAssetDumper + class DumperIW5 final : public AbstractAssetDumper { + public: + explicit DumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace raw_file diff --git a/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.cpp b/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.cpp index 9a73c8dd..1fcbf206 100644 --- a/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.cpp @@ -4,8 +4,13 @@ using namespace IW5; namespace script { + DumperIW5::DumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + // See https://github.com/xensik/gsc-tool#file-format for an in-depth explanation about the .gscbin format - void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { auto* scriptFile = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name + ".gscbin"); diff --git a/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.h b/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.h index dd8fa0c3..920f3733 100644 --- a/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Script/ScriptDumperIW5.h @@ -5,9 +5,12 @@ namespace script { - class DumperIW5 final : public AbstractAssetDumper + class DumperIW5 final : public AbstractAssetDumper { + public: + explicit DumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace script diff --git a/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.cpp b/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.cpp index 05d20518..5a847929 100644 --- a/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.cpp @@ -25,7 +25,12 @@ namespace namespace sound { - void LoadedSoundDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + LoadedSoundDumperIW5::LoadedSoundDumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void LoadedSoundDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* loadedSound = asset.Asset(); const auto assetFile = context.OpenAssetFile(std::format("sound/{}", asset.m_name)); diff --git a/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.h b/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.h index 449b4fc8..32350c68 100644 --- a/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Sound/LoadedSoundDumperIW5.h @@ -5,9 +5,12 @@ namespace sound { - class LoadedSoundDumperIW5 final : public AbstractAssetDumper + class LoadedSoundDumperIW5 final : public AbstractAssetDumper { + public: + explicit LoadedSoundDumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace sound diff --git a/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.cpp b/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.cpp index d8509a95..0b3dfae2 100644 --- a/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.cpp @@ -6,7 +6,12 @@ using namespace IW5; namespace string_table { - void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW5::DumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* stringTable = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.h b/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.h index 9c16c6a8..071a08ee 100644 --- a/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.h +++ b/src/ObjWriting/Game/IW5/StringTable/StringTableDumperIW5.h @@ -5,9 +5,12 @@ namespace string_table { - class DumperIW5 final : public AbstractAssetDumper + class DumperIW5 final : public AbstractAssetDumper { + public: + explicit DumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace string_table diff --git a/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.cpp b/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.cpp index 0e412898..79f842c9 100644 --- a/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.cpp @@ -395,7 +395,12 @@ namespace namespace attachment { - void JsonDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + JsonDumperIW5::JsonDumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void JsonDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAssetName(asset.m_name)); diff --git a/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.h b/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.h index d956f0cc..f43204a1 100644 --- a/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Weapon/AttachmentJsonDumperIW5.h @@ -5,9 +5,12 @@ namespace attachment { - class JsonDumperIW5 final : public AbstractAssetDumper + class JsonDumperIW5 final : public AbstractAssetDumper { + public: + explicit JsonDumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace attachment diff --git a/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp b/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp index c8a47ad8..ed3f984d 100644 --- a/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp @@ -733,7 +733,12 @@ namespace namespace weapon { - void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperIW5::DumperIW5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // TODO: only dump infostring fields when non-default diff --git a/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.h b/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.h index 44457a92..5772e5fc 100644 --- a/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.h +++ b/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/IW5/IW5.h" -#include "InfoString/InfoString.h" namespace weapon { - class DumperIW5 final : public AbstractAssetDumper + class DumperIW5 final : public AbstractAssetDumper { + public: + explicit DumperIW5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace weapon diff --git a/src/ObjWriting/Game/T5/Image/ImageDumperT5.cpp b/src/ObjWriting/Game/T5/Image/ImageDumperT5.cpp index f3745621..27fe8f03 100644 --- a/src/ObjWriting/Game/T5/Image/ImageDumperT5.cpp +++ b/src/ObjWriting/Game/T5/Image/ImageDumperT5.cpp @@ -59,7 +59,8 @@ namespace namespace image { - DumperT5::DumperT5() + DumperT5::DumperT5(const AssetPool& pool) + : AbstractAssetDumper(pool) { switch (ObjWriting::Configuration.ImageOutputFormat) { @@ -76,7 +77,7 @@ namespace image } } - void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* image = asset.Asset(); const auto texture = LoadImageData(context.m_obj_search_path, *image); diff --git a/src/ObjWriting/Game/T5/Image/ImageDumperT5.h b/src/ObjWriting/Game/T5/Image/ImageDumperT5.h index bf650bb3..109758e5 100644 --- a/src/ObjWriting/Game/T5/Image/ImageDumperT5.h +++ b/src/ObjWriting/Game/T5/Image/ImageDumperT5.h @@ -8,13 +8,13 @@ namespace image { - class DumperT5 final : public AbstractAssetDumper + class DumperT5 final : public AbstractAssetDumper { public: - DumperT5(); + explicit DumperT5(const AssetPool& pool); protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; private: std::unique_ptr m_writer; diff --git a/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.cpp b/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.cpp index 44aac168..5edb14a4 100644 --- a/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.cpp +++ b/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.cpp @@ -11,14 +11,14 @@ using namespace T5; namespace localize { - size_t DumperT5::GetProgressTotalCount(const AssetPool& pool) const + DumperT5::DumperT5(const AssetPool& pool) + : AbstractSingleProgressAssetDumper(pool) { - return pool.m_asset_lookup.empty() ? 0uz : 1uz; } - void DumperT5::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + void DumperT5::Dump(AssetDumpingContext& context) { - if (pool.m_asset_lookup.empty()) + if (m_pool.m_asset_lookup.empty()) return; const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language); @@ -35,7 +35,7 @@ namespace localize stringFileDumper.SetNotes(""); - for (const auto* localizeEntry : pool) + for (const auto* localizeEntry : m_pool) { stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value); } diff --git a/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.h b/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.h index 9648668b..5dfac74c 100644 --- a/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.h +++ b/src/ObjWriting/Game/T5/Localize/LocalizeDumperT5.h @@ -5,10 +5,11 @@ namespace localize { - class DumperT5 final : public IAssetDumper + class DumperT5 final : public AbstractSingleProgressAssetDumper { public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override; - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit DumperT5(const AssetPool& pool); + + void Dump(AssetDumpingContext& context) override; }; } // namespace localize diff --git a/src/ObjWriting/Game/T5/ObjWriterT5.cpp b/src/ObjWriting/Game/T5/ObjWriterT5.cpp index 101339a4..c1acccb0 100644 --- a/src/ObjWriting/Game/T5/ObjWriterT5.cpp +++ b/src/ObjWriting/Game/T5/ObjWriterT5.cpp @@ -13,62 +13,61 @@ using namespace T5; bool ObjWriter::DumpZone(AssetDumpingContext& context) const { -#define DUMP_ASSET_POOL(dumperType, poolName, assetType) \ - if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \ +#define REGISTER_DUMPER(dumperType, poolName) \ + if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \ { \ - dumperType dumper; \ - totalProgress += dumper.GetProgressTotalCount(*assetPools->poolName); \ - dumpingFunctions.emplace_back( \ - [](AssetDumpingContext& funcContext, const GameAssetPoolT5* funcPools) \ - { \ - dumperType dumper; \ - dumper.DumpPool(funcContext, *funcPools->poolName); \ - }); \ + dumpers.emplace_back(std::make_unique(*assetPools->poolName)); \ } const auto* assetPools = dynamic_cast(context.m_zone.m_pools.get()); + std::vector> dumpers; - size_t totalProgress = 0uz; - std::vector> dumpingFunctions; + // REGISTER_DUMPER(AssetDumperPhysPreset, m_phys_preset) + // REGISTER_DUMPER(AssetDumperPhysConstraints, m_phys_constraints) + // REGISTER_DUMPER(AssetDumperDestructibleDef, m_destructible_def) + // REGISTER_DUMPER(AssetDumperXAnimParts, m_xanim_parts) + REGISTER_DUMPER(xmodel::DumperT5, m_xmodel) + REGISTER_DUMPER(material::JsonDumperT5, m_material) + // REGISTER_DUMPER(AssetDumperTechniqueSet, m_technique_set) + REGISTER_DUMPER(image::DumperT5, m_image) + // REGISTER_DUMPER(AssetDumperSndBank, m_sound_bank) + // REGISTER_DUMPER(AssetDumperSndPatch, m_sound_patch) + // REGISTER_DUMPER(AssetDumperClipMap, m_clip_map) + // REGISTER_DUMPER(AssetDumperComWorld, m_com_world) + // REGISTER_DUMPER(AssetDumperGameWorldSp, m_game_world_sp) + // REGISTER_DUMPER(AssetDumperGameWorldMp, m_game_world_mp) + // REGISTER_DUMPER(AssetDumperMapEnts, m_map_ents) + // REGISTER_DUMPER(AssetDumperGfxWorld, m_gfx_world) + // REGISTER_DUMPER(AssetDumperGfxLightDef, m_gfx_light_def) + // REGISTER_DUMPER(AssetDumperFont, m_font) + // REGISTER_DUMPER(AssetDumperMenuList, m_menu_list) + // REGISTER_DUMPER(AssetDumperMenuDef, m_menu_def) + REGISTER_DUMPER(localize::DumperT5, m_localize) + // REGISTER_DUMPER(AssetDumperWeapon, m_weapon) + // REGISTER_DUMPER(AssetDumperSndDriverGlobals, m_snd_driver_globals) + // REGISTER_DUMPER(AssetDumperFxEffectDef, m_fx) + // REGISTER_DUMPER(AssetDumperFxImpactTable, m_fx_impact_table) + REGISTER_DUMPER(raw_file::DumperT5, m_raw_file) + REGISTER_DUMPER(string_table::DumperT5, m_string_table) + // REGISTER_DUMPER(AssetDumperPackIndex, m_pack_index) + // REGISTER_DUMPER(AssetDumperXGlobals, m_xglobals) + // REGISTER_DUMPER(AssetDumperDDLRoot, m_ddl) + // REGISTER_DUMPER(AssetDumperGlasses, m_glasses) + // REGISTER_DUMPER(AssetDumperEmblemSet, m_emblem_set) - // DUMP_ASSET_POOL(AssetDumperPhysPreset, m_phys_preset, ASSET_TYPE_PHYSPRESET) - // DUMP_ASSET_POOL(AssetDumperPhysConstraints, m_phys_constraints, ASSET_TYPE_PHYSCONSTRAINTS) - // DUMP_ASSET_POOL(AssetDumperDestructibleDef, m_destructible_def, ASSET_TYPE_DESTRUCTIBLEDEF) - // DUMP_ASSET_POOL(AssetDumperXAnimParts, m_xanim_parts, ASSET_TYPE_XANIMPARTS) - DUMP_ASSET_POOL(xmodel::DumperT5, m_xmodel, ASSET_TYPE_XMODEL) - DUMP_ASSET_POOL(material::JsonDumperT5, m_material, ASSET_TYPE_MATERIAL) - // DUMP_ASSET_POOL(AssetDumperTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(image::DumperT5, m_image, ASSET_TYPE_IMAGE) - // DUMP_ASSET_POOL(AssetDumperSndBank, m_sound_bank, ASSET_TYPE_SOUND) - // DUMP_ASSET_POOL(AssetDumperSndPatch, m_sound_patch, ASSET_TYPE_SOUND_PATCH) - // DUMP_ASSET_POOL(AssetDumperClipMap, m_clip_map, ASSET_TYPE_CLIPMAP_PVS) - // DUMP_ASSET_POOL(AssetDumperComWorld, m_com_world, ASSET_TYPE_COMWORLD) - // DUMP_ASSET_POOL(AssetDumperGameWorldSp, m_game_world_sp, ASSET_TYPE_GAMEWORLD_SP) - // DUMP_ASSET_POOL(AssetDumperGameWorldMp, m_game_world_mp, ASSET_TYPE_GAMEWORLD_MP) - // DUMP_ASSET_POOL(AssetDumperMapEnts, m_map_ents, ASSET_TYPE_MAP_ENTS) - // DUMP_ASSET_POOL(AssetDumperGfxWorld, m_gfx_world, ASSET_TYPE_GFXWORLD) - // DUMP_ASSET_POOL(AssetDumperGfxLightDef, m_gfx_light_def, ASSET_TYPE_LIGHT_DEF) - // DUMP_ASSET_POOL(AssetDumperFont, m_font, ASSET_TYPE_FONT) - // DUMP_ASSET_POOL(AssetDumperMenuList, m_menu_list, ASSET_TYPE_MENULIST) - // DUMP_ASSET_POOL(AssetDumperMenuDef, m_menu_def, ASSET_TYPE_MENU) - DUMP_ASSET_POOL(localize::DumperT5, m_localize, ASSET_TYPE_LOCALIZE_ENTRY) - // DUMP_ASSET_POOL(AssetDumperWeapon, m_weapon, ASSET_TYPE_WEAPON) - // DUMP_ASSET_POOL(AssetDumperSndDriverGlobals, m_snd_driver_globals, ASSET_TYPE_SNDDRIVER_GLOBALS) - // DUMP_ASSET_POOL(AssetDumperFxEffectDef, m_fx, ASSET_TYPE_FX) - // DUMP_ASSET_POOL(AssetDumperFxImpactTable, m_fx_impact_table, ASSET_TYPE_IMPACT_FX) - DUMP_ASSET_POOL(raw_file::DumperT5, m_raw_file, ASSET_TYPE_RAWFILE) - DUMP_ASSET_POOL(string_table::DumperT5, m_string_table, ASSET_TYPE_STRINGTABLE) - // DUMP_ASSET_POOL(AssetDumperPackIndex, m_pack_index, ASSET_TYPE_PACK_INDEX) - // DUMP_ASSET_POOL(AssetDumperXGlobals, m_xglobals, ASSET_TYPE_XGLOBALS) - // DUMP_ASSET_POOL(AssetDumperDDLRoot, m_ddl, ASSET_TYPE_DDL) - // DUMP_ASSET_POOL(AssetDumperGlasses, m_glasses, ASSET_TYPE_GLASSES) - // DUMP_ASSET_POOL(AssetDumperEmblemSet, m_emblem_set, ASSET_TYPE_EMBLEMSET) + if (context.ShouldTrackProgress()) + { + size_t totalProgress = 0uz; + for (const auto& dumper : dumpers) + totalProgress += dumper->GetProgressTotalCount(); - context.SetTotalProgress(totalProgress); - for (const auto& func : dumpingFunctions) - func(context, assetPools); + context.SetTotalProgress(totalProgress); + } + + for (const auto& dumper : dumpers) + dumper->Dump(context); return true; -#undef DUMP_ASSET_POOL +#undef REGISTER_DUMPER } diff --git a/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.cpp b/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.cpp index ac6d8922..ca86c231 100644 --- a/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.cpp +++ b/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.cpp @@ -96,7 +96,12 @@ namespace namespace raw_file { - void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT5::DumperT5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* rawFile = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.h b/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.h index 38b46813..46ec5302 100644 --- a/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.h +++ b/src/ObjWriting/Game/T5/RawFile/RawFileDumperT5.h @@ -5,9 +5,12 @@ namespace raw_file { - class DumperT5 final : public AbstractAssetDumper + class DumperT5 final : public AbstractAssetDumper { + public: + explicit DumperT5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace raw_file diff --git a/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.cpp b/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.cpp index 2aa544e5..ce6135e9 100644 --- a/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.cpp +++ b/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.cpp @@ -6,7 +6,12 @@ using namespace T5; namespace string_table { - void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT5::DumperT5(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* stringTable = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.h b/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.h index 8257c607..4d388533 100644 --- a/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.h +++ b/src/ObjWriting/Game/T5/StringTable/StringTableDumperT5.h @@ -5,9 +5,12 @@ namespace string_table { - class DumperT5 final : public AbstractAssetDumper + class DumperT5 final : public AbstractAssetDumper { + public: + explicit DumperT5(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace string_table diff --git a/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.cpp b/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.cpp index d8687eae..77282951 100644 --- a/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.cpp +++ b/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.cpp @@ -133,7 +133,12 @@ namespace namespace font_icon { - void CsvDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + CsvDumperT6::CsvDumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void CsvDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.h b/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.h index dfd0798e..ee880ff2 100644 --- a/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.h +++ b/src/ObjWriting/Game/T6/FontIcon/FontIconCsvDumperT6.h @@ -5,9 +5,12 @@ namespace font_icon { - class CsvDumperT6 final : public AbstractAssetDumper + class CsvDumperT6 final : public AbstractAssetDumper { + public: + explicit CsvDumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace font_icon diff --git a/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.cpp b/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.cpp index 9f41412b..b042fd13 100644 --- a/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.cpp +++ b/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.cpp @@ -9,12 +9,12 @@ using namespace T6; namespace font_icon { - std::unique_ptr> CreateDumperT6() + std::unique_ptr CreateDumperT6(const AssetPool& pool) { #ifdef DUMP_FONT_ICON_AS_CSV - return std::make_unique(); + return std::make_unique(pool); #else - return std::make_unique(); + return std::make_unique(pool); #endif } } // namespace font_icon diff --git a/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.h b/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.h index 55d048f9..e150b9c2 100644 --- a/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.h +++ b/src/ObjWriting/Game/T6/FontIcon/FontIconDumperT6.h @@ -7,5 +7,5 @@ namespace font_icon { - std::unique_ptr> CreateDumperT6(); + std::unique_ptr CreateDumperT6(const AssetPool& pool); } // namespace font_icon diff --git a/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.cpp b/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.cpp index 034e9c69..f82ef8dc 100644 --- a/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.cpp +++ b/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.cpp @@ -78,7 +78,12 @@ namespace namespace font_icon { - void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + JsonDumperT6::JsonDumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAssetName(asset.m_name)); diff --git a/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.h b/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.h index 5921d75c..f25c0761 100644 --- a/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.h +++ b/src/ObjWriting/Game/T6/FontIcon/FontIconJsonDumperT6.h @@ -5,9 +5,12 @@ namespace font_icon { - class JsonDumperT6 final : public AbstractAssetDumper + class JsonDumperT6 final : public AbstractAssetDumper { + public: + explicit JsonDumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace font_icon diff --git a/src/ObjWriting/Game/T6/Image/ImageDumperT6.cpp b/src/ObjWriting/Game/T6/Image/ImageDumperT6.cpp index eaa87f4c..3566f780 100644 --- a/src/ObjWriting/Game/T6/Image/ImageDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Image/ImageDumperT6.cpp @@ -77,7 +77,8 @@ namespace namespace image { - DumperT6::DumperT6() + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) { switch (ObjWriting::Configuration.ImageOutputFormat) { @@ -94,7 +95,7 @@ namespace image } } - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* image = asset.Asset(); const auto texture = LoadImageData(context.m_obj_search_path, *image); diff --git a/src/ObjWriting/Game/T6/Image/ImageDumperT6.h b/src/ObjWriting/Game/T6/Image/ImageDumperT6.h index 16072342..81dc2e93 100644 --- a/src/ObjWriting/Game/T6/Image/ImageDumperT6.h +++ b/src/ObjWriting/Game/T6/Image/ImageDumperT6.h @@ -8,13 +8,13 @@ namespace image { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { public: - DumperT6(); + explicit DumperT6(const AssetPool& pool); protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; private: std::unique_ptr m_writer; diff --git a/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.cpp b/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.cpp index 5fef2615..0a68fd4a 100644 --- a/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.cpp @@ -98,7 +98,12 @@ namespace namespace leaderboard { - void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + JsonDumperT6::JsonDumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAsset(asset.m_name)); diff --git a/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.h b/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.h index 2dae1d7c..90db9a73 100644 --- a/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.h +++ b/src/ObjWriting/Game/T6/Leaderboard/LeaderboardJsonDumperT6.h @@ -5,9 +5,12 @@ namespace leaderboard { - class JsonDumperT6 final : public AbstractAssetDumper + class JsonDumperT6 final : public AbstractAssetDumper { + public: + explicit JsonDumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace leaderboard diff --git a/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.cpp b/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.cpp index cce11ec0..5928599b 100644 --- a/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.cpp @@ -11,14 +11,14 @@ using namespace T6; namespace localize { - size_t DumperT6::GetProgressTotalCount(const AssetPool& pool) const + DumperT6::DumperT6(const AssetPool& pool) + : AbstractSingleProgressAssetDumper(pool) { - return pool.m_asset_lookup.empty() ? 0uz : 1uz; } - void DumperT6::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + void DumperT6::Dump(AssetDumpingContext& context) { - if (pool.m_asset_lookup.empty()) + if (m_pool.m_asset_lookup.empty()) return; const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language); @@ -35,7 +35,7 @@ namespace localize stringFileDumper.SetNotes(""); - for (const auto* localizeEntry : pool) + for (const auto* localizeEntry : m_pool) { stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value); } diff --git a/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.h b/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.h index d8791f8a..184d7a8b 100644 --- a/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.h +++ b/src/ObjWriting/Game/T6/Localize/LocalizeDumperT6.h @@ -5,10 +5,11 @@ namespace localize { - class DumperT6 final : public IAssetDumper + class DumperT6 final : public AbstractSingleProgressAssetDumper { public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override; - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit DumperT6(const AssetPool& pool); + + void Dump(AssetDumpingContext& context) override; }; } // namespace localize diff --git a/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp b/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp index 12a92da8..ad6c87aa 100644 --- a/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp @@ -6,7 +6,12 @@ using namespace T6; namespace map_ents { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* mapEnts = asset.Asset(); diff --git a/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.h b/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.h index 6782a09f..76270145 100644 --- a/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.h +++ b/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.h @@ -5,9 +5,12 @@ namespace map_ents { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace map_ents diff --git a/src/ObjWriting/Game/T6/ObjWriterT6.cpp b/src/ObjWriting/Game/T6/ObjWriterT6.cpp index dea39dfe..df9c60ab 100644 --- a/src/ObjWriting/Game/T6/ObjWriterT6.cpp +++ b/src/ObjWriting/Game/T6/ObjWriterT6.cpp @@ -27,96 +27,88 @@ #include "Weapon/WeaponDumperT6.h" #include "ZBarrier/ZBarrierDumperT6.h" -#include - using namespace T6; bool ObjWriter::DumpZone(AssetDumpingContext& context) const { -#define DUMP_ASSET_POOL(dumperType, poolName, assetType) \ - if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \ +#define REGISTER_DUMPER(dumperType, poolName) \ + if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \ { \ - dumperType dumper; \ - totalProgress += dumper.GetProgressTotalCount(*assetPools->poolName); \ - dumpingFunctions.emplace_back( \ - [](AssetDumpingContext& funcContext, const GameAssetPoolT6* funcPools) \ - { \ - dumperType dumper; \ - dumper.DumpPool(funcContext, *funcPools->poolName); \ - }); \ + dumpers.emplace_back(std::make_unique(*assetPools->poolName)); \ } -#define DUMP_ASSET_POOL_WITH_FACTORY(createDumper, poolName, assetType) \ - if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \ +#define REGISTER_DUMPER_WITH_FACTORY(createDumper, poolName, asset) \ + if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(asset::EnumEntry)) \ { \ - auto dumper = createDumper; \ - totalProgress += dumper->GetProgressTotalCount(*assetPools->poolName); \ - dumpingFunctions.emplace_back( \ - [](AssetDumpingContext& funcContext, const GameAssetPoolT6* funcPools) \ - { \ - auto dumper = createDumper; \ - dumper->DumpPool(funcContext, *funcPools->poolName); \ - }); \ + auto dumper = createDumper(*assetPools->poolName); \ + if (dumper) \ + dumpers.emplace_back(std::move(dumper)); \ } const auto* assetPools = dynamic_cast(context.m_zone.m_pools.get()); + std::vector> dumpers; - size_t totalProgress = 0uz; - std::vector> dumpingFunctions; + REGISTER_DUMPER(phys_preset::InfoStringDumperT6, m_phys_preset) + REGISTER_DUMPER(phys_constraints::InfoStringDumperT6, m_phys_constraints) + // REGISTER_DUMPER(AssetDumperDestructibleDef, m_destructible_def) + // REGISTER_DUMPER(AssetDumperXAnimParts, m_xanim_parts) + REGISTER_DUMPER(xmodel::DumperT6, m_xmodel) + REGISTER_DUMPER(material::JsonDumperT6, m_material) + REGISTER_DUMPER(techset::DumperT6, m_technique_set) + REGISTER_DUMPER(image::DumperT6, m_image) + REGISTER_DUMPER(sound::SndBankDumperT6, m_sound_bank) + // REGISTER_DUMPER(AssetDumperSndPatch, m_sound_patch) + // REGISTER_DUMPER(AssetDumperClipMap, m_clip_map) + // REGISTER_DUMPER(AssetDumperComWorld, m_com_world) + // REGISTER_DUMPER(AssetDumperGameWorldSp, m_game_world_sp) + // REGISTER_DUMPER(AssetDumperGameWorldMp, m_game_world_mp) + REGISTER_DUMPER(map_ents::DumperT6, m_map_ents) + // REGISTER_DUMPER(AssetDumperGfxWorld, m_gfx_world) + // REGISTER_DUMPER(AssetDumperGfxLightDef, m_gfx_light_def) + // REGISTER_DUMPER(AssetDumperFont, m_font) + REGISTER_DUMPER_WITH_FACTORY(font_icon::CreateDumperT6, m_font_icon, AssetFontIcon) + // REGISTER_DUMPER(AssetDumperMenuList, m_menu_list) + // REGISTER_DUMPER(AssetDumperMenuDef, m_menu_def) + REGISTER_DUMPER(localize::DumperT6, m_localize) + REGISTER_DUMPER(weapon::DumperT6, m_weapon) + REGISTER_DUMPER(attachment::DumperT6, m_attachment) + REGISTER_DUMPER(attachment_unique::DumperT6, m_attachment_unique) + REGISTER_DUMPER(camo::JsonDumperT6, m_camo) + REGISTER_DUMPER(sound::SndDriverGlobalsDumperT6, m_snd_driver_globals) + // REGISTER_DUMPER(AssetDumperFxEffectDef, m_fx) + // REGISTER_DUMPER(AssetDumperFxImpactTable, m_fx_impact_table) + REGISTER_DUMPER(raw_file::DumperT6, m_raw_file) + REGISTER_DUMPER(string_table::DumperT6, m_string_table) + REGISTER_DUMPER(leaderboard::JsonDumperT6, m_leaderboard) + // REGISTER_DUMPER(AssetDumperXGlobals, m_xglobals) + // REGISTER_DUMPER(AssetDumperDDLRoot, m_ddl) + // REGISTER_DUMPER(AssetDumperGlasses, m_glasses) + // REGISTER_DUMPER(AssetDumperEmblemSet, m_emblem_set) + REGISTER_DUMPER(script::DumperT6, m_script) + // REGISTER_DUMPER(AssetDumperKeyValuePairs, m_key_value_pairs) + REGISTER_DUMPER(vehicle::DumperT6, m_vehicle) + // REGISTER_DUMPER(AssetDumperMemoryBlock, m_memory_block) + // REGISTER_DUMPER(AssetDumperAddonMapEnts, m_addon_map_ents) + REGISTER_DUMPER(tracer::DumperT6, m_tracer) + // REGISTER_DUMPER(AssetDumperSkinnedVertsDef, m_skinned_verts) + REGISTER_DUMPER(qdb::DumperT6, m_qdb) + REGISTER_DUMPER(slug::DumperT6, m_slug) + // REGISTER_DUMPER(AssetDumperFootstepTableDef, m_footstep_table) + // REGISTER_DUMPER(AssetDumperFootstepFXTableDef, m_footstep_fx_table) + REGISTER_DUMPER(z_barrier::DumperT6, m_zbarrier) - DUMP_ASSET_POOL(phys_preset::InfoStringDumperT6, m_phys_preset, ASSET_TYPE_PHYSPRESET) - DUMP_ASSET_POOL(phys_constraints::InfoStringDumperT6, m_phys_constraints, ASSET_TYPE_PHYSCONSTRAINTS) - // DUMP_ASSET_POOL(AssetDumperDestructibleDef, m_destructible_def, ASSET_TYPE_DESTRUCTIBLEDEF) - // DUMP_ASSET_POOL(AssetDumperXAnimParts, m_xanim_parts, ASSET_TYPE_XANIMPARTS) - DUMP_ASSET_POOL(xmodel::DumperT6, m_xmodel, ASSET_TYPE_XMODEL) - DUMP_ASSET_POOL(material::JsonDumperT6, m_material, ASSET_TYPE_MATERIAL) - DUMP_ASSET_POOL(techset::DumperT6, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(image::DumperT6, m_image, ASSET_TYPE_IMAGE) - DUMP_ASSET_POOL(sound::SndBankDumperT6, m_sound_bank, ASSET_TYPE_SOUND) - // DUMP_ASSET_POOL(AssetDumperSndPatch, m_sound_patch, ASSET_TYPE_SOUND_PATCH) - // DUMP_ASSET_POOL(AssetDumperClipMap, m_clip_map, ASSET_TYPE_CLIPMAP_PVS) - // DUMP_ASSET_POOL(AssetDumperComWorld, m_com_world, ASSET_TYPE_COMWORLD) - // DUMP_ASSET_POOL(AssetDumperGameWorldSp, m_game_world_sp, ASSET_TYPE_GAMEWORLD_SP) - // DUMP_ASSET_POOL(AssetDumperGameWorldMp, m_game_world_mp, ASSET_TYPE_GAMEWORLD_MP) - DUMP_ASSET_POOL(map_ents::DumperT6, m_map_ents, ASSET_TYPE_MAP_ENTS) - // DUMP_ASSET_POOL(AssetDumperGfxWorld, m_gfx_world, ASSET_TYPE_GFXWORLD) - // DUMP_ASSET_POOL(AssetDumperGfxLightDef, m_gfx_light_def, ASSET_TYPE_LIGHT_DEF) - // DUMP_ASSET_POOL(AssetDumperFont, m_font, ASSET_TYPE_FONT) - DUMP_ASSET_POOL_WITH_FACTORY(font_icon::CreateDumperT6(), m_font_icon, ASSET_TYPE_FONTICON) - // DUMP_ASSET_POOL(AssetDumperMenuList, m_menu_list, ASSET_TYPE_MENULIST) - // DUMP_ASSET_POOL(AssetDumperMenuDef, m_menu_def, ASSET_TYPE_MENU) - DUMP_ASSET_POOL(localize::DumperT6, m_localize, ASSET_TYPE_LOCALIZE_ENTRY) - DUMP_ASSET_POOL(weapon::DumperT6, m_weapon, ASSET_TYPE_WEAPON) - DUMP_ASSET_POOL(attachment::DumperT6, m_attachment, ASSET_TYPE_ATTACHMENT) - DUMP_ASSET_POOL(attachment_unique::DumperT6, m_attachment_unique, ASSET_TYPE_ATTACHMENT_UNIQUE) - DUMP_ASSET_POOL(camo::JsonDumperT6, m_camo, ASSET_TYPE_WEAPON_CAMO) - DUMP_ASSET_POOL(sound::SndDriverGlobalsDumperT6, m_snd_driver_globals, ASSET_TYPE_SNDDRIVER_GLOBALS) - // DUMP_ASSET_POOL(AssetDumperFxEffectDef, m_fx, ASSET_TYPE_FX) - // DUMP_ASSET_POOL(AssetDumperFxImpactTable, m_fx_impact_table, ASSET_TYPE_IMPACT_FX) - DUMP_ASSET_POOL(raw_file::DumperT6, m_raw_file, ASSET_TYPE_RAWFILE) - DUMP_ASSET_POOL(string_table::DumperT6, m_string_table, ASSET_TYPE_STRINGTABLE) - DUMP_ASSET_POOL(leaderboard::JsonDumperT6, m_leaderboard, ASSET_TYPE_LEADERBOARD) - // DUMP_ASSET_POOL(AssetDumperXGlobals, m_xglobals, ASSET_TYPE_XGLOBALS) - // DUMP_ASSET_POOL(AssetDumperDDLRoot, m_ddl, ASSET_TYPE_DDL) - // DUMP_ASSET_POOL(AssetDumperGlasses, m_glasses, ASSET_TYPE_GLASSES) - // DUMP_ASSET_POOL(AssetDumperEmblemSet, m_emblem_set, ASSET_TYPE_EMBLEMSET) - DUMP_ASSET_POOL(script::DumperT6, m_script, ASSET_TYPE_SCRIPTPARSETREE) - // DUMP_ASSET_POOL(AssetDumperKeyValuePairs, m_key_value_pairs, ASSET_TYPE_KEYVALUEPAIRS) - DUMP_ASSET_POOL(vehicle::DumperT6, m_vehicle, ASSET_TYPE_VEHICLEDEF) - // DUMP_ASSET_POOL(AssetDumperMemoryBlock, m_memory_block, ASSET_TYPE_MEMORYBLOCK) - // DUMP_ASSET_POOL(AssetDumperAddonMapEnts, m_addon_map_ents, ASSET_TYPE_ADDON_MAP_ENTS) - DUMP_ASSET_POOL(tracer::DumperT6, m_tracer, ASSET_TYPE_TRACER) - // DUMP_ASSET_POOL(AssetDumperSkinnedVertsDef, m_skinned_verts, ASSET_TYPE_SKINNEDVERTS) - DUMP_ASSET_POOL(qdb::DumperT6, m_qdb, ASSET_TYPE_QDB) - DUMP_ASSET_POOL(slug::DumperT6, m_slug, ASSET_TYPE_SLUG) - // DUMP_ASSET_POOL(AssetDumperFootstepTableDef, m_footstep_table, ASSET_TYPE_FOOTSTEP_TABLE) - // DUMP_ASSET_POOL(AssetDumperFootstepFXTableDef, m_footstep_fx_table, ASSET_TYPE_FOOTSTEPFX_TABLE) - DUMP_ASSET_POOL(z_barrier::DumperT6, m_zbarrier, ASSET_TYPE_ZBARRIER) + if (context.ShouldTrackProgress()) + { + size_t totalProgress = 0uz; + for (const auto& dumper : dumpers) + totalProgress += dumper->GetProgressTotalCount(); - context.SetTotalProgress(totalProgress); - for (const auto& func : dumpingFunctions) - func(context, assetPools); + context.SetTotalProgress(totalProgress); + } + + for (const auto& dumper : dumpers) + dumper->Dump(context); return true; -#undef DUMP_ASSET_POOL +#undef REGISTER_DUMPER } diff --git a/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp b/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp index 53bc219f..4f6dee21 100644 --- a/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp +++ b/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp @@ -61,7 +61,12 @@ namespace namespace phys_constraints { - void InfoStringDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + InfoStringDumperT6::InfoStringDumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void InfoStringDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.h b/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.h index 1f118d90..87ae940e 100644 --- a/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.h +++ b/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/T6/T6.h" -#include "InfoString/InfoString.h" namespace phys_constraints { - class InfoStringDumperT6 final : public AbstractAssetDumper + class InfoStringDumperT6 final : public AbstractAssetDumper { + public: + explicit InfoStringDumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace phys_constraints diff --git a/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp b/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp index 56c5ad63..b0948f97 100644 --- a/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp +++ b/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp @@ -82,7 +82,12 @@ namespace namespace phys_preset { - void InfoStringDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + InfoStringDumperT6::InfoStringDumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void InfoStringDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.h b/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.h index abc0f8be..90253b78 100644 --- a/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.h +++ b/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/T6/T6.h" -#include "InfoString/InfoString.h" namespace phys_preset { - class InfoStringDumperT6 final : public AbstractAssetDumper + class InfoStringDumperT6 final : public AbstractAssetDumper { + public: + explicit InfoStringDumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace phys_preset diff --git a/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.cpp b/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.cpp index 9cb3b67d..0ad923e0 100644 --- a/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.cpp @@ -4,7 +4,12 @@ using namespace T6; namespace qdb { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* qdb = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.h b/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.h index 9df957ef..6446d1eb 100644 --- a/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.h +++ b/src/ObjWriting/Game/T6/Qdb/QdbDumperT6.h @@ -5,9 +5,12 @@ namespace qdb { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace qdb diff --git a/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.cpp b/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.cpp index 6e4cb2f4..beda25b7 100644 --- a/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.cpp +++ b/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.cpp @@ -77,7 +77,12 @@ namespace namespace raw_file { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* rawFile = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.h b/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.h index 12c87d56..a45aa9ac 100644 --- a/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.h +++ b/src/ObjWriting/Game/T6/RawFile/RawFileDumperT6.h @@ -5,9 +5,12 @@ namespace raw_file { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace raw_file diff --git a/src/ObjWriting/Game/T6/Script/ScriptDumperT6.cpp b/src/ObjWriting/Game/T6/Script/ScriptDumperT6.cpp index b68d1d4f..dfe974a5 100644 --- a/src/ObjWriting/Game/T6/Script/ScriptDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Script/ScriptDumperT6.cpp @@ -4,7 +4,12 @@ using namespace T6; namespace script { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* scriptParseTree = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T6/Script/ScriptDumperT6.h b/src/ObjWriting/Game/T6/Script/ScriptDumperT6.h index d2a18e44..bc1a9aee 100644 --- a/src/ObjWriting/Game/T6/Script/ScriptDumperT6.h +++ b/src/ObjWriting/Game/T6/Script/ScriptDumperT6.h @@ -5,9 +5,12 @@ namespace script { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace script diff --git a/src/ObjWriting/Game/T6/Slug/SlugDumperT6.cpp b/src/ObjWriting/Game/T6/Slug/SlugDumperT6.cpp index fbad9570..7e71e468 100644 --- a/src/ObjWriting/Game/T6/Slug/SlugDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Slug/SlugDumperT6.cpp @@ -4,7 +4,12 @@ using namespace T6; namespace slug { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* slug = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T6/Slug/SlugDumperT6.h b/src/ObjWriting/Game/T6/Slug/SlugDumperT6.h index 2aa55101..67bba25d 100644 --- a/src/ObjWriting/Game/T6/Slug/SlugDumperT6.h +++ b/src/ObjWriting/Game/T6/Slug/SlugDumperT6.h @@ -5,9 +5,12 @@ namespace slug { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace slug diff --git a/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.cpp b/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.cpp index 195ff587..29f0485c 100644 --- a/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.cpp @@ -198,7 +198,7 @@ namespace constexpr auto FORMATTING_RETRIES = 5; - class LoadedSoundBankHashes + class LoadedSoundBankHashes : public IZoneAssetDumperState { public: void Initialize() @@ -901,36 +901,30 @@ namespace *duckFile << duckObj.dump(4) << "\n"; } } - - void DumpSndBank(const AssetDumpingContext& context, const LoadedSoundBankHashes& hashes, const XAssetInfo& sndBankInfo) - { - const auto* sndBank = sndBankInfo.Asset(); - - DumpSndBankAliases(context, hashes, *sndBank); - DumpSoundRadverb(context, *sndBank); - DumpSoundDucks(context, *sndBank); - } } // namespace namespace sound { - size_t SndBankDumperT6::GetProgressTotalCount(const AssetPool& pool) const + SndBankDumperT6::SndBankDumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) { - return pool.m_asset_lookup.size(); } - void SndBankDumperT6::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + void SndBankDumperT6::Dump(AssetDumpingContext& context) { - LoadedSoundBankHashes soundBankHashes; - soundBankHashes.Initialize(); - for (const auto* assetInfo : pool) - { - if (!assetInfo->m_name.empty() && assetInfo->m_name[0] == ',') - continue; + auto* hashes = context.GetZoneAssetDumperState(); + hashes->Initialize(); - DumpSndBank(context, soundBankHashes, *assetInfo); + AbstractAssetDumper::Dump(context); + } - context.IncrementProgress(); - } + void SndBankDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + { + const auto* sndBank = asset.Asset(); + const auto* hashes = context.GetZoneAssetDumperState(); + + DumpSndBankAliases(context, *hashes, *sndBank); + DumpSoundRadverb(context, *sndBank); + DumpSoundDucks(context, *sndBank); } } // namespace sound diff --git a/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.h b/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.h index cc209b0c..616729f1 100644 --- a/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.h +++ b/src/ObjWriting/Game/T6/Sound/SndBankDumperT6.h @@ -5,10 +5,13 @@ namespace sound { - class SndBankDumperT6 final : public IAssetDumper + class SndBankDumperT6 final : public AbstractAssetDumper { public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override; - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit SndBankDumperT6(const AssetPool& pool); + void Dump(AssetDumpingContext& context) override; + + protected: + void DumpAsset(AssetDumpingContext& context, const XAssetInfo::Type>& asset) override; }; } // namespace sound diff --git a/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.cpp b/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.cpp index d62de41c..0c862429 100644 --- a/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.cpp @@ -385,15 +385,15 @@ namespace namespace sound { - size_t SndDriverGlobalsDumperT6::GetProgressTotalCount(const AssetPool& pool) const + SndDriverGlobalsDumperT6::SndDriverGlobalsDumperT6(const AssetPool& pool) + : AbstractSingleProgressAssetDumper(pool) { - return pool.m_asset_lookup.empty() ? 0uz : 1uz; } - void SndDriverGlobalsDumperT6::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + void SndDriverGlobalsDumperT6::Dump(AssetDumpingContext& context) { Internal internal(context); - internal.DumpPool(pool); + internal.DumpPool(m_pool); context.IncrementProgress(); } diff --git a/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.h b/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.h index 317280df..9ce2f55f 100644 --- a/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.h +++ b/src/ObjWriting/Game/T6/Sound/SndDriverGlobalsDumperT6.h @@ -5,10 +5,11 @@ namespace sound { - class SndDriverGlobalsDumperT6 final : public IAssetDumper + class SndDriverGlobalsDumperT6 final : public AbstractSingleProgressAssetDumper { public: - [[nodiscard]] size_t GetProgressTotalCount(const AssetPool& pool) const override; - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit SndDriverGlobalsDumperT6(const AssetPool& pool); + + void Dump(AssetDumpingContext& context) override; }; } // namespace sound diff --git a/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.cpp b/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.cpp index fd184837..840b0f74 100644 --- a/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.cpp +++ b/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.cpp @@ -6,7 +6,12 @@ using namespace T6; namespace string_table { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* stringTable = asset.Asset(); const auto assetFile = context.OpenAssetFile(asset.m_name); diff --git a/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.h b/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.h index 7d0cbe8a..7e6256cb 100644 --- a/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.h +++ b/src/ObjWriting/Game/T6/StringTable/StringTableDumperT6.h @@ -5,9 +5,12 @@ namespace string_table { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace string_table diff --git a/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp b/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp index 8ed50d5e..157b17ea 100644 --- a/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp @@ -77,7 +77,12 @@ namespace namespace techset { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* techniqueSet = asset.Asset(); auto* shaderState = context.GetZoneAssetDumperState(); diff --git a/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.h b/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.h index d9acbe4c..c4093001 100644 --- a/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.h +++ b/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.h @@ -5,9 +5,12 @@ namespace techset { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace techset diff --git a/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp b/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp index 48c377c8..2767db5c 100644 --- a/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp @@ -60,7 +60,12 @@ namespace namespace tracer { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.h b/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.h index a26bca26..08b62c86 100644 --- a/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.h +++ b/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/T6/T6.h" -#include "InfoString/InfoString.h" namespace tracer { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace tracer diff --git a/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp b/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp index 7b012aac..ec71d6e0 100644 --- a/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp @@ -111,7 +111,12 @@ namespace namespace vehicle { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.h b/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.h index cc6c5cf6..58b64757 100644 --- a/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.h +++ b/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/T6/T6.h" -#include "InfoString/InfoString.h" namespace vehicle { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace vehicle diff --git a/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp b/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp index 72630b2e..d7649885 100644 --- a/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp @@ -67,7 +67,12 @@ namespace namespace attachment { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.h b/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.h index 99d06d9d..ad9aaee9 100644 --- a/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.h +++ b/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/T6/T6.h" -#include "InfoString/InfoString.h" namespace attachment { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace attachment diff --git a/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp b/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp index e6f893ab..e61a2567 100644 --- a/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp @@ -131,7 +131,12 @@ namespace namespace attachment_unique { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.h b/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.h index 3c5dbe16..65da39bc 100644 --- a/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.h +++ b/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/T6/T6.h" -#include "InfoString/InfoString.h" namespace attachment_unique { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace attachment_unique diff --git a/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.cpp b/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.cpp index 7d7f68bd..e7fda73e 100644 --- a/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.cpp @@ -104,7 +104,12 @@ namespace namespace camo { - void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + JsonDumperT6::JsonDumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto fileName = GetJsonFileNameForAssetName(asset.m_name); const auto assetFile = context.OpenAssetFile(fileName); diff --git a/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.h b/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.h index 0a514a84..7bf2d45b 100644 --- a/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.h +++ b/src/ObjWriting/Game/T6/Weapon/CamoJsonDumperT6.h @@ -5,9 +5,12 @@ namespace camo { - class JsonDumperT6 final : public AbstractAssetDumper + class JsonDumperT6 final : public AbstractAssetDumper { + public: + explicit JsonDumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace camo diff --git a/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp b/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp index a6e39534..4c7c991d 100644 --- a/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp @@ -461,7 +461,12 @@ namespace namespace weapon { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.h b/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.h index 9067889d..18fddd9d 100644 --- a/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.h +++ b/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.h @@ -5,9 +5,12 @@ namespace weapon { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace weapon diff --git a/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp index c8af5610..f9e56c21 100644 --- a/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp +++ b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp @@ -50,7 +50,12 @@ namespace namespace z_barrier { - void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + DumperT6::DumperT6(const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { // Only dump raw when no gdt available if (context.m_gdt) diff --git a/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.h b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.h index 66f18a16..a16c3705 100644 --- a/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.h +++ b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.h @@ -2,13 +2,15 @@ #include "Dumping/AbstractAssetDumper.h" #include "Game/T6/T6.h" -#include "InfoString/InfoString.h" namespace z_barrier { - class DumperT6 final : public AbstractAssetDumper + class DumperT6 final : public AbstractAssetDumper { + public: + explicit DumperT6(const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace z_barrier diff --git a/src/ObjWriting/Material/MaterialJsonDumper.cpp.template b/src/ObjWriting/Material/MaterialJsonDumper.cpp.template index 5e238517..c62ddc9f 100644 --- a/src/ObjWriting/Material/MaterialJsonDumper.cpp.template +++ b/src/ObjWriting/Material/MaterialJsonDumper.cpp.template @@ -361,15 +361,20 @@ namespace namespace material { - void CLASS_NAME::DumpPool(AssetDumpingContext& context, const AssetPool& pool) + CLASS_NAME::CLASS_NAME (const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void CLASS_NAME::Dump(AssetDumpingContext& context) { auto* materialConstantState = context.GetZoneAssetDumperState(); materialConstantState->ExtractNamesFromZone(); - AbstractAssetDumper::DumpPool(context, pool); + AbstractAssetDumper::Dump(context); } - void CLASS_NAME::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void CLASS_NAME::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset.m_name)); diff --git a/src/ObjWriting/Material/MaterialJsonDumper.h.template b/src/ObjWriting/Material/MaterialJsonDumper.h.template index c820a20a..c58bd3f4 100644 --- a/src/ObjWriting/Material/MaterialJsonDumper.h.template +++ b/src/ObjWriting/Material/MaterialJsonDumper.h.template @@ -17,12 +17,13 @@ namespace material { - class CLASS_NAME final : public AbstractAssetDumper + class CLASS_NAME final : public AbstractAssetDumper { public: - void DumpPool(AssetDumpingContext& context, const AssetPool& pool) override; + explicit CLASS_NAME (const AssetPool& pool); + void Dump(AssetDumpingContext& context) override; protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace material diff --git a/src/ObjWriting/XModel/XModelDumper.cpp.template b/src/ObjWriting/XModel/XModelDumper.cpp.template index 9f6f8ccf..c3bb23c8 100644 --- a/src/ObjWriting/XModel/XModelDumper.cpp.template +++ b/src/ObjWriting/XModel/XModelDumper.cpp.template @@ -854,7 +854,12 @@ namespace namespace xmodel { - void CLASS_NAME::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + CLASS_NAME::CLASS_NAME (const AssetPool& pool) + : AbstractAssetDumper(pool) + { + } + + void CLASS_NAME::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { DumpXModelJson(context, asset); DumpXModelSurfs(context, asset); diff --git a/src/ObjWriting/XModel/XModelDumper.h.template b/src/ObjWriting/XModel/XModelDumper.h.template index c6127af3..8dce3422 100644 --- a/src/ObjWriting/XModel/XModelDumper.h.template +++ b/src/ObjWriting/XModel/XModelDumper.h.template @@ -17,9 +17,12 @@ namespace xmodel { - class CLASS_NAME final : public AbstractAssetDumper + class CLASS_NAME final : public AbstractAssetDumper { + public: + explicit CLASS_NAME (const AssetPool& pool); + protected: - void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; }; } // namespace xmodel diff --git a/test/ObjWritingTests/Game/IW3/Material/MaterialJsonDumperIW3Test.cpp b/test/ObjWritingTests/Game/IW3/Material/MaterialJsonDumperIW3Test.cpp index 911a8fdd..fda33fe2 100644 --- a/test/ObjWritingTests/Game/IW3/Material/MaterialJsonDumperIW3Test.cpp +++ b/test/ObjWritingTests/Game/IW3/Material/MaterialJsonDumperIW3Test.cpp @@ -562,8 +562,8 @@ namespace GivenMaterial("wc/ch_plasterwall_long", materialPool, memory); - material::JsonDumperIW3 dumper; - dumper.DumpPool(context, materialPool); + material::JsonDumperIW3 dumper(materialPool); + dumper.Dump(context); const auto* file = mockOutput.GetMockedFile("materials/wc/ch_plasterwall_long.json"); REQUIRE(file); diff --git a/test/ObjWritingTests/Game/IW4/Material/MaterialJsonDumperIW4Test.cpp b/test/ObjWritingTests/Game/IW4/Material/MaterialJsonDumperIW4Test.cpp index f0908753..adbbc517 100644 --- a/test/ObjWritingTests/Game/IW4/Material/MaterialJsonDumperIW4Test.cpp +++ b/test/ObjWritingTests/Game/IW4/Material/MaterialJsonDumperIW4Test.cpp @@ -543,8 +543,8 @@ namespace GivenMaterial("mc/ch_rubble01", materialPool, memory); - material::JsonDumperIW4 dumper; - dumper.DumpPool(context, materialPool); + material::JsonDumperIW4 dumper(materialPool); + dumper.Dump(context); const auto* file = mockOutput.GetMockedFile("materials/mc/ch_rubble01.json"); REQUIRE(file); diff --git a/test/ObjWritingTests/Game/IW5/Material/MaterialJsonDumperIW5Test.cpp b/test/ObjWritingTests/Game/IW5/Material/MaterialJsonDumperIW5Test.cpp index 2c3ab4ee..9c003335 100644 --- a/test/ObjWritingTests/Game/IW5/Material/MaterialJsonDumperIW5Test.cpp +++ b/test/ObjWritingTests/Game/IW5/Material/MaterialJsonDumperIW5Test.cpp @@ -596,8 +596,8 @@ namespace GivenMaterial("wc/me_metal_rust_02", materialPool, memory); - material::JsonDumperIW5 dumper; - dumper.DumpPool(context, materialPool); + material::JsonDumperIW5 dumper(materialPool); + dumper.Dump(context); const auto* file = mockOutput.GetMockedFile("materials/wc/me_metal_rust_02.json"); REQUIRE(file); diff --git a/test/ObjWritingTests/Game/T5/Material/MaterialJsonDumperT5Test.cpp b/test/ObjWritingTests/Game/T5/Material/MaterialJsonDumperT5Test.cpp index 354605f4..0036b78e 100644 --- a/test/ObjWritingTests/Game/T5/Material/MaterialJsonDumperT5Test.cpp +++ b/test/ObjWritingTests/Game/T5/Material/MaterialJsonDumperT5Test.cpp @@ -625,8 +625,8 @@ namespace GivenMaterial("mc/ch_rubble01", materialPool, memory); - material::JsonDumperT5 dumper; - dumper.DumpPool(context, materialPool); + material::JsonDumperT5 dumper(materialPool); + dumper.Dump(context); const auto* file = mockOutput.GetMockedFile("materials/mc/ch_rubble01.json"); REQUIRE(file); diff --git a/test/ObjWritingTests/Game/T6/FontIcon/FontIconJsonDumperT6Test.cpp b/test/ObjWritingTests/Game/T6/FontIcon/FontIconJsonDumperT6Test.cpp index 2a568569..91b6b1f3 100644 --- a/test/ObjWritingTests/Game/T6/FontIcon/FontIconJsonDumperT6Test.cpp +++ b/test/ObjWritingTests/Game/T6/FontIcon/FontIconJsonDumperT6Test.cpp @@ -151,8 +151,8 @@ namespace AssetPoolDynamic fontIconPool(0); GivenFontIcon("fonticon/test.csv", fontIconPool, memory); - font_icon::JsonDumperT6 dumper; - dumper.DumpPool(context, fontIconPool); + font_icon::JsonDumperT6 dumper(fontIconPool); + dumper.Dump(context); const auto* file = mockOutput.GetMockedFile("fonticon/test.json"); REQUIRE(file); diff --git a/test/ObjWritingTests/Game/T6/Material/MaterialJsonDumperT6Test.cpp b/test/ObjWritingTests/Game/T6/Material/MaterialJsonDumperT6Test.cpp index b1331966..bfefddb1 100644 --- a/test/ObjWritingTests/Game/T6/Material/MaterialJsonDumperT6Test.cpp +++ b/test/ObjWritingTests/Game/T6/Material/MaterialJsonDumperT6Test.cpp @@ -472,8 +472,8 @@ namespace AssetPoolDynamic materialPool(0); GivenMaterial("wpc/metal_ac_duct", materialPool, memory); - material::JsonDumperT6 dumper; - dumper.DumpPool(context, materialPool); + material::JsonDumperT6 dumper(materialPool); + dumper.Dump(context); const auto* file = mockOutput.GetMockedFile("materials/wpc/metal_ac_duct.json"); REQUIRE(file);