2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-01-11 03:01:49 +00:00

feat: report on unlinking progress

This commit is contained in:
Jan Laupetin
2025-10-14 23:20:56 +01:00
parent 9fa41ca0d3
commit c6e9cbedda
159 changed files with 686 additions and 802 deletions

View File

@@ -76,19 +76,14 @@ namespace image
}
}
bool DumperIW4::ShouldDump(XAssetInfo<GfxImage>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<GfxImage>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<GfxImage>* asset)
{
const auto* image = asset->Asset();
const auto* image = asset.Asset();
const auto texture = LoadImageData(context.m_obj_search_path, *image);
if (!texture)
return;
const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name, m_writer->GetFileExtension()));
const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset.m_name, m_writer->GetFileExtension()));
if (!assetFile)
return;

View File

@@ -14,8 +14,7 @@ namespace image
DumperIW4();
protected:
bool ShouldDump(XAssetInfo<IW4::GfxImage>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::GfxImage>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::GfxImage>& asset) override;
private:
std::unique_ptr<IImageWriter> m_writer;

View File

@@ -77,19 +77,14 @@ namespace
namespace leaderboard
{
bool JsonDumperIW4::ShouldDump(XAssetInfo<LeaderboardDef>* asset)
void JsonDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<LeaderboardDef>& asset)
{
return true;
}
void JsonDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<LeaderboardDef>* asset)
{
const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAsset(asset->m_name));
const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAsset(asset.m_name));
if (!assetFile)
return;
Dumper dumper(*assetFile);
dumper.Dump(*asset->Asset());
dumper.Dump(*asset.Asset());
}
} // namespace leaderboard

View File

@@ -8,7 +8,6 @@ namespace leaderboard
class JsonDumperIW4 final : public AbstractAssetDumper<IW4::LeaderboardDef>
{
protected:
[[nodiscard]] bool ShouldDump(XAssetInfo<IW4::LeaderboardDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::LeaderboardDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::LeaderboardDef>& asset) override;
};
} // namespace leaderboard

View File

@@ -2,21 +2,14 @@
#include "LightDef/LightDefCommon.h"
#include <sstream>
using namespace IW4;
namespace light_def
{
bool DumperIW4::ShouldDump(XAssetInfo<GfxLightDef>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<GfxLightDef>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<GfxLightDef>* asset)
{
const auto* lightDef = asset->Asset();
const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name));
const auto* lightDef = asset.Asset();
const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset.m_name));
if (!assetFile || lightDef->attenuation.image == nullptr || lightDef->attenuation.image->name == nullptr)
return;

View File

@@ -8,7 +8,6 @@ namespace light_def
class DumperIW4 final : public AbstractAssetDumper<IW4::GfxLightDef>
{
protected:
bool ShouldDump(XAssetInfo<IW4::GfxLightDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::GfxLightDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::GfxLightDef>& asset) override;
};
} // namespace light_def

View File

@@ -5,15 +5,19 @@
#include "Utils/Logging/Log.h"
#include <format>
#include <sstream>
using namespace IW4;
namespace localize
{
void DumperIW4::DumpPool(AssetDumpingContext& context, AssetPool<LocalizeEntry>* pool)
size_t DumperIW4::GetProgressTotalCount(const AssetPool<LocalizeEntry>& pool) const
{
if (pool->m_asset_lookup.empty())
return pool.m_asset_lookup.empty() ? 0uz : 1uz;
}
void DumperIW4::DumpPool(AssetDumpingContext& context, const AssetPool<LocalizeEntry>& pool)
{
if (pool.m_asset_lookup.empty())
return;
const auto language = LocalizeCommon::GetNameOfLanguage(context.m_zone.m_language);
@@ -30,7 +34,7 @@ namespace localize
stringFileDumper.SetNotes("");
for (auto* localizeEntry : *pool)
for (const auto* localizeEntry : pool)
{
stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value);
}
@@ -41,5 +45,7 @@ namespace localize
{
con::error("Could not create string file for dumping localized strings of zone '{}'", context.m_zone.m_name);
}
context.IncrementProgress();
}
} // namespace localize

