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

@ -15,7 +15,7 @@ std::string AssetDumperAddonMapEnts::GetFileNameForAsset(Zone* zone, XAssetInfo<
return asset->m_name;
}
void AssetDumperAddonMapEnts::DumpAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset, std::ostream& stream)
void AssetDumperAddonMapEnts::DumpAsset(AssetDumpingContext& context, XAssetInfo<AddonMapEnts>* asset, std::ostream& stream)
{
const auto* addonMapEnts = asset->Asset();
stream.write(addonMapEnts->entityString, std::max(addonMapEnts->numEntityChars - 1, 0));

View File

@ -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<AddonMapEnts>
class AssetDumperAddonMapEnts final : public AbstractFileDumper<AddonMapEnts>
{
protected:
bool ShouldDump(XAssetInfo<AddonMapEnts>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<AddonMapEnts>* 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/IW4/IW4.h"
#include "Image/IImageWriter.h"
namespace IW4
{
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

@ -14,7 +14,7 @@ std::string AssetDumperLoadedSound::GetFileNameForAsset(Zone* zone, XAssetInfo<L
return "sound/" + asset->m_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<LoadedSound>* asset, std::ostream& stream)
void AssetDumperLoadedSound::DumpAsset(AssetDumpingContext& context, XAssetInfo<LoadedSound>* asset, std::ostream& stream)
{
const auto* loadedSound = asset->Asset();
switch (static_cast<WavFormat>(loadedSound->sound.info.format))
{
case WavFormat::PCM:
DumpWavPcm(zone, loadedSound, stream);
DumpWavPcm(context, loadedSound, stream);
break;
default:

View File

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

View File

@ -9,27 +9,27 @@
using namespace IW4;
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/IW4/IW4.h"
namespace IW4
@ -8,6 +8,6 @@ namespace IW4
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

@ -15,7 +15,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();
if (rawFile->compressedLen > 0)

View File

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

@ -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/IW4/IW4.h"
namespace IW4
{
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

@ -241,7 +241,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,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<VehicleDef>
class AssetDumperVehicle final : public AbstractFileDumper<VehicleDef>
{
static cspField_t vehicle_fields[];
static cspField_t vehicle_fields2[];
@ -13,6 +13,6 @@ namespace IW4
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

@ -1172,7 +1172,7 @@ std::string AssetDumperWeapon::GetFileNameForAsset(Zone* zone, XAssetInfo<Weapon
return "weapons/" + asset->m_name;
}
void AssetDumperWeapon::DumpAsset(Zone* zone, XAssetInfo<WeaponCompleteDef>* asset, std::ostream& stream)
void AssetDumperWeapon::DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponCompleteDef>* 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/IW4/IW4.h"
namespace IW4
{
class AssetDumperWeapon final : public AbstractAssetDumper<WeaponCompleteDef>
class AssetDumperWeapon final : public AbstractFileDumper<WeaponCompleteDef>
{
static cspField_t weapon_fields[];
@ -14,6 +14,6 @@ namespace IW4
protected:
bool ShouldDump(XAssetInfo<WeaponCompleteDef>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<WeaponCompleteDef>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<WeaponCompleteDef>* asset, std::ostream& stream) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponCompleteDef>* asset, std::ostream& stream) override;
};
}

View File

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

View File

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