Add AssetDumperContext to bundle context fields for dumping

(cherry picked from commit ed8331280392ef3a2b4657c5dbd0880463d85f2c)
This commit is contained in:
Jan
2021-03-05 18:11:56 +01:00
parent 88c48e8107
commit abb268a819
56 changed files with 191 additions and 156 deletions

View File

@ -265,7 +265,7 @@ std::string AssetDumperFontIcon::GetFileNameForAsset(Zone* zone, XAssetInfo<Font
return asset->m_name;
}
void AssetDumperFontIcon::DumpAsset(Zone* zone, XAssetInfo<FontIcon>* asset, std::ostream& stream)
void AssetDumperFontIcon::DumpAsset(AssetDumpingContext& context, XAssetInfo<FontIcon>* asset, std::ostream& stream)
{
AssetDumperFontIconInternal dumper(stream);
dumper.DumpFontIcon(asset->Asset());

View File

@ -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<FontIcon>
class AssetDumperFontIcon final : public AbstractFileDumper<FontIcon>
{
protected:
bool ShouldDump(XAssetInfo<FontIcon>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<FontIcon>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<FontIcon>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<FontIcon>* asset, std::ostream& stream) override;
};
}

View File

@ -42,7 +42,7 @@ std::string AssetDumperGfxImage::GetFileNameForAsset(Zone* zone, XAssetInfo<GfxI
return "images/" + asset->m_name + m_writer->GetFileExtension();
}
void AssetDumperGfxImage::DumpAsset(Zone* zone, XAssetInfo<GfxImage>* asset, std::ostream& stream)
void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo<GfxImage>* asset, std::ostream& stream)
{
const auto* image = asset->Asset();
m_writer->DumpImage(stream, image->texture.texture);

View File

@ -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<GfxImage>
class AssetDumperGfxImage final : public AbstractFileDumper<GfxImage>
{
IImageWriter* m_writer;
protected:
bool ShouldDump(XAssetInfo<GfxImage>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<GfxImage>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<GfxImage>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<GfxImage>* asset, std::ostream& stream) override;
public:
AssetDumperGfxImage();

View File

@ -9,27 +9,27 @@
using namespace T6;
namespace fs = std::filesystem;
void AssetDumperLocalizeEntry::DumpPool(Zone* zone, AssetPool<LocalizeEntry>* pool, const std::string& basePath)
void AssetDumperLocalizeEntry::DumpPool(AssetDumpingContext& context, AssetPool<LocalizeEntry>* 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<LocalizeEntry>* 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());
}
}

View File

@ -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<LocalizeEntry>
{
public:
void DumpPool(Zone* zone, AssetPool<LocalizeEntry>* pool, const std::string& basePath) override;
void DumpPool(AssetDumpingContext& context, AssetPool<LocalizeEntry>* pool) override;
};
}

View File

@ -139,7 +139,7 @@ std::string AssetDumperPhysConstraints::GetFileNameForAsset(Zone* zone, XAssetIn
return "physconstraints/" + asset->m_name;
}
void AssetDumperPhysConstraints::DumpAsset(Zone* zone, XAssetInfo<PhysConstraints>* asset, std::ostream& stream)
void AssetDumperPhysConstraints::DumpAsset(AssetDumpingContext& context, XAssetInfo<PhysConstraints>* asset, std::ostream& stream)
{
assert(asset->Asset()->count <= 4);

View File

@ -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<PhysConstraints>
class AssetDumperPhysConstraints final : public AbstractFileDumper<PhysConstraints>
{
static cspField_t phys_constraints_fields[];
protected:
bool ShouldDump(XAssetInfo<PhysConstraints>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<PhysConstraints>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<PhysConstraints>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<PhysConstraints>* asset, std::ostream& stream) override;
};
}

View File

@ -87,7 +87,7 @@ std::string AssetDumperPhysPreset::GetFileNameForAsset(Zone* zone, XAssetInfo<Ph
return "physic/" + asset->m_name;
}
void AssetDumperPhysPreset::DumpAsset(Zone* zone, XAssetInfo<PhysPreset>* asset, std::ostream& stream)
void AssetDumperPhysPreset::DumpAsset(AssetDumpingContext& context, XAssetInfo<PhysPreset>* asset, std::ostream& stream)
{
auto* physPresetInfo = new PhysPresetInfo;
CopyToPhysPresetInfo(asset->Asset(), physPresetInfo);

View File

@ -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<PhysPreset>
class AssetDumperPhysPreset final : public AbstractFileDumper<PhysPreset>
{
static cspField_t physpreset_fields[];
@ -14,6 +14,6 @@ namespace T6
protected:
bool ShouldDump(XAssetInfo<PhysPreset>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<PhysPreset>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<PhysPreset>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<PhysPreset>* asset, std::ostream& stream) override;
};
}