View File

@@ -8,6 +8,7 @@ namespace localize
class DumperIW4 final : public IAssetDumper<IW4::LocalizeEntry>
{
public:
void DumpPool(AssetDumpingContext& context, AssetPool<IW4::LocalizeEntry>* pool) override;
[[nodiscard]] size_t GetProgressTotalCount(const AssetPool<IW4::LocalizeEntry>& pool) const override;
void DumpPool(AssetDumpingContext& context, const AssetPool<IW4::LocalizeEntry>& pool) override;
};
} // namespace localize

View File

@@ -7,15 +7,10 @@ using namespace IW4;
namespace addon_map_ents
{
bool DumperIW4::ShouldDump(XAssetInfo<AddonMapEnts>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AddonMapEnts>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<AddonMapEnts>* asset)
{
const auto* addonMapEnts = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* addonMapEnts = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile)
return;

View File

@@ -8,7 +8,6 @@ namespace addon_map_ents
class DumperIW4 final : public AbstractAssetDumper<IW4::AddonMapEnts>
{
protected:
bool ShouldDump(XAssetInfo<IW4::AddonMapEnts>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::AddonMapEnts>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AddonMapEnts>& asset) override;
};
} // namespace addon_map_ents

View File

@@ -1110,17 +1110,12 @@ namespace
namespace material
{
bool DecompilingGdtDumperIW4::ShouldDump(XAssetInfo<Material>* asset)
{
return true;
}
void DecompilingGdtDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<Material>* asset)
void DecompilingGdtDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<Material>& asset)
{
if (!context.m_gdt)
return;
MaterialGdtDumper dumper(*asset->Asset());
MaterialGdtDumper dumper(*asset.Asset());
context.m_gdt->WriteEntry(dumper.CreateGdtEntry());
}
} // namespace material

View File

@@ -8,7 +8,6 @@ namespace material
class DecompilingGdtDumperIW4 final : public AbstractAssetDumper<IW4::Material>
{
protected:
bool ShouldDump(XAssetInfo<IW4::Material>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::Material>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::Material>& asset) override;
};
} // namespace material

View File

@@ -13,12 +13,12 @@ using namespace IW4;
namespace
{
std::string GetPathForMenu(menu::MenuDumpingZoneState* zoneState, XAssetInfo<menuDef_t>* asset)
std::string GetPathForMenu(menu::MenuDumpingZoneState* zoneState, const XAssetInfo<menuDef_t>& asset)
{
const auto menuDumpingState = zoneState->m_menu_dumping_state_map.find(asset->Asset());
const auto menuDumpingState = zoneState->m_menu_dumping_state_map.find(asset.Asset());
if (menuDumpingState == zoneState->m_menu_dumping_state_map.end())
return "ui_mp/" + std::string(asset->Asset()->window.name) + ".menu";
return "ui_mp/" + std::string(asset.Asset()->window.name) + ".menu";
return menuDumpingState->second.m_path;
}
@@ -26,20 +26,15 @@ namespace
namespace menu
{
bool MenuDumperIW4::ShouldDump(XAssetInfo<menuDef_t>* asset)
void MenuDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<menuDef_t>& asset)
{
return true;
}
void MenuDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<menuDef_t>* asset)
{
const auto* menu = asset->Asset();
const auto* menu = asset.Asset();
auto* zoneState = context.GetZoneAssetDumperState<MenuDumpingZoneState>();
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());
const auto* gameAssetPool = dynamic_cast<GameAssetPoolIW4*>(asset.m_zone->m_pools.get());
for (auto* menuListAsset : *gameAssetPool->m_menu_list)
CreateDumpingStateForMenuListIW4(zoneState, menuListAsset->Asset());
}

View File

