2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-03-05 12:33:02 +00:00

refactor: introduce subasset loading

This commit is contained in:
Jan Laupetin
2026-02-05 16:25:00 +00:00
parent 1be411b371
commit aa47ffa629
255 changed files with 1668 additions and 3132 deletions

View File

@@ -4,23 +4,26 @@
#include "IAssetDumper.h"
#include "Pool/AssetPool.h"
template<class AssetType> class AbstractAssetDumper : public IAssetDumper
template<AssetDefinition Asset_t> class AbstractAssetDumper : public IAssetDumper
{
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
public:
using AssetType_t = AssetType;
using AssetType_t = Asset_t;
[[nodiscard]] size_t GetProgressTotalCount() const override
[[nodiscard]] std::optional<asset_type_t> GetHandlingAssetType() const override
{
return m_pool.m_asset_lookup.size();
return Asset_t::EnumEntry;
}
[[nodiscard]] size_t GetProgressTotalCount(AssetDumpingContext& context) const override
{
return context.m_zone.m_pools.PoolAssets<Asset_t>().size();
}
void Dump(AssetDumpingContext& context) override
{
for (const auto* assetInfo : m_pool)
for (const auto* assetInfo : context.m_zone.m_pools.PoolAssets<Asset_t>())
{
if (assetInfo->m_name[0] == ',' || !ShouldDump(*assetInfo))
if (assetInfo->IsReference() || !ShouldDump(*assetInfo))
{
context.IncrementProgress();
continue;
@@ -32,38 +35,26 @@ public:
}
protected:
explicit AbstractAssetDumper(const AssetPool<typename AssetType::Type>& pool)
: m_pool(pool)
{
}
virtual bool ShouldDump(const XAssetInfo<typename AssetType::Type>& asset)
virtual bool ShouldDump(const XAssetInfo<typename Asset_t::Type>& asset)
{
return true;
}
virtual void DumpAsset(AssetDumpingContext& context, const XAssetInfo<typename AssetType::Type>& asset) = 0;
const AssetPool<typename AssetType::Type>& m_pool;
virtual void DumpAsset(AssetDumpingContext& context, const XAssetInfo<typename Asset_t::Type>& asset) = 0;
};
template<class AssetType> class AbstractSingleProgressAssetDumper : public IAssetDumper
template<AssetDefinition Asset_t> class AbstractSingleProgressAssetDumper : public IAssetDumper
{
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
public:
using AssetType_t = AssetType;
using AssetType_t = Asset_t;
[[nodiscard]] size_t GetProgressTotalCount() const override
[[nodiscard]] std::optional<asset_type_t> GetHandlingAssetType() const override
{
return m_pool.m_asset_lookup.empty() ? 0uz : 1uz;
return Asset_t::EnumEntry;
}
protected:
explicit AbstractSingleProgressAssetDumper(const AssetPool<typename AssetType::Type>& pool)
: m_pool(pool)
[[nodiscard]] size_t GetProgressTotalCount(AssetDumpingContext& context) const override
{
return context.m_zone.m_pools.PoolAssets<Asset_t>().empty() ? 0uz : 1uz;
}
const AssetPool<typename AssetType::Type>& m_pool;
};

View File

@@ -1,6 +1,9 @@
#pragma once
#include "AssetDumpingContext.h"
#include "Zone/ZoneTypes.h"
#include <optional>
class IAssetDumper
{
@@ -12,6 +15,11 @@ public:
IAssetDumper& operator=(const IAssetDumper& other) = default;
IAssetDumper& operator=(IAssetDumper&& other) noexcept = default;
[[nodiscard]] virtual size_t GetProgressTotalCount() const = 0;
[[nodiscard]] virtual std::optional<asset_type_t> GetHandlingAssetType() const
{
return std::nullopt;
}
[[nodiscard]] virtual size_t GetProgressTotalCount(AssetDumpingContext& context) const = 0;
virtual void Dump(AssetDumpingContext& context) = 0;
};

View File

@@ -64,8 +64,8 @@ namespace
namespace image
{
DumperIW3::DumperIW3(const AssetPool<AssetImage::Type>& pool)
: AbstractAssetDumper(pool)
DumperIW3::DumperIW3()
: AbstractAssetDumper()
{
switch (ObjWriting::Configuration.ImageOutputFormat)
{

View File

@@ -11,7 +11,7 @@ namespace image
class DumperIW3 final : public AbstractAssetDumper<IW3::AssetImage>
{
public:
explicit DumperIW3(const AssetPool<IW3::AssetImage::Type>& pool);
DumperIW3();
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW3::AssetImage::Type>& asset) override;

View File

@@ -5,25 +5,15 @@
#include "Utils/Logging/Log.h"
#include <format>
#include <iostream>
using namespace IW3;
namespace localize
{
DumperIW3::DumperIW3(const AssetPool<IW3::AssetLocalize::Type>& pool)
: AbstractSingleProgressAssetDumper(pool)
{
}
size_t DumperIW3::GetProgressTotalCount() const
{
return m_pool.m_asset_lookup.empty() ? 0uz : 1uz;
}
void DumperIW3::Dump(AssetDumpingContext& context)
{
if (m_pool.m_asset_lookup.empty())
auto localizeAssets = context.m_zone.m_pools.PoolAssets<AssetLocalize>();
if (localizeAssets.empty())
return;
const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language);
@@ -40,7 +30,7 @@ namespace localize
stringFileDumper.SetNotes("");
for (const auto* localizeEntry : m_pool)
for (const auto* localizeEntry : localizeAssets)
{
stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value);
}

View File

@@ -2,16 +2,12 @@
#include "Dumping/AbstractAssetDumper.h"
#include "Game/IW3/IW3.h"
#include "Pool/AssetPool.h"
namespace localize
{
class DumperIW3 final : public AbstractSingleProgressAssetDumper<IW3::AssetLocalize>
{
public:
explicit DumperIW3(const AssetPool<IW3::AssetLocalize::Type>& pool);
[[nodiscard]] size_t GetProgressTotalCount() const override;
void Dump(AssetDumpingContext& context) override;
};
} // namespace localize

View File

@@ -4,11 +4,6 @@ using namespace IW3;
namespace map_ents
{
DumperIW3::DumperIW3(const AssetPool<IW3::AssetMapEnts::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo<MapEnts>& asset)
{
const auto* mapEnts = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace map_ents
{
class DumperIW3 final : public AbstractAssetDumper<IW3::AssetMapEnts>
{
public:
explicit DumperIW3(const AssetPool<IW3::AssetMapEnts::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW3::MapEnts>& asset) override;
};

View File

@@ -1,7 +1,6 @@
#include "MaterialConstantZoneStateIW3.h"
#include "Game/IW3/CommonIW3.h"
#include "Game/IW3/GameAssetPoolIW3.h"
#include "Game/IW3/GameIW3.h"
#include "ObjWriting.h"
#include "Zone/ZoneRegistry.h"
@@ -205,11 +204,7 @@ namespace IW3
{
for (const auto* zone : ZoneRegistry::GetRegistryForGame(GameId::IW3)->Zones())
{
const auto* assetPools = dynamic_cast<const GameAssetPoolIW3*>(zone->m_pools.get());
if (!assetPools)
return;
for (const auto* techniqueSetInfo : *assetPools->m_technique_set)
for (const auto* techniqueSetInfo : zone->m_pools.PoolAssets<AssetTechniqueSet>())
{
const auto* techniqueSet = techniqueSetInfo->Asset();

View File

@@ -1,69 +1,42 @@
#include "ObjWriterIW3.h"
#include "Game/IW3/GameAssetPoolIW3.h"
#include "Game/IW3/Material/MaterialJsonDumperIW3.h"
#include "Game/IW3/XModel/XModelDumperIW3.h"
#include "Image/ImageDumperIW3.h"
#include "Localize/LocalizeDumperIW3.h"
#include "Maps/MapEntsDumperIW3.h"
#include "ObjWriting.h"
#include "RawFile/RawFileDumperIW3.h"
#include "Sound/LoadedSoundDumperIW3.h"
#include "StringTable/StringTableDumperIW3.h"
using namespace IW3;
bool ObjWriter::DumpZone(AssetDumpingContext& context) const
void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context)
{
#define REGISTER_DUMPER(dumperType, poolName) \
if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \
{ \
dumpers.emplace_back(std::make_unique<dumperType>(*assetPools->poolName)); \
}
const auto* assetPools = dynamic_cast<GameAssetPoolIW3*>(context.m_zone.m_pools.get());
std::vector<std::unique_ptr<IAssetDumper>> dumpers;
// 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)
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 REGISTER_DUMPER
// REGISTER_DUMPER(AssetDumperPhysPreset)
// REGISTER_DUMPER(AssetDumperXAnimParts)
RegisterAssetDumper(std::make_unique<xmodel::DumperIW3>());
RegisterAssetDumper(std::make_unique<material::JsonDumperIW3>());
// REGISTER_DUMPER(AssetDumperMaterialTechniqueSet)
RegisterAssetDumper(std::make_unique<image::DumperIW3>());
// REGISTER_DUMPER(AssetDumpersnd_alias_list_t)
// REGISTER_DUMPER(AssetDumperSndCurve)
RegisterAssetDumper(std::make_unique<sound::LoadedSoundDumperIW3>());
// REGISTER_DUMPER(AssetDumperClipMap)
// REGISTER_DUMPER(AssetDumperComWorld)
// REGISTER_DUMPER(AssetDumperGameWorldSp)
// REGISTER_DUMPER(AssetDumperGameWorldMp)
RegisterAssetDumper(std::make_unique<map_ents::DumperIW3>());
// REGISTER_DUMPER(AssetDumperGfxWorld)
// REGISTER_DUMPER(AssetDumperGfxLightDef)
// REGISTER_DUMPER(AssetDumperFont_s)
// REGISTER_DUMPER(AssetDumperMenuList)
// REGISTER_DUMPER(AssetDumpermenuDef_t)
RegisterAssetDumper(std::make_unique<localize::DumperIW3>());
// REGISTER_DUMPER(AssetDumperWeapon)
// REGISTER_DUMPER(AssetDumperSndDriverGlobals)
// REGISTER_DUMPER(AssetDumperFxEffectDef)
// REGISTER_DUMPER(AssetDumperFxImpactTable)
RegisterAssetDumper(std::make_unique<raw_file::DumperIW3>());
RegisterAssetDumper(std::make_unique<string_table::DumperIW3>());
}

View File

@@ -1,12 +1,12 @@
#pragma once
#include "IObjWriter.h"
#include "ObjWriter.h"
namespace IW3
{
class ObjWriter final : public IObjWriter
{
public:
bool DumpZone(AssetDumpingContext& context) const override;
protected:
void RegisterAssetDumpers(AssetDumpingContext& context) override;
};
} // namespace IW3

View File

@@ -4,11 +4,6 @@ using namespace IW3;
namespace raw_file
{
DumperIW3::DumperIW3(const AssetPool<AssetRawFile::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo<RawFile>& asset)
{
const auto* rawFile = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace raw_file
{
class DumperIW3 final : public AbstractAssetDumper<IW3::AssetRawFile>
{
public:
explicit DumperIW3(const AssetPool<IW3::AssetRawFile::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW3::RawFile>& asset) override;
};

View File

@@ -25,11 +25,6 @@ namespace
namespace sound
{
LoadedSoundDumperIW3::LoadedSoundDumperIW3(const AssetPool<AssetLoadedSound::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void LoadedSoundDumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo<LoadedSound>& asset)
{
const auto* loadedSound = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace sound
{
class LoadedSoundDumperIW3 final : public AbstractAssetDumper<IW3::AssetLoadedSound>
{
public:
explicit LoadedSoundDumperIW3(const AssetPool<IW3::AssetLoadedSound::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW3::AssetLoadedSound::Type>& asset) override;
};

View File

@@ -6,11 +6,6 @@ using namespace IW3;
namespace string_table
{
DumperIW3::DumperIW3(const AssetPool<AssetStringTable::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo<StringTable>& asset)
{
const auto* stringTable = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace string_table
{
class DumperIW3 final : public AbstractAssetDumper<IW3::AssetStringTable>
{
public:
explicit DumperIW3(const AssetPool<IW3::AssetStringTable::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW3::StringTable>& asset) override;
};

View File

@@ -61,8 +61,7 @@ namespace
namespace image
{
DumperIW4::DumperIW4(const AssetPool<AssetImage::Type>& pool)
: AbstractAssetDumper(pool)
DumperIW4::DumperIW4()
{
switch (ObjWriting::Configuration.ImageOutputFormat)
{

View File

@@ -11,7 +11,7 @@ namespace image
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetImage>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetImage::Type>& pool);
DumperIW4();
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetImage::Type>& asset) override;

View File

@@ -77,11 +77,6 @@ namespace
namespace leaderboard
{
JsonDumperIW4::JsonDumperIW4(const AssetPool<AssetLeaderboard::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void JsonDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetLeaderboard::Type>& asset)
{
const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAsset(asset.m_name));

View File

@@ -7,9 +7,6 @@ namespace leaderboard
{
class JsonDumperIW4 final : public AbstractAssetDumper<IW4::AssetLeaderboard>
{
public:
explicit JsonDumperIW4(const AssetPool<IW4::AssetLeaderboard::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetLeaderboard::Type>& asset) override;
};

View File

@@ -6,11 +6,6 @@ using namespace IW4;
namespace light_def
{
DumperIW4::DumperIW4(const AssetPool<AssetLightDef::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetLightDef::Type>& asset)
{
const auto* lightDef = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace light_def
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetLightDef>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetLightDef::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetLightDef::Type>& asset) override;
};

View File

@@ -10,14 +10,10 @@ using namespace IW4;
namespace localize
{
DumperIW4::DumperIW4(const AssetPool<AssetLocalize::Type>& pool)
: AbstractSingleProgressAssetDumper(pool)
{
}
void DumperIW4::Dump(AssetDumpingContext& context)
{
if (m_pool.m_asset_lookup.empty())
auto localizeAssets = context.m_zone.m_pools.PoolAssets<AssetLocalize>();
if (localizeAssets.empty())
return;
const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language);
@@ -34,7 +30,7 @@ namespace localize
stringFileDumper.SetNotes("");
for (const auto* localizeEntry : m_pool)
for (const auto* localizeEntry : localizeAssets)
{
stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value);
}

View File

@@ -8,8 +8,6 @@ namespace localize
class DumperIW4 final : public AbstractSingleProgressAssetDumper<IW4::AssetLocalize>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetLocalize::Type>& pool);
void Dump(AssetDumpingContext& context) override;
};
} // namespace localize

View File

@@ -7,11 +7,6 @@ using namespace IW4;
namespace addon_map_ents
{
DumperIW4::DumperIW4(const AssetPool<AssetAddonMapEnts::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetAddonMapEnts::Type>& asset)
{
const auto* addonMapEnts = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace addon_map_ents
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetAddonMapEnts>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetAddonMapEnts::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetAddonMapEnts::Type>& asset) override;
};

View File

@@ -1,7 +1,6 @@
#include "MaterialConstantZoneStateIW4.h"
#include "Game/IW4/CommonIW4.h"
#include "Game/IW4/GameAssetPoolIW4.h"
#include "Game/IW4/GameIW4.h"
#include "ObjWriting.h"
#include "Zone/ZoneRegistry.h"
@@ -205,18 +204,14 @@ namespace IW4
{
for (const auto* zone : ZoneRegistry::GetRegistryForGame(GameId::IW4)->Zones())
{
const auto* assetPools = dynamic_cast<const GameAssetPoolIW4*>(zone->m_pools.get());
if (!assetPools)
return;
for (const auto* vertexShaderAsset : *assetPools->m_material_vertex_shader)
for (const auto* vertexShaderAsset : zone->m_pools.PoolAssets<AssetVertexShader>())
{
const auto* vertexShader = vertexShaderAsset->Asset();
if (ShouldDumpFromStruct(vertexShader))
ExtractNamesFromShader(vertexShader->prog.loadDef.program, static_cast<size_t>(vertexShader->prog.loadDef.programSize) * sizeof(uint32_t));
}
for (const auto* pixelShaderAsset : *assetPools->m_material_pixel_shader)
for (const auto* pixelShaderAsset : zone->m_pools.PoolAssets<AssetPixelShader>())
{
const auto* pixelShader = pixelShaderAsset->Asset();
if (ShouldDumpFromStruct(pixelShader))

View File

@@ -1109,11 +1109,6 @@ namespace
namespace material
{
DecompilingGdtDumperIW4::DecompilingGdtDumperIW4(const AssetPool<AssetMaterial::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DecompilingGdtDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetMaterial::Type>& asset)
{
if (!context.m_gdt)

View File

@@ -7,9 +7,6 @@ namespace material
{
class DecompilingGdtDumperIW4 final : public AbstractAssetDumper<IW4::AssetMaterial>
{
public:
explicit DecompilingGdtDumperIW4(const AssetPool<IW4::AssetMaterial::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetMaterial::Type>& asset) override;
};

View File

@@ -1,6 +1,5 @@
#include "MenuDumperIW4.h"
#include "Game/IW4/GameAssetPoolIW4.h"
#include "MenuListDumperIW4.h"
#include "MenuWriterIW4.h"
#include "ObjWriting.h"
@@ -25,11 +24,6 @@ namespace
namespace menu
{
MenuDumperIW4::MenuDumperIW4(const AssetPool<AssetMenu::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void MenuDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetMenu::Type>& asset)
{
const auto* menu = asset.Asset();
@@ -38,8 +32,8 @@ namespace menu
if (!ObjWriting::ShouldHandleAssetType(ASSET_TYPE_MENULIST))
{
// Make sure menu paths based on menu lists are created
const auto* gameAssetPool = dynamic_cast<GameAssetPoolIW4*>(asset.m_zone->m_pools.get());
for (auto* menuListAsset : *gameAssetPool->m_menu_list)
auto menuListAssets = context.m_zone.m_pools.PoolAssets<AssetMenuList>();
for (auto* menuListAsset : menuListAssets)
CreateDumpingStateForMenuListIW4(zoneState, menuListAsset->Asset());
}

View File

@@ -7,9 +7,6 @@ namespace menu
{
class MenuDumperIW4 final : public AbstractAssetDumper<IW4::AssetMenu>
{
public:
explicit MenuDumperIW4(const AssetPool<IW4::AssetMenu::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetMenu::Type>& asset) override;
};

View File

@@ -147,11 +147,6 @@ namespace menu
}
}
MenuListDumperIW4::MenuListDumperIW4(const AssetPool<AssetMenuList::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void MenuListDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetMenuList::Type>& asset)
{
const auto* menuList = asset.Asset();
@@ -178,7 +173,8 @@ namespace menu
{
auto* zoneState = context.GetZoneAssetDumperState<MenuDumpingZoneState>();
for (const auto* asset : m_pool)
auto menuListAssets = context.m_zone.m_pools.PoolAssets<AssetMenuList>();
for (const auto* asset : menuListAssets)
CreateDumpingStateForMenuListIW4(zoneState, asset->Asset());
AbstractAssetDumper::Dump(context);

View File

@@ -11,8 +11,6 @@ namespace menu
class MenuListDumperIW4 final : public AbstractAssetDumper<IW4::AssetMenuList>
{
public:
explicit MenuListDumperIW4(const AssetPool<IW4::AssetMenuList::Type>& pool);
void Dump(AssetDumpingContext& context) override;
protected:

View File

@@ -1,6 +1,5 @@
#include "ObjWriterIW4.h"
#include "Game/IW4/GameAssetPoolIW4.h"
#include "Game/IW4/Material/MaterialJsonDumperIW4.h"
#include "Game/IW4/XModel/XModelDumperIW4.h"
#include "Image/ImageDumperIW4.h"
@@ -11,7 +10,6 @@
#include "Material/MaterialDecompilingDumperIW4.h"
#include "Menu/MenuDumperIW4.h"
#include "Menu/MenuListDumperIW4.h"
#include "ObjWriting.h"
#include "PhysCollmap/PhysCollmapDumperIW4.h"
#include "PhysPreset/PhysPresetInfoStringDumperIW4.h"
#include "RawFile/RawFileDumperIW4.h"
@@ -28,69 +26,44 @@
using namespace IW4;
bool ObjWriter::DumpZone(AssetDumpingContext& context) const
void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context)
{
#define REGISTER_DUMPER(dumperType, poolName) \
if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \
{ \
dumpers.emplace_back(std::make_unique<dumperType>(*assetPools->poolName)); \
}
const auto* assetPools = dynamic_cast<GameAssetPoolIW4*>(context.m_zone.m_pools.get());
std::vector<std::unique_ptr<IAssetDumper>> dumpers;
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)
RegisterAssetDumper(std::make_unique<phys_preset::InfoStringDumperIW4>());
RegisterAssetDumper(std::make_unique<phys_collmap::DumperIW4>());
// REGISTER_DUMPER(AssetDumperXAnimParts)
RegisterAssetDumper(std::make_unique<xmodel::DumperIW4>());
RegisterAssetDumper(std::make_unique<material::JsonDumperIW4>());
#ifdef EXPERIMENTAL_MATERIAL_COMPILATION
DUMP_ASSET_POOL(material::DecompilingGdtDumperIW4, m_material)
RegisterAssetDumper(std::make_unique<material::DecompilingGdtDumperIW4>());
#endif
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)
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 REGISTER_DUMPER
RegisterAssetDumper(std::make_unique<shader::PixelShaderDumperIW4>());
RegisterAssetDumper(std::make_unique<shader::VertexShaderDumperIW4>());
RegisterAssetDumper(std::make_unique<techset::DumperIW4>());
RegisterAssetDumper(std::make_unique<image::DumperIW4>());
// REGISTER_DUMPER(AssetDumpersnd_alias_list_t)
RegisterAssetDumper(std::make_unique<sound_curve::DumperIW4>());
RegisterAssetDumper(std::make_unique<sound::LoadedSoundDumperIW4>());
// REGISTER_DUMPER(AssetDumperClipMap)
// REGISTER_DUMPER(AssetDumperComWorld)
// REGISTER_DUMPER(AssetDumperGameWorldSp)
// REGISTER_DUMPER(AssetDumperGameWorldMp)
// REGISTER_DUMPER(AssetDumperMapEnts)
// REGISTER_DUMPER(AssetDumperFxWorld)
// REGISTER_DUMPER(AssetDumperGfxWorld)
RegisterAssetDumper(std::make_unique<light_def::DumperIW4>());
// REGISTER_DUMPER(AssetDumperFont_s)
RegisterAssetDumper(std::make_unique<menu::MenuListDumperIW4>());
RegisterAssetDumper(std::make_unique<menu::MenuDumperIW4>());
RegisterAssetDumper(std::make_unique<localize::DumperIW4>());
RegisterAssetDumper(std::make_unique<weapon::DumperIW4>());
// REGISTER_DUMPER(AssetDumperSndDriverGlobals)
// REGISTER_DUMPER(AssetDumperFxEffectDef)
// REGISTER_DUMPER(AssetDumperFxImpactTable)
RegisterAssetDumper(std::make_unique<raw_file::DumperIW4>());
RegisterAssetDumper(std::make_unique<string_table::DumperIW4>());
RegisterAssetDumper(std::make_unique<leaderboard::JsonDumperIW4>());
RegisterAssetDumper(std::make_unique<structured_data_def::DumperIW4>());
RegisterAssetDumper(std::make_unique<tracer::DumperIW4>());
RegisterAssetDumper(std::make_unique<vehicle::DumperIW4>());
RegisterAssetDumper(std::make_unique<addon_map_ents::DumperIW4>());
}

View File

@@ -1,11 +1,12 @@
#pragma once
#include "IObjWriter.h"
#include "ObjWriter.h"
namespace IW4
{
class ObjWriter final : public IObjWriter
{
public:
bool DumpZone(AssetDumpingContext& context) const override;
protected:
void RegisterAssetDumpers(AssetDumpingContext& context) override;
};
} // namespace IW4

View File

@@ -10,11 +10,6 @@ using namespace IW4;
namespace phys_collmap
{
DumperIW4::DumperIW4(const AssetPool<AssetPhysCollMap::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetPhysCollMap::Type>& asset)
{
const auto* physCollmap = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace phys_collmap
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetPhysCollMap>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetPhysCollMap::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetPhysCollMap::Type>& asset) override;
};

View File

@@ -80,11 +80,6 @@ namespace
namespace phys_preset
{
InfoStringDumperIW4::InfoStringDumperIW4(const AssetPool<AssetPhysPreset::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void InfoStringDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetPhysPreset::Type>& asset)
{
// Only dump raw when no gdt available

View File

@@ -7,9 +7,6 @@ namespace phys_preset
{
class InfoStringDumperIW4 final : public AbstractAssetDumper<IW4::AssetPhysPreset>
{
public:
explicit InfoStringDumperIW4(const AssetPool<IW4::AssetPhysPreset::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetPhysPreset::Type>& asset) override;
};

View File

@@ -10,11 +10,6 @@ using namespace IW4;
namespace raw_file
{
DumperIW4::DumperIW4(const AssetPool<AssetRawFile::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetRawFile::Type>& asset)
{
const auto* rawFile = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace raw_file
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetRawFile>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetRawFile::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetRawFile::Type>& asset) override;
};

View File

@@ -6,11 +6,6 @@ using namespace IW4;
namespace shader
{
PixelShaderDumperIW4::PixelShaderDumperIW4(const AssetPool<AssetPixelShader::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void PixelShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetPixelShader::Type>& asset)
{
const auto* pixelShader = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace shader
{
class PixelShaderDumperIW4 final : public AbstractAssetDumper<IW4::AssetPixelShader>
{
public:
explicit PixelShaderDumperIW4(const AssetPool<IW4::AssetPixelShader::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetPixelShader::Type>& asset) override;
};

View File

@@ -6,11 +6,6 @@ using namespace IW4;
namespace shader
{
VertexShaderDumperIW4::VertexShaderDumperIW4(const AssetPool<AssetVertexShader::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void VertexShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetVertexShader::Type>& asset)
{
const auto* vertexShader = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace shader
{
class VertexShaderDumperIW4 final : public AbstractAssetDumper<IW4::AssetVertexShader>
{
public:
explicit VertexShaderDumperIW4(const AssetPool<IW4::AssetVertexShader::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetVertexShader::Type>& asset) override;
};

View File

@@ -25,11 +25,6 @@ namespace
namespace sound
{
LoadedSoundDumperIW4::LoadedSoundDumperIW4(const AssetPool<AssetLoadedSound::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void LoadedSoundDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetLoadedSound::Type>& asset)
{
const auto* loadedSound = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace sound
{
class LoadedSoundDumperIW4 final : public AbstractAssetDumper<IW4::AssetLoadedSound>
{
public:
explicit LoadedSoundDumperIW4(const AssetPool<IW4::AssetLoadedSound::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetLoadedSound::Type>& asset) override;
};

View File

@@ -7,11 +7,6 @@ using namespace IW4;
namespace sound_curve
{
DumperIW4::DumperIW4(const AssetPool<AssetSoundCurve::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetSoundCurve::Type>& asset)
{
const auto* sndCurve = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace sound_curve
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetSoundCurve>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetSoundCurve::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetSoundCurve::Type>& asset) override;
};

View File

@@ -6,11 +6,6 @@ using namespace IW4;
namespace string_table
{
DumperIW4::DumperIW4(const AssetPool<AssetStringTable::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetStringTable::Type>& asset)
{
const auto* stringTable = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace string_table
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetStringTable>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetStringTable::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetStringTable::Type>& asset) override;
};

View File

@@ -187,11 +187,6 @@ namespace
namespace structured_data_def
{
DumperIW4::DumperIW4(const AssetPool<AssetStructuredDataDef::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetStructuredDataDef::Type>& asset)
{
const auto* set = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace structured_data_def
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetStructuredDataDef>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetStructuredDataDef::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetStructuredDataDef::Type>& asset) override;
};

View File

@@ -250,7 +250,8 @@ namespace
if (vertexShader->name[0] == ',')
{
const auto loadedVertexShaderFromOtherZone = GlobalAssetPool<MaterialVertexShader>::GetAssetByName(&vertexShader->name[1]);
const auto loadedVertexShaderFromOtherZone =
GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::IW4)->GetAsset<AssetVertexShader>(&vertexShader->name[1]);
if (loadedVertexShaderFromOtherZone == nullptr)
{
@@ -305,7 +306,8 @@ namespace
if (pixelShader->name[0] == ',')
{
const auto loadedPixelShaderFromOtherZone = GlobalAssetPool<MaterialPixelShader>::GetAssetByName(&pixelShader->name[1]);
const auto loadedPixelShaderFromOtherZone =
GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::IW4)->GetAsset<AssetPixelShader>(&pixelShader->name[1]);
if (loadedPixelShaderFromOtherZone == nullptr)
{
@@ -377,7 +379,8 @@ namespace
if (vertexDecl->name && vertexDecl->name[0] == ',')
{
const auto loadedVertexDeclFromOtherZone = GlobalAssetPool<MaterialVertexDeclaration>::GetAssetByName(&vertexDecl->name[1]);
const auto loadedVertexDeclFromOtherZone =
GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::IW4)->GetAsset<AssetVertexDecl>(&vertexDecl->name[1]);
if (loadedVertexDeclFromOtherZone == nullptr)
{
@@ -488,11 +491,6 @@ namespace
namespace techset
{
DumperIW4::DumperIW4(const AssetPool<AssetTechniqueSet::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetTechniqueSet::Type>& asset)
{
const auto* techniqueSet = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace techset
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetTechniqueSet>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetTechniqueSet::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetTechniqueSet::Type>& asset) override;
};

View File

@@ -52,11 +52,6 @@ namespace
namespace tracer
{
DumperIW4::DumperIW4(const AssetPool<AssetTracer::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetTracer::Type>& asset)
{
// Only dump raw when no gdt available

View File

@@ -7,9 +7,6 @@ namespace tracer
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetTracer>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetTracer::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetTracer::Type>& asset) override;
};

View File

@@ -93,11 +93,6 @@ namespace
namespace vehicle
{
DumperIW4::DumperIW4(const AssetPool<AssetVehicle::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetVehicle::Type>& asset)
{
// Only dump raw when no gdt available

View File

@@ -7,9 +7,6 @@ namespace vehicle
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetVehicle>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetVehicle::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetVehicle::Type>& asset) override;
};

View File

@@ -405,11 +405,6 @@ namespace
namespace weapon
{
DumperIW4::DumperIW4(const AssetPool<AssetWeapon::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetWeapon::Type>& asset)
{
// Only dump raw when no gdt available

View File

@@ -7,9 +7,6 @@ namespace weapon
{
class DumperIW4 final : public AbstractAssetDumper<IW4::AssetWeapon>
{
public:
explicit DumperIW4(const AssetPool<IW4::AssetWeapon::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetWeapon::Type>& asset) override;
};

View File

@@ -62,8 +62,7 @@ namespace
namespace image
{
DumperIW5::DumperIW5(const AssetPool<AssetImage::Type>& pool)
: AbstractAssetDumper(pool)
DumperIW5::DumperIW5()
{
switch (ObjWriting::Configuration.ImageOutputFormat)
{

View File

@@ -11,7 +11,7 @@ namespace image
class DumperIW5 final : public AbstractAssetDumper<IW5::AssetImage>
{
public:
explicit DumperIW5(const AssetPool<IW5::AssetImage::Type>& pool);
DumperIW5();
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetImage::Type>& asset) override;

View File

@@ -94,11 +94,6 @@ namespace
namespace leaderboard
{
JsonDumperIW5::JsonDumperIW5(const AssetPool<AssetLeaderboard::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void JsonDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetLeaderboard::Type>& asset)
{
const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAsset(asset.m_name));

View File

@@ -7,9 +7,6 @@ namespace leaderboard
{
class JsonDumperIW5 final : public AbstractAssetDumper<IW5::AssetLeaderboard>
{
public:
explicit JsonDumperIW5(const AssetPool<IW5::AssetLeaderboard::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetLeaderboard::Type>& asset) override;
};

View File

@@ -5,20 +5,15 @@
#include "Utils/Logging/Log.h"
#include <format>
#include <iostream>
using namespace IW5;
namespace localize
{
DumperIW5::DumperIW5(const AssetPool<AssetLocalize::Type>& pool)
: AbstractSingleProgressAssetDumper(pool)
{
}
void DumperIW5::Dump(AssetDumpingContext& context)
{
if (m_pool.m_asset_lookup.empty())
auto localizeAssets = context.m_zone.m_pools.PoolAssets<AssetLocalize>();
if (localizeAssets.empty())
return;
const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language);
@@ -35,7 +30,7 @@ namespace localize
stringFileDumper.SetNotes("");
for (const auto* localizeEntry : m_pool)
for (const auto* localizeEntry : localizeAssets)
{
stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value);
}

View File

@@ -8,8 +8,6 @@ namespace localize
class DumperIW5 final : public AbstractSingleProgressAssetDumper<IW5::AssetLocalize>
{
public:
explicit DumperIW5(const AssetPool<IW5::AssetLocalize::Type>& pool);
void Dump(AssetDumpingContext& context) override;
};
} // namespace localize

View File

@@ -7,11 +7,6 @@ using namespace IW5;
namespace addon_map_ents
{
DumperIW5::DumperIW5(const AssetPool<AssetAddonMapEnts::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetAddonMapEnts::Type>& asset)
{
const auto* addonMapEnts = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace addon_map_ents
{
class DumperIW5 final : public AbstractAssetDumper<IW5::AssetAddonMapEnts>
{
public:
explicit DumperIW5(const AssetPool<IW5::AssetAddonMapEnts::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetAddonMapEnts::Type>& asset) override;
};

View File

@@ -1,7 +1,6 @@
#include "MaterialConstantZoneStateIW5.h"
#include "Game/IW5/CommonIW5.h"
#include "Game/IW5/GameAssetPoolIW5.h"
#include "Game/IW5/GameIW5.h"
#include "ObjWriting.h"
#include "Zone/ZoneRegistry.h"
@@ -205,18 +204,14 @@ namespace IW5
{
for (const auto* zone : ZoneRegistry::GetRegistryForGame(GameId::IW5)->Zones())
{
const auto* iw5AssetPools = dynamic_cast<const GameAssetPoolIW5*>(zone->m_pools.get());
if (!iw5AssetPools)
return;
for (const auto* vertexShaderAsset : *iw5AssetPools->m_material_vertex_shader)
for (const auto* vertexShaderAsset : zone->m_pools.PoolAssets<AssetVertexShader>())
{
const auto* vertexShader = vertexShaderAsset->Asset();
if (ShouldDumpFromStruct(vertexShader))
ExtractNamesFromShader(vertexShader->prog.loadDef.program, static_cast<size_t>(vertexShader->prog.loadDef.programSize) * sizeof(uint32_t));
}
for (const auto* pixelShaderAsset : *iw5AssetPools->m_material_pixel_shader)
for (const auto* pixelShaderAsset : zone->m_pools.PoolAssets<AssetPixelShader>())
{
const auto* pixelShader = pixelShaderAsset->Asset();
if (ShouldDumpFromStruct(pixelShader))

View File

@@ -1,7 +1,5 @@
#include "MenuDumperIW5.h"
#include "Game/IW5/GameAssetPoolIW5.h"
#include "Game/IW5/Menu/MenuDumperIW5.h"
#include "MenuWriterIW5.h"
#include "ObjWriting.h"
@@ -18,8 +16,8 @@ namespace
const MenuList* GetParentMenuList(const XAssetInfo<menuDef_t>& asset)
{
const auto* menu = asset.Asset();
const auto* gameAssetPool = dynamic_cast<GameAssetPoolIW5*>(asset.m_zone->m_pools.get());
for (const auto* menuList : *gameAssetPool->m_menu_list)
auto zoneMenuListPool = asset.m_zone->m_pools.PoolAssets<AssetMenuList>();
for (const auto* menuList : zoneMenuListPool)
{
const auto* menuListAsset = menuList->Asset();
@@ -51,11 +49,6 @@ namespace
namespace menu
{
MenuDumperIW5::MenuDumperIW5(const AssetPool<AssetMenu::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void MenuDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetMenu::Type>& asset)
{
const auto* menu = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace menu
{
class MenuDumperIW5 final : public AbstractAssetDumper<IW5::AssetMenu>
{
public:
explicit MenuDumperIW5(const AssetPool<IW5::AssetMenu::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetMenu::Type>& asset) override;
};

View File

@@ -106,11 +106,6 @@ namespace
namespace menu
{
MenuListDumperIW5::MenuListDumperIW5(const AssetPool<AssetMenuList::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void MenuListDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetMenuList::Type>& asset)
{
const auto* menuList = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace menu
{
class MenuListDumperIW5 final : public AbstractAssetDumper<IW5::AssetMenuList>
{
public:
explicit MenuListDumperIW5(const AssetPool<IW5::AssetMenuList::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetMenuList::Type>& asset) override;
};

View File

@@ -1,6 +1,5 @@
#include "ObjWriterIW5.h"
#include "Game/IW5/GameAssetPoolIW5.h"
#include "Game/IW5/Material/MaterialJsonDumperIW5.h"
#include "Game/IW5/XModel/XModelDumperIW5.h"
#include "Image/ImageDumperIW5.h"
@@ -9,7 +8,6 @@
#include "Maps/AddonMapEntsDumperIW5.h"
#include "Menu/MenuDumperIW5.h"
#include "Menu/MenuListDumperIW5.h"
#include "ObjWriting.h"
#include "RawFile/RawFileDumperIW5.h"
#include "Script/ScriptDumperIW5.h"
#include "Sound/LoadedSoundDumperIW5.h"
@@ -19,71 +17,46 @@
using namespace IW5;
bool ObjWriter::DumpZone(AssetDumpingContext& context) const
void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context)
{
#define REGISTER_DUMPER(dumperType, poolName) \
if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \
{ \
dumpers.emplace_back(std::make_unique<dumperType>(*assetPools->poolName)); \
}
const auto* assetPools = dynamic_cast<GameAssetPoolIW5*>(context.m_zone.m_pools.get());
std::vector<std::unique_ptr<IAssetDumper>> dumpers;
// 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)
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 REGISTER_DUMPER
// REGISTER_DUMPER(AssetDumperPhysPreset)
// REGISTER_DUMPER(AssetDumperPhysCollmap)
// REGISTER_DUMPER(AssetDumperXAnimParts)
// REGISTER_DUMPER(AssetDumperXModelSurfs)
RegisterAssetDumper(std::make_unique<xmodel::DumperIW5>());
RegisterAssetDumper(std::make_unique<material::JsonDumperIW5>());
// REGISTER_DUMPER(AssetDumperMaterialPixelShader)
// REGISTER_DUMPER(AssetDumperMaterialVertexShader)
// REGISTER_DUMPER(AssetDumperMaterialVertexDeclaration)
// REGISTER_DUMPER(AssetDumperMaterialTechniqueSet)
RegisterAssetDumper(std::make_unique<image::DumperIW5>());
// REGISTER_DUMPER(AssetDumpersnd_alias_list_t)
// REGISTER_DUMPER(AssetDumperSndCurve)
RegisterAssetDumper(std::make_unique<sound::LoadedSoundDumperIW5>());
// REGISTER_DUMPER(AssetDumperclipMap_t)
// REGISTER_DUMPER(AssetDumperComWorld)
// REGISTER_DUMPER(AssetDumperGlassWorld)
// REGISTER_DUMPER(AssetDumperPathData)
// REGISTER_DUMPER(AssetDumperVehicleTrack)
// REGISTER_DUMPER(AssetDumperMapEnts)
// REGISTER_DUMPER(AssetDumperFxWorld)
// REGISTER_DUMPER(AssetDumperGfxWorld)
// REGISTER_DUMPER(AssetDumperGfxLightDef)
// REGISTER_DUMPER(AssetDumperFont_s)
RegisterAssetDumper(std::make_unique<menu::MenuListDumperIW5>());
RegisterAssetDumper(std::make_unique<menu::MenuDumperIW5>());
RegisterAssetDumper(std::make_unique<localize::DumperIW5>());
RegisterAssetDumper(std::make_unique<attachment::JsonDumperIW5>());
RegisterAssetDumper(std::make_unique<weapon::DumperIW5>());
// REGISTER_DUMPER(AssetDumperFxEffectDef)
// REGISTER_DUMPER(AssetDumperFxImpactTable)
// REGISTER_DUMPER(AssetDumperSurfaceFxTable)
RegisterAssetDumper(std::make_unique<raw_file::DumperIW5>());
RegisterAssetDumper(std::make_unique<script::DumperIW5>());
RegisterAssetDumper(std::make_unique<string_table::DumperIW5>());
RegisterAssetDumper(std::make_unique<leaderboard::JsonDumperIW5>());
// REGISTER_DUMPER(AssetDumperStructuredDataDefSet)
// REGISTER_DUMPER(AssetDumperTracerDef)
// REGISTER_DUMPER(AssetDumperVehicleDef)
RegisterAssetDumper(std::make_unique<addon_map_ents::DumperIW5>());
}

View File

@@ -1,11 +1,12 @@
#pragma once
#include "IObjWriter.h"
#include "ObjWriter.h"
namespace IW5
{
class ObjWriter final : public IObjWriter
{
public:
bool DumpZone(AssetDumpingContext& context) const override;
void RegisterAssetDumpers(AssetDumpingContext& context) override;
};
} // namespace IW5

View File

@@ -10,11 +10,6 @@ using namespace IW5;
namespace raw_file
{
DumperIW5::DumperIW5(const AssetPool<AssetRawFile::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetRawFile::Type>& asset)
{
const auto* rawFile = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace raw_file
{
class DumperIW5 final : public AbstractAssetDumper<IW5::AssetRawFile>
{
public:
explicit DumperIW5(const AssetPool<IW5::AssetRawFile::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetRawFile::Type>& asset) override;
};

View File

@@ -4,11 +4,6 @@ using namespace IW5;
namespace script
{
DumperIW5::DumperIW5(const AssetPool<AssetScript::Type>& 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<AssetScript::Type>& asset)
{

View File

@@ -7,9 +7,6 @@ namespace script
{
class DumperIW5 final : public AbstractAssetDumper<IW5::AssetScript>
{
public:
explicit DumperIW5(const AssetPool<IW5::AssetScript::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetScript::Type>& asset) override;
};

View File

@@ -25,11 +25,6 @@ namespace
namespace sound
{
LoadedSoundDumperIW5::LoadedSoundDumperIW5(const AssetPool<AssetLoadedSound::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void LoadedSoundDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetLoadedSound::Type>& asset)
{
const auto* loadedSound = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace sound
{
class LoadedSoundDumperIW5 final : public AbstractAssetDumper<IW5::AssetLoadedSound>
{
public:
explicit LoadedSoundDumperIW5(const AssetPool<IW5::AssetLoadedSound::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetLoadedSound::Type>& asset) override;
};

View File

@@ -6,11 +6,6 @@ using namespace IW5;
namespace string_table
{
DumperIW5::DumperIW5(const AssetPool<AssetStringTable::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetStringTable::Type>& asset)
{
const auto* stringTable = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace string_table
{
class DumperIW5 final : public AbstractAssetDumper<IW5::AssetStringTable>
{
public:
explicit DumperIW5(const AssetPool<IW5::AssetStringTable::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetStringTable::Type>& asset) override;
};

View File

@@ -395,11 +395,6 @@ namespace
namespace attachment
{
JsonDumperIW5::JsonDumperIW5(const AssetPool<AssetAttachment::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void JsonDumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetAttachment::Type>& asset)
{
const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAssetName(asset.m_name));

View File

@@ -7,9 +7,6 @@ namespace attachment
{
class JsonDumperIW5 final : public AbstractAssetDumper<IW5::AssetAttachment>
{
public:
explicit JsonDumperIW5(const AssetPool<IW5::AssetAttachment::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetAttachment::Type>& asset) override;
};

View File

@@ -733,11 +733,6 @@ namespace
namespace weapon
{
DumperIW5::DumperIW5(const AssetPool<AssetWeapon::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperIW5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetWeapon::Type>& asset)
{
// TODO: only dump infostring fields when non-default

View File

@@ -7,9 +7,6 @@ namespace weapon
{
class DumperIW5 final : public AbstractAssetDumper<IW5::AssetWeapon>
{
public:
explicit DumperIW5(const AssetPool<IW5::AssetWeapon::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetWeapon::Type>& asset) override;
};

View File

@@ -61,8 +61,7 @@ namespace
namespace image
{
DumperT5::DumperT5(const AssetPool<AssetImage::Type>& pool)
: AbstractAssetDumper(pool)
DumperT5::DumperT5()
{
switch (ObjWriting::Configuration.ImageOutputFormat)
{

View File

@@ -11,7 +11,7 @@ namespace image
class DumperT5 final : public AbstractAssetDumper<T5::AssetImage>
{
public:
explicit DumperT5(const AssetPool<T5::AssetImage::Type>& pool);
DumperT5();
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T5::AssetImage::Type>& asset) override;

View File

@@ -5,20 +5,15 @@
#include "Utils/Logging/Log.h"
#include <format>
#include <iostream>
using namespace T5;
namespace localize
{
DumperT5::DumperT5(const AssetPool<AssetLocalize::Type>& pool)
: AbstractSingleProgressAssetDumper(pool)
{
}
void DumperT5::Dump(AssetDumpingContext& context)
{
if (m_pool.m_asset_lookup.empty())
auto localizeAssets = context.m_zone.m_pools.PoolAssets<AssetLocalize>();
if (localizeAssets.empty())
return;
const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language);
@@ -35,7 +30,7 @@ namespace localize
stringFileDumper.SetNotes("");
for (const auto* localizeEntry : m_pool)
for (const auto* localizeEntry : localizeAssets)
{
stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value);
}

View File

@@ -8,8 +8,6 @@ namespace localize
class DumperT5 final : public AbstractSingleProgressAssetDumper<T5::AssetLocalize>
{
public:
explicit DumperT5(const AssetPool<T5::AssetLocalize::Type>& pool);
void Dump(AssetDumpingContext& context) override;
};
} // namespace localize

View File

@@ -1,7 +1,6 @@
#include "MaterialConstantZoneStateT5.h"
#include "Game/T5/CommonT5.h"
#include "Game/T5/GameAssetPoolT5.h"
#include "Game/T5/GameT5.h"
#include "ObjWriting.h"
#include "Zone/ZoneRegistry.h"
@@ -479,11 +478,7 @@ namespace T5
{
for (const auto* zone : ZoneRegistry::GetRegistryForGame(GameId::T5)->Zones())
{
const auto* assetPools = dynamic_cast<const GameAssetPoolT5*>(zone->m_pools.get());
if (!assetPools)
return;
for (const auto* techniqueSetInfo : *assetPools->m_technique_set)
for (const auto* techniqueSetInfo : zone->m_pools.PoolAssets<AssetTechniqueSet>())
{
const auto* techniqueSet = techniqueSetInfo->Asset();

View File

@@ -1,36 +1,25 @@
#include "ObjWriterT5.h"
#include "Game/T5/GameAssetPoolT5.h"
#include "Game/T5/Material/MaterialJsonDumperT5.h"
#include "Game/T5/Techset/TechsetDumperT5.h"
#include "Game/T5/XModel/XModelDumperT5.h"
#include "Image/ImageDumperT5.h"
#include "Localize/LocalizeDumperT5.h"
#include "ObjWriting.h"
#include "RawFile/RawFileDumperT5.h"
#include "StringTable/StringTableDumperT5.h"
using namespace T5;
bool ObjWriter::DumpZone(AssetDumpingContext& context) const
void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context)
{
#define REGISTER_DUMPER(dumperType, poolName) \
if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(dumperType::AssetType_t::EnumEntry)) \
{ \
dumpers.emplace_back(std::make_unique<dumperType>(*assetPools->poolName)); \
}
const auto* assetPools = dynamic_cast<GameAssetPoolT5*>(context.m_zone.m_pools.get());
std::vector<std::unique_ptr<IAssetDumper>> dumpers;
// 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(techset::DumperT5, m_technique_set)
REGISTER_DUMPER(image::DumperT5, m_image)
RegisterAssetDumper(std::make_unique<xmodel::DumperT5>());
RegisterAssetDumper(std::make_unique<material::JsonDumperT5>());
RegisterAssetDumper(std::make_unique<techset::DumperT5>());
RegisterAssetDumper(std::make_unique<image::DumperT5>());
// REGISTER_DUMPER(AssetDumperSndBank, m_sound_bank)
// REGISTER_DUMPER(AssetDumperSndPatch, m_sound_patch)
// REGISTER_DUMPER(AssetDumperClipMap, m_clip_map)
@@ -43,32 +32,16 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const
// REGISTER_DUMPER(AssetDumperFont, m_font)
// REGISTER_DUMPER(AssetDumperMenuList, m_menu_list)
// REGISTER_DUMPER(AssetDumperMenuDef, m_menu_def)
REGISTER_DUMPER(localize::DumperT5, m_localize)
RegisterAssetDumper(std::make_unique<localize::DumperT5>());
// 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)
RegisterAssetDumper(std::make_unique<raw_file::DumperT5>());
RegisterAssetDumper(std::make_unique<string_table::DumperT5>());
// 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)
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 REGISTER_DUMPER
}

View File

@@ -1,11 +1,12 @@
#pragma once
#include "IObjWriter.h"
#include "ObjWriter.h"
namespace T5
{
class ObjWriter final : public IObjWriter
{
public:
bool DumpZone(AssetDumpingContext& context) const override;
void RegisterAssetDumpers(AssetDumpingContext& context) override;
};
} // namespace T5

View File

@@ -13,7 +13,7 @@ namespace fs = std::filesystem;
namespace
{
constexpr static size_t GSC_MAX_SIZE = 0xC000000;
constexpr size_t GSC_MAX_SIZE = 0xC000000;
void DumpGsc(AssetDumpingContext& context, const XAssetInfo<RawFile>& asset, std::ostream& stream)
{
@@ -96,11 +96,6 @@ namespace
namespace raw_file
{
DumperT5::DumperT5(const AssetPool<AssetRawFile::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetRawFile::Type>& asset)
{
const auto* rawFile = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace raw_file
{
class DumperT5 final : public AbstractAssetDumper<T5::AssetRawFile>
{
public:
explicit DumperT5(const AssetPool<T5::AssetRawFile::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T5::AssetRawFile::Type>& asset) override;
};

View File

@@ -6,11 +6,6 @@ using namespace T5;
namespace string_table
{
DumperT5::DumperT5(const AssetPool<AssetStringTable::Type>& pool)
: AbstractAssetDumper(pool)
{
}
void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetStringTable::Type>& asset)
{
const auto* stringTable = asset.Asset();

View File

@@ -7,9 +7,6 @@ namespace string_table
{
class DumperT5 final : public AbstractAssetDumper<T5::AssetStringTable>
{
public:
explicit DumperT5(const AssetPool<T5::AssetStringTable::Type>& pool);
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T5::AssetStringTable::Type>& asset) override;
};

Some files were not shown because too many files have changed in this diff Show More