View File

@ -12,7 +12,7 @@ std::string AssetDumperQdb::GetFileNameForAsset(Zone* zone, XAssetInfo<Qdb>* ass
return asset->m_name;
}
void AssetDumperQdb::DumpAsset(Zone* zone, XAssetInfo<Qdb>* asset, std::ostream& stream)
void AssetDumperQdb::DumpAsset(AssetDumpingContext& context, XAssetInfo<Qdb>* asset, std::ostream& stream)
{
const auto* qdb = asset->Asset();
stream.write(qdb->buffer, qdb->len);

View File

@ -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<Qdb>
class AssetDumperQdb final : public AbstractFileDumper<Qdb>
{
protected:
bool ShouldDump(XAssetInfo<Qdb>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<Qdb>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<Qdb>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<Qdb>* asset, std::ostream& stream) override;
};
}

View File

@ -12,7 +12,7 @@ std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, XAssetInfo<RawFi
return asset->m_name;
}
void AssetDumperRawFile::DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, std::ostream& stream)
void AssetDumperRawFile::DumpAsset(AssetDumpingContext& context, XAssetInfo<RawFile>* asset, std::ostream& stream)
{
const auto* rawFile = asset->Asset();
stream.write(rawFile->buffer, rawFile->len);

View File

@ -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<RawFile>
class AssetDumperRawFile final : public AbstractFileDumper<RawFile>
{
protected:
bool ShouldDump(XAssetInfo<RawFile>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<RawFile>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<RawFile>* asset, std::ostream& stream) override;
};
}

View File

@ -12,7 +12,7 @@ std::string AssetDumperScriptParseTree::GetFileNameForAsset(Zone* zone, XAssetIn
return asset->m_name;
}
void AssetDumperScriptParseTree::DumpAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset, std::ostream& stream)
void AssetDumperScriptParseTree::DumpAsset(AssetDumpingContext& context, XAssetInfo<ScriptParseTree>* asset, std::ostream& stream)
{
const auto* scriptParseTree = asset->Asset();
stream.write(scriptParseTree->buffer, scriptParseTree->len);

View File

@ -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<ScriptParseTree>
class AssetDumperScriptParseTree final : public AbstractFileDumper<ScriptParseTree>
{
protected:
bool ShouldDump(XAssetInfo<ScriptParseTree>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<ScriptParseTree>* asset, std::ostream& stream) override;
};
}

View File

@ -12,7 +12,7 @@ std::string AssetDumperSlug::GetFileNameForAsset(Zone* zone, XAssetInfo<Slug>* a
return asset->m_name;
}
void AssetDumperSlug::DumpAsset(Zone* zone, XAssetInfo<Slug>* asset, std::ostream& stream)
void AssetDumperSlug::DumpAsset(AssetDumpingContext& context, XAssetInfo<Slug>* asset, std::ostream& stream)
{
const auto* slug = asset->Asset();
stream.write(slug->buffer, slug->len);

View File

@ -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<Slug>
class AssetDumperSlug final : public AbstractFileDumper<Slug>
{
protected:
bool ShouldDump(XAssetInfo<Slug>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<Slug>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<Slug>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<Slug>* asset, std::ostream& stream) override;
};
}

View File

@ -14,7 +14,7 @@ std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, XAssetInfo<S
return asset->m_name;
}
void AssetDumperStringTable::DumpAsset(Zone* zone, XAssetInfo<StringTable>* asset, std::ostream& stream)
void AssetDumperStringTable::DumpAsset(AssetDumpingContext& context, XAssetInfo<StringTable>* asset, std::ostream& stream)
{
const auto* stringTable = asset->Asset();
CsvWriter csv(stream);

View File

@ -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<StringTable>
class AssetDumperStringTable final : public AbstractFileDumper<StringTable>
{
protected:
bool ShouldDump(XAssetInfo<StringTable>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<StringTable>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<StringTable>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<StringTable>* asset, std::ostream& stream) override;
};
}

View File