@@ -9,7 +9,6 @@ namespace menu
class MenuDumperIW4 final : public AbstractAssetDumper<IW4::menuDef_t>
{
protected:
bool ShouldDump(XAssetInfo<IW4::menuDef_t>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::menuDef_t>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::menuDef_t>& asset) override;
};
} // namespace menu

View File

@@ -147,15 +147,10 @@ namespace menu
}
}
bool MenuListDumperIW4::ShouldDump(XAssetInfo<MenuList>* asset)
void MenuListDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<MenuList>& asset)
{
return true;
}
void MenuListDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<MenuList>* asset)
{
const auto* menuList = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* menuList = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile)
return;
@@ -174,11 +169,11 @@ namespace menu
menuWriter->End();
}
void MenuListDumperIW4::DumpPool(AssetDumpingContext& context, AssetPool<MenuList>* pool)
void MenuListDumperIW4::DumpPool(AssetDumpingContext& context, const AssetPool<MenuList>& pool)
{
auto* zoneState = context.GetZoneAssetDumperState<MenuDumpingZoneState>();
for (auto* asset : *pool)
for (const auto* asset : pool)
CreateDumpingStateForMenuListIW4(zoneState, asset->Asset());
AbstractAssetDumper<MenuList>::DumpPool(context, pool);

View File

@@ -11,11 +11,10 @@ namespace menu
class MenuListDumperIW4 final : public AbstractAssetDumper<IW4::MenuList>
{
protected:
bool ShouldDump(XAssetInfo<IW4::MenuList>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::MenuList>* asset) override;
public:
void DumpPool(AssetDumpingContext& context, AssetPool<IW4::MenuList>* pool) override;
void DumpPool(AssetDumpingContext& context, const AssetPool<IW4::MenuList>& pool) override;
protected:
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::MenuList>& asset) override;
};
} // namespace menu

View File

@@ -34,11 +34,20 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const
if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \
{ \
dumperType dumper; \
dumper.DumpPool(context, assetPools->poolName.get()); \
totalProgress += dumper.GetProgressTotalCount(*assetPools->poolName); \
dumpingFunctions.emplace_back( \
[](AssetDumpingContext& funcContext, const GameAssetPoolIW4* funcPools) \
{ \
dumperType dumper; \
dumper.DumpPool(funcContext, *funcPools->poolName); \
}); \
}
const auto* assetPools = dynamic_cast<GameAssetPoolIW4*>(context.m_zone.m_pools.get());
size_t totalProgress = 0uz;
std::vector<std::function<void(AssetDumpingContext & context, const GameAssetPoolIW4*)>> dumpingFunctions;
DUMP_ASSET_POOL(phys_preset::InfoStringDumperIW4, m_phys_preset, ASSET_TYPE_PHYSPRESET)
DUMP_ASSET_POOL(phys_collmap::DumperIW4, m_phys_collmap, ASSET_TYPE_PHYSCOLLMAP)
// DUMP_ASSET_POOL(AssetDumperXAnimParts, m_xanim_parts, ASSET_TYPE_XANIMPARTS)
@@ -78,6 +87,10 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const
DUMP_ASSET_POOL(vehicle::DumperIW4, m_vehicle, ASSET_TYPE_VEHICLE)
DUMP_ASSET_POOL(addon_map_ents::DumperIW4, m_addon_map_ents, ASSET_TYPE_ADDON_MAP_ENTS)
context.SetTotalProgress(totalProgress);
for (const auto& func : dumpingFunctions)
func(context, assetPools);
return true;
#undef DUMP_ASSET_POOL

View File

