diff --git a/src/ObjWriting/Dumping/AbstractAssetDumper.h b/src/ObjWriting/Dumping/AbstractFileDumper.h similarity index 69% rename from src/ObjWriting/Dumping/AbstractAssetDumper.h rename to src/ObjWriting/Dumping/AbstractFileDumper.h index 8a324475..d74b6c85 100644 --- a/src/ObjWriting/Dumping/AbstractAssetDumper.h +++ b/src/ObjWriting/Dumping/AbstractFileDumper.h @@ -7,15 +7,15 @@ #include template -class AbstractAssetDumper : public IAssetDumper +class AbstractFileDumper : public IAssetDumper { protected: virtual bool ShouldDump(XAssetInfo* asset) = 0; virtual std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) = 0; - virtual void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) = 0; + virtual void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) = 0; public: - void DumpPool(Zone* zone, AssetPool* pool, const std::string& basePath) override + void DumpPool(AssetDumpingContext& context, AssetPool* pool) override { for(auto assetInfo : *pool) { @@ -25,8 +25,8 @@ public: continue; } - std::filesystem::path assetFilePath(basePath); - assetFilePath.append(GetFileNameForAsset(zone, assetInfo)); + std::filesystem::path assetFilePath(context.m_base_path); + assetFilePath.append(GetFileNameForAsset(context.m_zone, assetInfo)); auto assetFileFolder(assetFilePath); assetFileFolder.replace_filename(""); @@ -35,7 +35,7 @@ public: std::ofstream file(assetFilePath, std::fstream::out | std::fstream::binary); if(file.is_open()) { - DumpAsset(zone, assetInfo, file); + DumpAsset(context, assetInfo, file); file.close(); } diff --git a/src/ObjWriting/Dumping/AssetDumpingContext.cpp b/src/ObjWriting/Dumping/AssetDumpingContext.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/ObjWriting/Dumping/AssetDumpingContext.h b/src/ObjWriting/Dumping/AssetDumpingContext.h new file mode 100644 index 00000000..f8af7d72 --- /dev/null +++ b/src/ObjWriting/Dumping/AssetDumpingContext.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +#include "Zone/Zone.h" + +class AssetDumpingContext +{ +public: + Zone* m_zone; + std::string m_base_path; +}; diff --git a/src/ObjWriting/Dumping/IAssetDumper.h b/src/ObjWriting/Dumping/IAssetDumper.h index 789e7013..8efa5fe6 100644 --- a/src/ObjWriting/Dumping/IAssetDumper.h +++ b/src/ObjWriting/Dumping/IAssetDumper.h @@ -1,13 +1,18 @@ #pragma once -#include "Zone/Zone.h" +#include "AssetDumpingContext.h" #include "Pool/AssetPool.h" template class IAssetDumper { public: + IAssetDumper() = default; virtual ~IAssetDumper() = default; + IAssetDumper(const IAssetDumper& other) = default; + IAssetDumper(IAssetDumper&& other) noexcept = default; + IAssetDumper& operator=(const IAssetDumper& other) = default; + IAssetDumper& operator=(IAssetDumper&& other) noexcept = default; - virtual void DumpPool(Zone* zone, AssetPool* pool, const std::string& basePath) = 0; + virtual void DumpPool(AssetDumpingContext& context, AssetPool* pool) = 0; }; \ No newline at end of file diff --git a/src/ObjWriting/Dumping/IZoneDumper.h b/src/ObjWriting/Dumping/IZoneDumper.h index 194baa7f..8f17ba99 100644 --- a/src/ObjWriting/Dumping/IZoneDumper.h +++ b/src/ObjWriting/Dumping/IZoneDumper.h @@ -1,12 +1,17 @@ #pragma once -#include "Zone/Zone.h" +#include "AssetDumpingContext.h" class IZoneDumper { public: + IZoneDumper() = default; virtual ~IZoneDumper() = default; + IZoneDumper(const IZoneDumper& other) = default; + IZoneDumper(IZoneDumper&& other) noexcept = default; + IZoneDumper& operator=(const IZoneDumper& other) = default; + IZoneDumper& operator=(IZoneDumper&& other) noexcept = default; - virtual bool CanHandleZone(Zone* zone) const = 0; - virtual bool DumpZone(Zone* zone, const std::string& basePath) const = 0; + virtual bool CanHandleZone(AssetDumpingContext& assetDumpingContext) const = 0; + virtual bool DumpZone(AssetDumpingContext& assetDumpingContext) const = 0; }; \ No newline at end of file diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.cpp index 3732d444..21db7c90 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.cpp @@ -15,7 +15,7 @@ std::string AssetDumperAddonMapEnts::GetFileNameForAsset(Zone* zone, XAssetInfo< return asset->m_name; } -void AssetDumperAddonMapEnts::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperAddonMapEnts::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* addonMapEnts = asset->Asset(); stream.write(addonMapEnts->entityString, std::max(addonMapEnts->numEntityChars - 1, 0)); diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.h index a4d80823..65079f54 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperAddonMapEnts.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" namespace IW4 { - class AssetDumperAddonMapEnts final : public AbstractAssetDumper + class AssetDumperAddonMapEnts final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.cpp index 83005ab6..909cd909 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.cpp @@ -42,7 +42,7 @@ std::string AssetDumperGfxImage::GetFileNameForAsset(Zone* zone, XAssetInfom_name + m_writer->GetFileExtension(); } -void AssetDumperGfxImage::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* image = asset->Asset(); m_writer->DumpImage(stream, image->texture.texture); diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.h index 04fb383f..4e75db43 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperGfxImage.h @@ -1,19 +1,19 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" #include "Image/IImageWriter.h" namespace IW4 { - class AssetDumperGfxImage final : public AbstractAssetDumper + class AssetDumperGfxImage final : public AbstractFileDumper { IImageWriter* m_writer; protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; public: AssetDumperGfxImage(); diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.cpp index 3078158e..9a9b47b6 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.cpp @@ -14,7 +14,7 @@ std::string AssetDumperLoadedSound::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperLoadedSound::DumpWavPcm(Zone* zone, const LoadedSound* asset, std::ostream& stream) +void AssetDumperLoadedSound::DumpWavPcm(AssetDumpingContext& context, const LoadedSound* asset, std::ostream& stream) { const auto riffMasterChunkSize = sizeof(WAV_CHUNK_ID_RIFF) + sizeof(uint32_t) @@ -55,13 +55,13 @@ void AssetDumperLoadedSound::DumpWavPcm(Zone* zone, const LoadedSound* asset, st stream.write(asset->sound.data, asset->sound.info.data_len); } -void AssetDumperLoadedSound::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperLoadedSound::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* loadedSound = asset->Asset(); switch (static_cast(loadedSound->sound.info.format)) { case WavFormat::PCM: - DumpWavPcm(zone, loadedSound, stream); + DumpWavPcm(context, loadedSound, stream); break; default: diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.h index 2958d823..21e87abf 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLoadedSound.h @@ -1,16 +1,16 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" namespace IW4 { - class AssetDumperLoadedSound final : public AbstractAssetDumper + class AssetDumperLoadedSound final : public AbstractFileDumper { - static void DumpWavPcm(Zone* zone, const LoadedSound* asset, std::ostream& stream); + static void DumpWavPcm(AssetDumpingContext& context, const LoadedSound* asset, std::ostream& stream); protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.cpp index 5ac42440..f051d19b 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.cpp @@ -9,27 +9,27 @@ using namespace IW4; namespace fs = std::filesystem; -void AssetDumperLocalizeEntry::DumpPool(Zone* zone, AssetPool* pool, const std::string& basePath) +void AssetDumperLocalizeEntry::DumpPool(AssetDumpingContext& context, AssetPool* pool) { if (pool->m_asset_lookup.empty()) return; - const auto language = LocalizeCommon::GetNameOfLanguage(zone->m_language); - fs::path stringsPath(basePath); + const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone->m_language); + fs::path stringsPath(context.m_base_path); stringsPath.append(language); stringsPath.append("/localizedstrings"); create_directories(stringsPath); auto stringFilePath(stringsPath); - stringFilePath.append(zone->m_name); + stringFilePath.append(context.m_zone->m_name); stringFilePath.append(".str"); std::ofstream stringFile(stringFilePath, std::fstream::out | std::ofstream::binary); if (stringFile.is_open()) { - StringFileDumper stringFileDumper(zone, stringFile); + StringFileDumper stringFileDumper(context.m_zone, stringFile); stringFileDumper.SetLanguageName(language); @@ -49,6 +49,6 @@ void AssetDumperLocalizeEntry::DumpPool(Zone* zone, AssetPool* po } else { - printf("Could not create string file for dumping localized strings of zone '%s'\n", zone->m_name.c_str()); + printf("Could not create string file for dumping localized strings of zone '%s'\n", context.m_zone->m_name.c_str()); } } \ No newline at end of file diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.h index 53fd6bad..b5afe08d 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLocalizeEntry.h @@ -1,6 +1,6 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" namespace IW4 @@ -8,6 +8,6 @@ namespace IW4 class AssetDumperLocalizeEntry final : public IAssetDumper { public: - void DumpPool(Zone* zone, AssetPool* pool, const std::string& basePath) override; + void DumpPool(AssetDumpingContext& context, AssetPool* pool) override; }; } diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.cpp index 3d2262f4..d4914abf 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.cpp @@ -15,7 +15,7 @@ std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperRawFile::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperRawFile::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* rawFile = asset->Asset(); if (rawFile->compressedLen > 0) diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.h index fd5dc274..6f77db7e 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" namespace IW4 { - class AssetDumperRawFile final : public AbstractAssetDumper + class AssetDumperRawFile final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.cpp index a94f786f..d09fe316 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.cpp @@ -14,7 +14,7 @@ std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperStringTable::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperStringTable::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* stringTable = asset->Asset(); CsvWriter csv(stream); diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.h index 6dbb8ba3..96cdd4e2 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStringTable.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" namespace IW4 { - class AssetDumperStringTable final : public AbstractAssetDumper + class AssetDumperStringTable final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.cpp index 5d17d35c..0eafb8a6 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.cpp @@ -241,7 +241,7 @@ std::string AssetDumperVehicle::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperVehicle::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperVehicle::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { InfoStringFromVehicleConverter converter(asset->Asset(), vehicle_fields, std::extent::value, [asset](const scr_string_t scrStr) -> std::string { diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.h index 71c410fa..8f836935 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperVehicle.h @@ -1,11 +1,11 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" namespace IW4 { - class AssetDumperVehicle final : public AbstractAssetDumper + class AssetDumperVehicle final : public AbstractFileDumper { static cspField_t vehicle_fields[]; static cspField_t vehicle_fields2[]; @@ -13,6 +13,6 @@ namespace IW4 protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.cpp index 2bc196e3..992f29ef 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.cpp @@ -1172,7 +1172,7 @@ std::string AssetDumperWeapon::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperWeapon::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperWeapon::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { auto* fullDef = new WeaponFullDef; memset(fullDef, 0, sizeof(WeaponFullDef)); diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.h index d871236b..a890c66b 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.h +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperWeapon.h @@ -1,11 +1,11 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/IW4/IW4.h" namespace IW4 { - class AssetDumperWeapon final : public AbstractAssetDumper + class AssetDumperWeapon final : public AbstractFileDumper { static cspField_t weapon_fields[]; @@ -14,6 +14,6 @@ namespace IW4 protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp b/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp index f99bbac6..db9b1cb0 100644 --- a/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp @@ -14,21 +14,21 @@ using namespace IW4; -bool ZoneDumper::CanHandleZone(Zone* zone) const +bool ZoneDumper::CanHandleZone(AssetDumpingContext& context) const { - return zone->m_game == &g_GameIW4; + return context.m_zone->m_game == &g_GameIW4; } -bool ZoneDumper::DumpZone(Zone* zone, const std::string& basePath) const +bool ZoneDumper::DumpZone(AssetDumpingContext& context) const { #define DUMP_ASSET_POOL(dumperType, poolName) \ if(assetPools->poolName) \ { \ dumperType dumper; \ - dumper.DumpPool(zone, assetPools->poolName.get(), basePath); \ + dumper.DumpPool(context, assetPools->poolName.get()); \ } - const auto* assetPools = dynamic_cast(zone->m_pools.get()); + const auto* assetPools = dynamic_cast(context.m_zone->m_pools.get()); // DUMP_ASSET_POOL(AssetDumperPhysPreset, m_phys_preset) // DUMP_ASSET_POOL(AssetDumperPhysCollmap, m_phys_collmap) diff --git a/src/ObjWriting/Game/IW4/ZoneDumperIW4.h b/src/ObjWriting/Game/IW4/ZoneDumperIW4.h index 82865a13..c4660178 100644 --- a/src/ObjWriting/Game/IW4/ZoneDumperIW4.h +++ b/src/ObjWriting/Game/IW4/ZoneDumperIW4.h @@ -6,7 +6,7 @@ namespace IW4 class ZoneDumper final : public IZoneDumper { public: - bool CanHandleZone(Zone* zone) const override; - bool DumpZone(Zone* zone, const std::string& basePath) const override; + bool CanHandleZone(AssetDumpingContext& context) const override; + bool DumpZone(AssetDumpingContext& context) const override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.cpp index 4f0c1b7e..e17fcba1 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.cpp @@ -265,7 +265,7 @@ std::string AssetDumperFontIcon::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperFontIcon::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperFontIcon::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { AssetDumperFontIconInternal dumper(stream); dumper.DumpFontIcon(asset->Asset()); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.h index 23d1d7e3..48c30922 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperFontIcon final : public AbstractAssetDumper + class AssetDumperFontIcon final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.cpp index 6af52202..0a74a3b2 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.cpp @@ -42,7 +42,7 @@ std::string AssetDumperGfxImage::GetFileNameForAsset(Zone* zone, XAssetInfom_name + m_writer->GetFileExtension(); } -void AssetDumperGfxImage::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* image = asset->Asset(); m_writer->DumpImage(stream, image->texture.texture); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.h index bd49cdf1..3256d4b6 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperGfxImage.h @@ -1,19 +1,19 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" #include "Image/IImageWriter.h" namespace T6 { - class AssetDumperGfxImage final : public AbstractAssetDumper + class AssetDumperGfxImage final : public AbstractFileDumper { IImageWriter* m_writer; protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; public: AssetDumperGfxImage(); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.cpp index d7fc8e12..7e04ff7b 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.cpp @@ -9,27 +9,27 @@ using namespace T6; namespace fs = std::filesystem; -void AssetDumperLocalizeEntry::DumpPool(Zone* zone, AssetPool* pool, const std::string& basePath) +void AssetDumperLocalizeEntry::DumpPool(AssetDumpingContext& context, AssetPool* pool) { if (pool->m_asset_lookup.empty()) return; - const auto language = LocalizeCommon::GetNameOfLanguage(zone->m_language); - fs::path stringsPath(basePath); + const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone->m_language); + fs::path stringsPath(context.m_base_path); stringsPath.append(language); stringsPath.append("/localizedstrings"); create_directories(stringsPath); auto stringFilePath(stringsPath); - stringFilePath.append(zone->m_name); + stringFilePath.append(context.m_zone->m_name); stringFilePath.append(".str"); std::ofstream stringFile(stringFilePath, std::fstream::out | std::ofstream::binary); if(stringFile.is_open()) { - StringFileDumper stringFileDumper(zone, stringFile); + StringFileDumper stringFileDumper(context.m_zone, stringFile); stringFileDumper.SetLanguageName(language); @@ -49,6 +49,6 @@ void AssetDumperLocalizeEntry::DumpPool(Zone* zone, AssetPool* po } else { - printf("Could not create string file for dumping localized strings of zone '%s'\n", zone->m_name.c_str()); + printf("Could not create string file for dumping localized strings of zone '%s'\n", context.m_zone->m_name.c_str()); } } \ No newline at end of file diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.h index cb96902f..f21b8a4e 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperLocalizeEntry.h @@ -1,6 +1,6 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 @@ -8,6 +8,6 @@ namespace T6 class AssetDumperLocalizeEntry final : public IAssetDumper { public: - void DumpPool(Zone* zone, AssetPool* pool, const std::string& basePath) override; + void DumpPool(AssetDumpingContext& context, AssetPool* pool) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.cpp index bc752313..15d97965 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.cpp @@ -139,7 +139,7 @@ std::string AssetDumperPhysConstraints::GetFileNameForAsset(Zone* zone, XAssetIn return "physconstraints/" + asset->m_name; } -void AssetDumperPhysConstraints::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperPhysConstraints::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { assert(asset->Asset()->count <= 4); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.h index 555b5537..605fd232 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysConstraints.h @@ -1,17 +1,17 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperPhysConstraints final : public AbstractAssetDumper + class AssetDumperPhysConstraints final : public AbstractFileDumper { static cspField_t phys_constraints_fields[]; protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.cpp index 029022cc..0a9dd8c7 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.cpp @@ -87,7 +87,7 @@ std::string AssetDumperPhysPreset::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperPhysPreset::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperPhysPreset::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { auto* physPresetInfo = new PhysPresetInfo; CopyToPhysPresetInfo(asset->Asset(), physPresetInfo); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.h index 3c62325b..af846de0 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperPhysPreset.h @@ -1,11 +1,11 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperPhysPreset final : public AbstractAssetDumper + class AssetDumperPhysPreset final : public AbstractFileDumper { static cspField_t physpreset_fields[]; @@ -14,6 +14,6 @@ namespace T6 protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.cpp index 4140f80a..649cee81 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.cpp @@ -12,7 +12,7 @@ std::string AssetDumperQdb::GetFileNameForAsset(Zone* zone, XAssetInfo* ass return asset->m_name; } -void AssetDumperQdb::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperQdb::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* qdb = asset->Asset(); stream.write(qdb->buffer, qdb->len); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.h index 42b0027a..92ed1219 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperQdb.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperQdb final : public AbstractAssetDumper + class AssetDumperQdb final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.cpp index 4c6f1e1b..1460d82a 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.cpp @@ -12,7 +12,7 @@ std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperRawFile::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperRawFile::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* rawFile = asset->Asset(); stream.write(rawFile->buffer, rawFile->len); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.h index 36bf8bb9..944c1610 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperRawFile.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperRawFile final : public AbstractAssetDumper + class AssetDumperRawFile final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.cpp index 5b212de6..ecd81d43 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.cpp @@ -12,7 +12,7 @@ std::string AssetDumperScriptParseTree::GetFileNameForAsset(Zone* zone, XAssetIn return asset->m_name; } -void AssetDumperScriptParseTree::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperScriptParseTree::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* scriptParseTree = asset->Asset(); stream.write(scriptParseTree->buffer, scriptParseTree->len); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.h index 0d6bb007..892760d0 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperScriptParseTree.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperScriptParseTree final : public AbstractAssetDumper + class AssetDumperScriptParseTree final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.cpp index ba8a1ef8..3a26cd0a 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.cpp @@ -12,7 +12,7 @@ std::string AssetDumperSlug::GetFileNameForAsset(Zone* zone, XAssetInfo* a return asset->m_name; } -void AssetDumperSlug::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperSlug::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* slug = asset->Asset(); stream.write(slug->buffer, slug->len); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.h index 77f32820..f07b8815 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperSlug.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperSlug final : public AbstractAssetDumper + class AssetDumperSlug final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.cpp index 305087e6..7fd0dac7 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.cpp @@ -14,7 +14,7 @@ std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperStringTable::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperStringTable::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { const auto* stringTable = asset->Asset(); CsvWriter csv(stream); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.h index 54f33393..91d561d4 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperStringTable.h @@ -1,15 +1,15 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperStringTable final : public AbstractAssetDumper + class AssetDumperStringTable final : public AbstractFileDumper { protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.cpp index 17d66e17..602a130d 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.cpp @@ -86,7 +86,7 @@ std::string AssetDumperTracer::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperTracer::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperTracer::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { InfoStringFromTracerConverter converter(asset->Asset(), tracer_fields, std::extent::value, [asset](const scr_string_t scrStr) -> std::string { diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.h index ce664756..72e15096 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperTracer.h @@ -1,17 +1,17 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperTracer final : public AbstractAssetDumper + class AssetDumperTracer final : public AbstractFileDumper { static cspField_t tracer_fields[]; protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.cpp index 0698a929..11318ada 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.cpp @@ -681,7 +681,7 @@ std::string AssetDumperVehicle::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperVehicle::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperVehicle::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { InfoStringFromVehicleConverter converter(asset->Asset(), vehicle_fields, std::extent::value, [asset](const scr_string_t scrStr) -> std::string { diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.h index d5b5d3f3..f27fd20b 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperVehicle.h @@ -1,17 +1,17 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperVehicle final : public AbstractAssetDumper + class AssetDumperVehicle final : public AbstractFileDumper { static cspField_t vehicle_fields[]; protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.cpp index e744da83..b6f05c05 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.cpp @@ -1633,7 +1633,7 @@ std::string AssetDumperWeapon::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperWeapon::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperWeapon::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { auto* fullDef = new WeaponFullDef; memset(fullDef, 0, sizeof(WeaponFullDef)); diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.h index ddb93ae5..64c6a9bb 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperWeapon.h @@ -1,11 +1,11 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperWeapon final : public AbstractAssetDumper + class AssetDumperWeapon final : public AbstractFileDumper { static cspField_t weapon_fields[]; @@ -14,6 +14,6 @@ namespace T6 protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.cpp index 7f8bea81..bad3866f 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.cpp +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.cpp @@ -184,7 +184,7 @@ std::string AssetDumperZBarrier::GetFileNameForAsset(Zone* zone, XAssetInfom_name; } -void AssetDumperZBarrier::DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) +void AssetDumperZBarrier::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) { InfoStringFromZBarrierConverter converter(asset->Asset(), zbarrier_fields, std::extent::value, [asset](const scr_string_t scrStr) -> std::string { diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.h index 8ea1f15c..81fb2aa2 100644 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.h +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperZBarrier.h @@ -1,17 +1,17 @@ #pragma once -#include "Dumping/AbstractAssetDumper.h" +#include "Dumping/AbstractFileDumper.h" #include "Game/T6/T6.h" namespace T6 { - class AssetDumperZBarrier final : public AbstractAssetDumper + class AssetDumperZBarrier final : public AbstractFileDumper { static cspField_t zbarrier_fields[]; protected: bool ShouldDump(XAssetInfo* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo* asset) override; - void DumpAsset(Zone* zone, XAssetInfo* asset, std::ostream& stream) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset, std::ostream& stream) override; }; } diff --git a/src/ObjWriting/Game/T6/ZoneDumperT6.cpp b/src/ObjWriting/Game/T6/ZoneDumperT6.cpp index d683014f..d89e8b78 100644 --- a/src/ObjWriting/Game/T6/ZoneDumperT6.cpp +++ b/src/ObjWriting/Game/T6/ZoneDumperT6.cpp @@ -20,21 +20,21 @@ using namespace T6; -bool ZoneDumper::CanHandleZone(Zone* zone) const +bool ZoneDumper::CanHandleZone(AssetDumpingContext& context) const { - return zone->m_game == &g_GameT6; + return context.m_zone->m_game == &g_GameT6; } -bool ZoneDumper::DumpZone(Zone* zone, const std::string& basePath) const +bool ZoneDumper::DumpZone(AssetDumpingContext& context) const { #define DUMP_ASSET_POOL(dumperType, poolName) \ if(assetPools->poolName) \ { \ dumperType dumper; \ - dumper.DumpPool(zone, assetPools->poolName, basePath); \ + dumper.DumpPool(context, assetPools->poolName); \ } - const auto* assetPools = dynamic_cast(zone->m_pools.get()); + const auto* assetPools = dynamic_cast(context.m_zone->m_pools.get()); DUMP_ASSET_POOL(AssetDumperPhysPreset, m_phys_preset); DUMP_ASSET_POOL(AssetDumperPhysConstraints, m_phys_constraints); diff --git a/src/ObjWriting/Game/T6/ZoneDumperT6.h b/src/ObjWriting/Game/T6/ZoneDumperT6.h index 7625646d..7c0ed40d 100644 --- a/src/ObjWriting/Game/T6/ZoneDumperT6.h +++ b/src/ObjWriting/Game/T6/ZoneDumperT6.h @@ -6,7 +6,7 @@ namespace T6 class ZoneDumper final : public IZoneDumper { public: - bool CanHandleZone(Zone* zone) const override; - bool DumpZone(Zone* zone, const std::string& basePath) const override; + bool CanHandleZone(AssetDumpingContext& context) const override; + bool DumpZone(AssetDumpingContext& context) const override; }; } diff --git a/src/ObjWriting/ObjWriting.cpp b/src/ObjWriting/ObjWriting.cpp index 7833e59b..500fa858 100644 --- a/src/ObjWriting/ObjWriting.cpp +++ b/src/ObjWriting/ObjWriting.cpp @@ -11,18 +11,18 @@ const IZoneDumper* const ZONE_DUMPER[] new T6::ZoneDumper() }; -bool ObjWriting::DumpZone(Zone* zone, const std::string& basePath) +bool ObjWriting::DumpZone(AssetDumpingContext& context) { - for (auto dumper : ZONE_DUMPER) + for (const auto* dumper : ZONE_DUMPER) { - if (dumper->CanHandleZone(zone)) + if (dumper->CanHandleZone(context)) { - if (dumper->DumpZone(zone, basePath)) + if (dumper->DumpZone(context)) { return true; } - printf("Dumper for zone '%s' failed!\n", zone->m_name.c_str()); + printf("Dumper for zone '%s' failed!\n", context.m_zone->m_name.c_str()); return false; } } diff --git a/src/ObjWriting/ObjWriting.h b/src/ObjWriting/ObjWriting.h index e041d221..fb8937ec 100644 --- a/src/ObjWriting/ObjWriting.h +++ b/src/ObjWriting/ObjWriting.h @@ -1,7 +1,6 @@ #pragma once -#include "Zone/Zone.h" -#include +#include "Dumping/AssetDumpingContext.h" class ObjWriting { @@ -20,5 +19,5 @@ public: } Configuration; - static bool DumpZone(Zone* zone, const std::string& basePath); + static bool DumpZone(AssetDumpingContext& context); }; diff --git a/src/Unlinker/Unlinker.cpp b/src/Unlinker/Unlinker.cpp index 01fd082e..42d747e7 100644 --- a/src/Unlinker/Unlinker.cpp +++ b/src/Unlinker/Unlinker.cpp @@ -150,6 +150,39 @@ class Unlinker::Impl return true; } + static bool WriteZoneDefinitionFile(Zone* zone, const fs::path& zoneDefinitionFileFolder) + { + auto zoneDefinitionFilePath(zoneDefinitionFileFolder); + zoneDefinitionFilePath.append(zone->m_name); + zoneDefinitionFilePath.replace_extension(".zone"); + + std::ofstream zoneDefinitionFile(zoneDefinitionFilePath, std::fstream::out | std::fstream::binary); + if (!zoneDefinitionFile.is_open()) + { + printf("Failed to open file for zone definition file of zone \"%s\".\n", zone->m_name.c_str()); + return false; + } + + auto result = false; + for (const auto* zoneDefWriter : ZONE_DEF_WRITERS) + { + if (zoneDefWriter->CanHandleZone(zone)) + { + zoneDefWriter->WriteZoneDef(zone, zoneDefinitionFile); + result = true; + break; + } + } + + if(!result) + { + printf("Failed to find writer for zone definition file of zone \"%s\".\n", zone->m_name.c_str()); + } + + zoneDefinitionFile.close(); + return result; + } + /** * \brief Performs the tasks specified by the command line arguments on the specified zone. * \param zone The zone to handle. @@ -171,31 +204,12 @@ class Unlinker::Impl zoneDefinitionFileFolder.append("zone_source"); fs::create_directories(zoneDefinitionFileFolder); - auto zoneDefinitionFilePath(zoneDefinitionFileFolder); - zoneDefinitionFilePath.append(zone->m_name); - zoneDefinitionFilePath.replace_extension(".zone"); + WriteZoneDefinitionFile(zone, zoneDefinitionFileFolder); - std::ofstream zoneDefinitionFile(zoneDefinitionFilePath, std::fstream::out | std::fstream::binary); - - if (zoneDefinitionFile.is_open()) - { - for (const auto* zoneDefWriter : ZONE_DEF_WRITERS) - { - if (zoneDefWriter->CanHandleZone(zone)) - { - zoneDefWriter->WriteZoneDef(zone, zoneDefinitionFile); - break; - } - } - ObjWriting::DumpZone(zone, outputFolderPath); - } - else - { - printf("Failed to open file for zone definition file of zone \"%s\".\n", zone->m_name.c_str()); - return false; - } - - zoneDefinitionFile.close(); + AssetDumpingContext context; + context.m_zone = zone; + context.m_base_path = outputFolderPath; + ObjWriting::DumpZone(context); } return true;