@ -86,7 +86,7 @@ std::string AssetDumperTracer::GetFileNameForAsset(Zone* zone, XAssetInfo<Tracer
return "tracer/" + asset->m_name;
}
void AssetDumperTracer::DumpAsset(Zone* zone, XAssetInfo<TracerDef>* asset, std::ostream& stream)
void AssetDumperTracer::DumpAsset(AssetDumpingContext& context, XAssetInfo<TracerDef>* asset, std::ostream& stream)
{
InfoStringFromTracerConverter converter(asset->Asset(), tracer_fields, std::extent<decltype(tracer_fields)>::value, [asset](const scr_string_t scrStr) -> std::string
{

View File

@ -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<TracerDef>
class AssetDumperTracer final : public AbstractFileDumper<TracerDef>
{
static cspField_t tracer_fields[];
protected:
bool ShouldDump(XAssetInfo<TracerDef>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<TracerDef>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<TracerDef>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<TracerDef>* asset, std::ostream& stream) override;
};
}

View File

@ -681,7 +681,7 @@ std::string AssetDumperVehicle::GetFileNameForAsset(Zone* zone, XAssetInfo<Vehic
return "vehicles/" + asset->m_name;
}
void AssetDumperVehicle::DumpAsset(Zone* zone, XAssetInfo<VehicleDef>* asset, std::ostream& stream)
void AssetDumperVehicle::DumpAsset(AssetDumpingContext& context, XAssetInfo<VehicleDef>* asset, std::ostream& stream)
{
InfoStringFromVehicleConverter converter(asset->Asset(), vehicle_fields, std::extent<decltype(vehicle_fields)>::value, [asset](const scr_string_t scrStr) -> std::string
{

View File

@ -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<VehicleDef>
class AssetDumperVehicle final : public AbstractFileDumper<VehicleDef>
{
static cspField_t vehicle_fields[];
protected:
bool ShouldDump(XAssetInfo<VehicleDef>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<VehicleDef>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<VehicleDef>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<VehicleDef>* asset, std::ostream& stream) override;
};
}

View File

@ -1633,7 +1633,7 @@ std::string AssetDumperWeapon::GetFileNameForAsset(Zone* zone, XAssetInfo<Weapon
return "weapons/" + asset->m_name;
}
void AssetDumperWeapon::DumpAsset(Zone* zone, XAssetInfo<WeaponVariantDef>* asset, std::ostream& stream)
void AssetDumperWeapon::DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponVariantDef>* asset, std::ostream& stream)
{
auto* fullDef = new WeaponFullDef;
memset(fullDef, 0, sizeof(WeaponFullDef));

View File

@ -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<WeaponVariantDef>
class AssetDumperWeapon final : public AbstractFileDumper<WeaponVariantDef>
{
static cspField_t weapon_fields[];
@ -14,6 +14,6 @@ namespace T6
protected:
bool ShouldDump(XAssetInfo<WeaponVariantDef>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<WeaponVariantDef>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<WeaponVariantDef>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponVariantDef>* asset, std::ostream& stream) override;
};
}

View File

@ -184,7 +184,7 @@ std::string AssetDumperZBarrier::GetFileNameForAsset(Zone* zone, XAssetInfo<ZBar
return "zbarrier/" + asset->m_name;
}
void AssetDumperZBarrier::DumpAsset(Zone* zone, XAssetInfo<ZBarrierDef>* asset, std::ostream& stream)
void AssetDumperZBarrier::DumpAsset(AssetDumpingContext& context, XAssetInfo<ZBarrierDef>* asset, std::ostream& stream)
{
InfoStringFromZBarrierConverter converter(asset->Asset(), zbarrier_fields, std::extent<decltype(zbarrier_fields)>::value, [asset](const scr_string_t scrStr) -> std::string
{

View File

@ -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<ZBarrierDef>
class AssetDumperZBarrier final : public AbstractFileDumper<ZBarrierDef>
{
static cspField_t zbarrier_fields[];
protected:
bool ShouldDump(XAssetInfo<ZBarrierDef>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<ZBarrierDef>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<ZBarrierDef>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<ZBarrierDef>* asset, std::ostream& stream) override;
};
}

View File

@ -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<GameAssetPoolT6*>(zone->m_pools.get());
const auto* assetPools = dynamic_cast<GameAssetPoolT6*>(context.m_zone->m_pools.get());
DUMP_ASSET_POOL(AssetDumperPhysPreset, m_phys_preset);
DUMP_ASSET_POOL(AssetDumperPhysConstraints, m_phys_constraints);

View File

@ -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;
};
}