@@ -10,15 +10,10 @@ using namespace IW4;
namespace phys_collmap
{
bool DumperIW4::ShouldDump(XAssetInfo<PhysCollmap>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<PhysCollmap>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<PhysCollmap>* asset)
{
const auto* physCollmap = asset->Asset();
const auto assetFile = context.OpenAssetFile(phys_collmap::GetFileNameForAssetName(asset->m_name));
const auto* physCollmap = asset.Asset();
const auto assetFile = context.OpenAssetFile(phys_collmap::GetFileNameForAssetName(asset.m_name));
if (!assetFile)
return;

View File

@@ -8,7 +8,6 @@ namespace phys_collmap
class DumperIW4 final : public AbstractAssetDumper<IW4::PhysCollmap>
{
protected:
bool ShouldDump(XAssetInfo<IW4::PhysCollmap>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::PhysCollmap>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::PhysCollmap>& asset) override;
};
} // namespace phys_collmap

View File

@@ -57,21 +57,21 @@ namespace
physPresetInfo->perSurfaceSndAlias = physPreset->perSurfaceSndAlias ? 1 : 0;
}
InfoString CreateInfoString(XAssetInfo<PhysPreset>* asset)
InfoString CreateInfoString(const XAssetInfo<PhysPreset>& asset)
{
auto* physPresetInfo = new PhysPresetInfo;
CopyToPhysPresetInfo(asset->Asset(), physPresetInfo);
CopyToPhysPresetInfo(asset.Asset(), physPresetInfo);
InfoStringFromPhysPresetConverter converter(physPresetInfo,
phys_preset_fields,
std::extent_v<decltype(phys_preset_fields)>,
[asset](const scr_string_t scrStr) -> std::string
{
assert(scrStr < asset->m_zone->m_script_strings.Count());
if (scrStr >= asset->m_zone->m_script_strings.Count())
assert(scrStr < asset.m_zone->m_script_strings.Count());
if (scrStr >= asset.m_zone->m_script_strings.Count())
return "";
return asset->m_zone->m_script_strings[scrStr];
return asset.m_zone->m_script_strings[scrStr];
});
return converter.Convert();
@@ -80,24 +80,19 @@ namespace
namespace phys_preset
{
bool InfoStringDumperIW4::ShouldDump(XAssetInfo<IW4::PhysPreset>* asset)
{
return true;
}
void InfoStringDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::PhysPreset>* asset)
void InfoStringDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<PhysPreset>& asset)
{
// Only dump raw when no gdt available
if (context.m_gdt)
{
const auto infoString = CreateInfoString(asset);
GdtEntry gdtEntry(asset->m_name, ObjConstants::GDF_FILENAME_PHYS_PRESET);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_PHYS_PRESET);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_PHYS_PRESET, gdtEntry);
context.m_gdt->WriteEntry(gdtEntry);
}
else
{
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset->m_name));
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset.m_name));
if (!assetFile)
return;

View File

@@ -9,7 +9,6 @@ namespace phys_preset
class InfoStringDumperIW4 final : public AbstractAssetDumper<IW4::PhysPreset>
{
protected:
bool ShouldDump(XAssetInfo<IW4::PhysPreset>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::PhysPreset>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::PhysPreset>& asset) override;
};
} // namespace phys_preset

View File

@@ -10,15 +10,10 @@ using namespace IW4;
namespace raw_file
{
bool DumperIW4::ShouldDump(XAssetInfo<RawFile>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<RawFile>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<RawFile>* asset)
{
const auto* rawFile = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* rawFile = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile)
return;

View File

@@ -8,7 +8,6 @@ namespace raw_file
class DumperIW4 final : public AbstractAssetDumper<IW4::RawFile>
{
protected:
bool ShouldDump(XAssetInfo<IW4::RawFile>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::RawFile>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::RawFile>& asset) override;
};
} // namespace raw_file

View File

@@ -6,15 +6,10 @@ using namespace IW4;
namespace shader
{
bool PixelShaderDumperIW4::ShouldDump(XAssetInfo<IW4::MaterialPixelShader>* asset)
void PixelShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<MaterialPixelShader>& asset)
{
return true;
}
void PixelShaderDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::MaterialPixelShader>* asset)
{
const auto* pixelShader = asset->Asset();
const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForPixelShaderAssetName(asset->m_name));
const auto* pixelShader = asset.Asset();
const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForPixelShaderAssetName(asset.m_name));
if (!shaderFile)
return;

View File

@@ -8,7 +8,6 @@ namespace shader
class PixelShaderDumperIW4 final : public AbstractAssetDumper<IW4::MaterialPixelShader>
{
protected:
bool ShouldDump(XAssetInfo<IW4::MaterialPixelShader>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::MaterialPixelShader>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::MaterialPixelShader>& asset) override;
};
} // namespace shader

View File

@@ -6,15 +6,10 @@ using namespace IW4;
namespace shader
{
bool VertexShaderDumperIW4::ShouldDump(XAssetInfo<IW4::MaterialVertexShader>* asset)
void VertexShaderDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<MaterialVertexShader>& asset)
{
return true;
}
void VertexShaderDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::MaterialVertexShader>* asset)
{
const auto* vertexShader = asset->Asset();
const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForVertexShaderAssetName(asset->m_name));
const auto* vertexShader = asset.Asset();
const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForVertexShaderAssetName(asset.m_name));
if (!shaderFile)
return;

View File

@@ -8,7 +8,6 @@ namespace shader
class VertexShaderDumperIW4 final : public AbstractAssetDumper<IW4::MaterialVertexShader>
{
protected:
bool ShouldDump(XAssetInfo<IW4::MaterialVertexShader>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::MaterialVertexShader>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::MaterialVertexShader>& asset) override;
};
} // namespace shader

View File

@@ -25,15 +25,10 @@ namespace
namespace sound
{
bool LoadedSoundDumperIW4::ShouldDump(XAssetInfo<LoadedSound>* asset)
void LoadedSoundDumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<LoadedSound>& asset)
{
return true;
}
void LoadedSoundDumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<LoadedSound>* asset)
{
const auto* loadedSound = asset->Asset();
const auto assetFile = context.OpenAssetFile(std::format("sound/{}", asset->m_name));
const auto* loadedSound = asset.Asset();
const auto assetFile = context.OpenAssetFile(std::format("sound/{}", asset.m_name));
if (!assetFile)
return;

View File

@@ -8,7 +8,6 @@ namespace sound
class LoadedSoundDumperIW4 final : public AbstractAssetDumper<IW4::LoadedSound>
{
protected:
bool ShouldDump(XAssetInfo<IW4::LoadedSound>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::LoadedSound>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::LoadedSound>& asset) override;
};
} // namespace sound

View File

@@ -3,20 +3,13 @@
#include "Sound/SndCurveDumper.h"
#include "Sound/SoundCurveCommon.h"
#include <sstream>
using namespace IW4;
namespace sound_curve
{
bool DumperIW4::ShouldDump(XAssetInfo<SndCurve>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<SndCurve>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<SndCurve>* asset)
{
const auto* sndCurve = asset->Asset();
const auto* sndCurve = asset.Asset();
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(sndCurve->filename));

View File

@@ -8,7 +8,6 @@ namespace sound_curve
class DumperIW4 final : public AbstractAssetDumper<IW4::SndCurve>
{
protected:
bool ShouldDump(XAssetInfo<IW4::SndCurve>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::SndCurve>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::SndCurve>& asset) override;
};
} // namespace sound_curve

View File

@@ -6,15 +6,10 @@ using namespace IW4;
namespace string_table
{
bool DumperIW4::ShouldDump(XAssetInfo<StringTable>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<StringTable>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<StringTable>* asset)
{
const auto* stringTable = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* stringTable = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile)
return;

View File

@@ -8,7 +8,6 @@ namespace string_table
class DumperIW4 final : public AbstractAssetDumper<IW4::StringTable>
{
protected:
bool ShouldDump(XAssetInfo<IW4::StringTable>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::StringTable>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::StringTable>& asset) override;
};
} // namespace string_table

View File

@@ -185,15 +185,10 @@ namespace
namespace structured_data_def
{
bool DumperIW4::ShouldDump(XAssetInfo<StructuredDataDefSet>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<StructuredDataDefSet>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<StructuredDataDefSet>* asset)
{
const auto* set = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* set = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile || set->defs == nullptr)
return;

View File

@@ -11,7 +11,6 @@ namespace structured_data_def
class DumperIW4 final : public AbstractAssetDumper<IW4::StructuredDataDefSet>
{
protected:
bool ShouldDump(XAssetInfo<IW4::StructuredDataDefSet>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::StructuredDataDefSet>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::StructuredDataDefSet>& asset) override;
};
} // namespace structured_data_def

View File

@@ -536,14 +536,9 @@ namespace IW4
namespace techset
{
bool DumperIW4::ShouldDump(XAssetInfo<MaterialTechniqueSet>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<MaterialTechniqueSet>& asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<MaterialTechniqueSet>* asset)
{
const auto* techset = asset->Asset();
const auto* techset = asset.Asset();
const auto techsetFile = context.OpenAssetFile(GetFileNameForTechsetName(techset->name));

View File

@@ -8,7 +8,6 @@ namespace techset
class DumperIW4 final : public AbstractAssetDumper<IW4::MaterialTechniqueSet>
{
protected:
bool ShouldDump(XAssetInfo<IW4::MaterialTechniqueSet>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::MaterialTechniqueSet>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::MaterialTechniqueSet>& asset) override;
};
} // namespace techset

View File

@@ -32,18 +32,18 @@ namespace
}
};
InfoString CreateInfoString(XAssetInfo<TracerDef>* asset)
InfoString CreateInfoString(const XAssetInfo<TracerDef>& asset)
{
InfoStringFromTracerConverter converter(asset->Asset(),
InfoStringFromTracerConverter converter(asset.Asset(),
tracer_fields,
std::extent_v<decltype(tracer_fields)>,
[asset](const scr_string_t scrStr) -> std::string
{
assert(scrStr < asset->m_zone->m_script_strings.Count());
if (scrStr >= asset->m_zone->m_script_strings.Count())
assert(scrStr < asset.m_zone->m_script_strings.Count());
if (scrStr >= asset.m_zone->m_script_strings.Count())
return "";
return asset->m_zone->m_script_strings[scrStr];
return asset.m_zone->m_script_strings[scrStr];
});
return converter.Convert();
@@ -52,24 +52,19 @@ namespace
namespace tracer
{
bool DumperIW4::ShouldDump(XAssetInfo<TracerDef>* asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<TracerDef>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<TracerDef>& asset)
{
// Only dump raw when no gdt available
if (context.m_gdt)
{
const auto infoString = CreateInfoString(asset);
GdtEntry gdtEntry(asset->m_name, ObjConstants::GDF_FILENAME_TRACER);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_TRACER);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_TRACER, gdtEntry);
context.m_gdt->WriteEntry(gdtEntry);
}
else
{
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset->m_name));
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset.m_name));
if (!assetFile)
return;

View File

@@ -9,7 +9,6 @@ namespace tracer
class DumperIW4 final : public AbstractAssetDumper<IW4::TracerDef>
{
protected:
bool ShouldDump(XAssetInfo<IW4::TracerDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::TracerDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::TracerDef>& asset) override;
};
} // namespace tracer

View File

@@ -73,18 +73,18 @@ namespace
}
};
InfoString CreateInfoString(XAssetInfo<VehicleDef>* asset)
InfoString CreateInfoString(const XAssetInfo<VehicleDef>& asset)
{
InfoStringFromVehicleConverter converter(asset->Asset(),
InfoStringFromVehicleConverter converter(asset.Asset(),
vehicle_fields,
std::extent_v<decltype(vehicle_fields)>,
[asset](const scr_string_t scrStr) -> std::string
{
assert(scrStr < asset->m_zone->m_script_strings.Count());
if (scrStr >= asset->m_zone->m_script_strings.Count())
assert(scrStr < asset.m_zone->m_script_strings.Count());
if (scrStr >= asset.m_zone->m_script_strings.Count())
return "";
return asset->m_zone->m_script_strings[scrStr];
return asset.m_zone->m_script_strings[scrStr];
});
return converter.Convert();
@@ -93,24 +93,19 @@ namespace
namespace vehicle
{
bool DumperIW4::ShouldDump(XAssetInfo<VehicleDef>* asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<VehicleDef>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<VehicleDef>& asset)
{
// Only dump raw when no gdt available
if (context.m_gdt)
{
const auto infoString = CreateInfoString(asset);
GdtEntry gdtEntry(asset->m_name, ObjConstants::GDF_FILENAME_VEHICLE);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_VEHICLE);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_VEHICLE, gdtEntry);
context.m_gdt->WriteEntry(gdtEntry);
}
else
{
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset->m_name));
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset.m_name));
if (!assetFile)
return;

View File

@@ -9,7 +9,6 @@ namespace vehicle
class DumperIW4 final : public AbstractAssetDumper<IW4::VehicleDef>
{
protected:
bool ShouldDump(XAssetInfo<IW4::VehicleDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::VehicleDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::VehicleDef>& asset) override;
};
} // namespace vehicle

View File

@@ -353,31 +353,31 @@ namespace
}
}
InfoString CreateInfoString(XAssetInfo<WeaponCompleteDef>* asset)
InfoString CreateInfoString(const XAssetInfo<WeaponCompleteDef>& asset)
{
const auto fullDef = std::make_unique<WeaponFullDef>();
memset(fullDef.get(), 0, sizeof(WeaponFullDef));
CopyToFullDef(asset->Asset(), fullDef.get());
CopyToFullDef(asset.Asset(), fullDef.get());
InfoStringFromWeaponConverter converter(fullDef.get(),
weapon_fields,
std::extent_v<decltype(weapon_fields)>,
[asset](const scr_string_t scrStr) -> std::string
{
assert(scrStr < asset->m_zone->m_script_strings.Count());
if (scrStr >= asset->m_zone->m_script_strings.Count())
assert(scrStr < asset.m_zone->m_script_strings.Count());
if (scrStr >= asset.m_zone->m_script_strings.Count())
return "";
return asset->m_zone->m_script_strings[scrStr];
return asset.m_zone->m_script_strings[scrStr];
});
return converter.Convert();
}
void DumpAccuracyGraphs(AssetDumpingContext& context, XAssetInfo<WeaponCompleteDef>* asset)
void DumpAccuracyGraphs(AssetDumpingContext& context, const XAssetInfo<WeaponCompleteDef>& asset)
{
auto* accuracyGraphWriter = context.GetZoneAssetDumperState<AccuracyGraphWriter>();
const auto weapon = asset->Asset();
const auto weapon = asset.Asset();
const auto* weapDef = weapon->weapDef;
if (!weapDef)
@@ -405,24 +405,19 @@ namespace
namespace weapon
{
bool DumperIW4::ShouldDump(XAssetInfo<WeaponCompleteDef>* asset)
{
return true;
}
void DumperIW4::DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponCompleteDef>* asset)
void DumperIW4::DumpAsset(AssetDumpingContext& context, const XAssetInfo<WeaponCompleteDef>& asset)
{
// Only dump raw when no gdt available
if (context.m_gdt)
{
const auto infoString = CreateInfoString(asset);
GdtEntry gdtEntry(asset->m_name, ObjConstants::GDF_FILENAME_WEAPON);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON, gdtEntry);
context.m_gdt->WriteEntry(gdtEntry);
}
else
{
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset->m_name));
const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset.m_name));
if (!assetFile)
return;

View File

@@ -9,7 +9,6 @@ namespace weapon
class DumperIW4 final : public AbstractAssetDumper<IW4::WeaponCompleteDef>
{
protected:
bool ShouldDump(XAssetInfo<IW4::WeaponCompleteDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<IW4::WeaponCompleteDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::WeaponCompleteDef>& asset) override;
};
} // namespace weapon