2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-02-14 19:33:02 +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

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

View File

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

View File

@@ -78,18 +78,13 @@ namespace
namespace font_icon
{
bool JsonDumperT6::ShouldDump(XAssetInfo<FontIcon>* asset)
void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<FontIcon>& asset)
{
return true;
}
void JsonDumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<FontIcon>* asset)
{
const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAssetName(asset->m_name));
const auto assetFile = context.OpenAssetFile(GetJsonFileNameForAssetName(asset.m_name));
if (!assetFile)
return;
DumpFontIcon(*assetFile, *asset->Asset());
DumpFontIcon(*assetFile, *asset.Asset());
}
} // namespace font_icon

View File

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

View File

@@ -94,19 +94,14 @@ namespace image
}
}
bool DumperT6::ShouldDump(XAssetInfo<GfxImage>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<GfxImage>& asset)
{
return true;
}
void DumperT6::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
DumperT6();
protected:
bool ShouldDump(XAssetInfo<T6::GfxImage>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::GfxImage>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::GfxImage>& asset) override;
private:
std::unique_ptr<IImageWriter> m_writer;

View File

@@ -98,19 +98,14 @@ namespace
namespace leaderboard
{
bool JsonDumperT6::ShouldDump(XAssetInfo<LeaderboardDef>* asset)
void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<LeaderboardDef>& asset)
{
return true;
}
void JsonDumperT6::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 JsonDumperT6 final : public AbstractAssetDumper<T6::LeaderboardDef>
{
protected:
[[nodiscard]] bool ShouldDump(XAssetInfo<T6::LeaderboardDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::LeaderboardDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::LeaderboardDef>& asset) override;
};
} // namespace leaderboard

View File

@@ -11,9 +11,14 @@ using namespace T6;
namespace localize
{
void DumperT6::DumpPool(AssetDumpingContext& context, AssetPool<LocalizeEntry>* pool)
size_t DumperT6::GetProgressTotalCount(const AssetPool<T6::LocalizeEntry>& pool) const
{
if (pool->m_asset_lookup.empty())
return pool.m_asset_lookup.empty() ? 0uz : 1uz;
}
void DumperT6::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 +35,7 @@ namespace localize
stringFileDumper.SetNotes("");
for (auto* localizeEntry : *pool)
for (const auto* localizeEntry : pool)
{
stringFileDumper.WriteLocalizeEntry(localizeEntry->m_name, localizeEntry->Asset()->value);
}
@@ -41,5 +46,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 DumperT6 final : public IAssetDumper<T6::LocalizeEntry>
{
public:
void DumpPool(AssetDumpingContext& context, AssetPool<T6::LocalizeEntry>* pool) override;
[[nodiscard]] size_t GetProgressTotalCount(const AssetPool<T6::LocalizeEntry>& pool) const override;
void DumpPool(AssetDumpingContext& context, const AssetPool<T6::LocalizeEntry>& pool) override;
};
} // namespace localize

View File

@@ -6,14 +6,9 @@ using namespace T6;
namespace map_ents
{
bool DumperT6::ShouldDump(XAssetInfo<MapEnts>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<MapEnts>& asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<MapEnts>* asset)
{
const auto* mapEnts = asset->Asset();
const auto* mapEnts = asset.Asset();
const auto mapEntsFile = context.OpenAssetFile(std::format("{}.ents", mapEnts->name));

View File

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

View File

@@ -27,6 +27,8 @@
#include "Weapon/WeaponDumperT6.h"
#include "ZBarrier/ZBarrierDumperT6.h"
#include <functional>
using namespace T6;
bool ObjWriter::DumpZone(AssetDumpingContext& context) const
@@ -35,17 +37,32 @@ 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 GameAssetPoolT6* funcPools) \
{ \
dumperType dumper; \
dumper.DumpPool(funcContext, *funcPools->poolName); \
}); \
}
#define DUMP_ASSET_POOL_WITH_FACTORY(createDumper, poolName, assetType) \
if (assetPools->poolName && ObjWriting::ShouldHandleAssetType(assetType)) \
{ \
const auto dumper = createDumper; \
dumper->DumpPool(context, assetPools->poolName.get()); \
auto dumper = createDumper; \
totalProgress += dumper->GetProgressTotalCount(*assetPools->poolName); \
dumpingFunctions.emplace_back( \
[](AssetDumpingContext& funcContext, const GameAssetPoolT6* funcPools) \
{ \
auto dumper = createDumper; \
dumper->DumpPool(funcContext, *funcPools->poolName); \
}); \
}
const auto* assetPools = dynamic_cast<GameAssetPoolT6*>(context.m_zone.m_pools.get());
size_t totalProgress = 0uz;
std::vector<std::function<void(AssetDumpingContext & context, const GameAssetPoolT6*)>> dumpingFunctions;
DUMP_ASSET_POOL(phys_preset::InfoStringDumperT6, m_phys_preset, ASSET_TYPE_PHYSPRESET)
DUMP_ASSET_POOL(phys_constraints::InfoStringDumperT6, m_phys_constraints, ASSET_TYPE_PHYSCONSTRAINTS)
// DUMP_ASSET_POOL(AssetDumperDestructibleDef, m_destructible_def, ASSET_TYPE_DESTRUCTIBLEDEF)
@@ -95,6 +112,10 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const
// DUMP_ASSET_POOL(AssetDumperFootstepFXTableDef, m_footstep_fx_table, ASSET_TYPE_FOOTSTEPFX_TABLE)
DUMP_ASSET_POOL(z_barrier::DumperT6, m_zbarrier, ASSET_TYPE_ZBARRIER)
context.SetTotalProgress(totalProgress);
for (const auto& func : dumpingFunctions)
func(context, assetPools);
return true;
#undef DUMP_ASSET_POOL

View File

@@ -39,20 +39,20 @@ namespace
}
};
InfoString CreateInfoString(XAssetInfo<PhysConstraints>* asset)
InfoString CreateInfoString(const XAssetInfo<PhysConstraints>& asset)
{
assert(asset->Asset()->count <= 4);
assert(asset.Asset()->count <= 4);
InfoStringFromPhysConstraintsConverter converter(asset->Asset(),
InfoStringFromPhysConstraintsConverter converter(asset.Asset(),
phys_constraints_fields,
std::extent_v<decltype(phys_constraints_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();
@@ -61,24 +61,19 @@ namespace
namespace phys_constraints
{
bool InfoStringDumperT6::ShouldDump(XAssetInfo<PhysConstraints>* asset)
{
return true;
}
void InfoStringDumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<PhysConstraints>* asset)
void InfoStringDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<PhysConstraints>& 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_CONSTRAINTS);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_PHYS_CONSTRAINTS);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_PHYS_CONSTRAINTS, 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_constraints
class InfoStringDumperT6 final : public AbstractAssetDumper<T6::PhysConstraints>
{
protected:
bool ShouldDump(XAssetInfo<T6::PhysConstraints>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::PhysConstraints>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::PhysConstraints>& asset) override;
};
} // namespace phys_constraints

View File

@@ -59,21 +59,21 @@ namespace
physPresetInfo->buoyancyBoxMax = physPreset->buoyancyBoxMax;
}
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();
@@ -82,24 +82,19 @@ namespace
namespace phys_preset
{
bool InfoStringDumperT6::ShouldDump(XAssetInfo<PhysPreset>* asset)
{
return true;
}
void InfoStringDumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<PhysPreset>* asset)
void InfoStringDumperT6::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 InfoStringDumperT6 final : public AbstractAssetDumper<T6::PhysPreset>
{
protected:
bool ShouldDump(XAssetInfo<T6::PhysPreset>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::PhysPreset>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::PhysPreset>& asset) override;
};
} // namespace phys_preset

View File

@@ -4,15 +4,10 @@ using namespace T6;
namespace qdb
{
bool DumperT6::ShouldDump(XAssetInfo<Qdb>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<Qdb>& asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<Qdb>* asset)
{
const auto* qdb = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* qdb = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile)
return;

View File

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

View File

@@ -14,9 +14,9 @@ namespace
{
constexpr size_t ANIMTREE_MAX_SIZE = 0xC000000;
void DumpAnimtree(AssetDumpingContext& context, XAssetInfo<RawFile>* asset, std::ostream& stream)
void DumpAnimtree(AssetDumpingContext& context, const XAssetInfo<RawFile>& asset, std::ostream& stream)
{
const auto* rawFile = asset->Asset();
const auto* rawFile = asset.Asset();
if (rawFile->len <= 4)
{
@@ -77,15 +77,10 @@ namespace
namespace raw_file
{
bool DumperT6::ShouldDump(XAssetInfo<RawFile>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<RawFile>& asset)
{
return true;
}
void DumperT6::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 DumperT6 final : public AbstractAssetDumper<T6::RawFile>
{
protected:
bool ShouldDump(XAssetInfo<T6::RawFile>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::RawFile>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::RawFile>& asset) override;
};
} // namespace raw_file

View File

@@ -4,15 +4,10 @@ using namespace T6;
namespace script
{
bool DumperT6::ShouldDump(XAssetInfo<ScriptParseTree>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<ScriptParseTree>& asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<ScriptParseTree>* asset)
{
const auto* scriptParseTree = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* scriptParseTree = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile)
return;

View File

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

View File

@@ -4,15 +4,10 @@ using namespace T6;
namespace slug
{
bool DumperT6::ShouldDump(XAssetInfo<Slug>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<Slug>& asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<Slug>* asset)
{
const auto* slug = asset->Asset();
const auto assetFile = context.OpenAssetFile(asset->m_name);
const auto* slug = asset.Asset();
const auto assetFile = context.OpenAssetFile(asset.m_name);
if (!assetFile)
return;

View File

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

View File

@@ -914,16 +914,23 @@ namespace
namespace sound
{
void SndBankDumperT6::DumpPool(AssetDumpingContext& context, AssetPool<SndBank>* pool)
size_t SndBankDumperT6::GetProgressTotalCount(const AssetPool<SndBank>& pool) const
{
return pool.m_asset_lookup.size();
}
void SndBankDumperT6::DumpPool(AssetDumpingContext& context, const AssetPool<SndBank>& pool)
{
LoadedSoundBankHashes soundBankHashes;
soundBankHashes.Initialize();
for (const auto* assetInfo : *pool)
for (const auto* assetInfo : pool)
{
if (!assetInfo->m_name.empty() && assetInfo->m_name[0] == ',')
continue;
DumpSndBank(context, soundBankHashes, *assetInfo);
context.IncrementProgress();
}
}
} // namespace sound

View File

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

View File

@@ -108,9 +108,9 @@ namespace
{
}
void DumpPool(AssetPool<SndDriverGlobals>* pool)
void DumpPool(const AssetPool<SndDriverGlobals>& pool)
{
for (const auto* assetInfo : *pool)
for (const auto* assetInfo : pool)
{
if (!assetInfo->m_name.empty() && assetInfo->m_name[0] == ',')
continue;
@@ -385,9 +385,16 @@ namespace
namespace sound
{
void SndDriverGlobalsDumperT6::DumpPool(AssetDumpingContext& context, AssetPool<SndDriverGlobals>* pool)
size_t SndDriverGlobalsDumperT6::GetProgressTotalCount(const AssetPool<T6::SndDriverGlobals>& pool) const
{
return pool.m_asset_lookup.empty() ? 0uz : 1uz;
}
void SndDriverGlobalsDumperT6::DumpPool(AssetDumpingContext& context, const AssetPool<SndDriverGlobals>& pool)
{
Internal internal(context);
internal.DumpPool(pool);
context.IncrementProgress();
}
} // namespace sound

View File

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

View File

@@ -6,15 +6,10 @@ using namespace T6;
namespace string_table
{
bool DumperT6::ShouldDump(XAssetInfo<StringTable>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<StringTable>& asset)
{
return true;
}
void DumperT6::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 DumperT6 final : public AbstractAssetDumper<T6::StringTable>
{
protected:
bool ShouldDump(XAssetInfo<T6::StringTable>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::StringTable>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::StringTable>& asset) override;
};
} // namespace string_table

View File

@@ -77,14 +77,9 @@ namespace
namespace techset
{
bool DumperT6::ShouldDump(XAssetInfo<MaterialTechniqueSet>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<MaterialTechniqueSet>& asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<MaterialTechniqueSet>* asset)
{
const auto* techniqueSet = asset->Asset();
const auto* techniqueSet = asset.Asset();
auto* shaderState = context.GetZoneAssetDumperState<ShaderZoneState>();
for (const auto* technique : techniqueSet->techniques)

View File

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

View File

@@ -40,18 +40,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();
@@ -60,24 +60,19 @@ namespace
namespace tracer
{
bool DumperT6::ShouldDump(XAssetInfo<TracerDef>* asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<TracerDef>* asset)
void DumperT6::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 DumperT6 final : public AbstractAssetDumper<T6::TracerDef>
{
protected:
bool ShouldDump(XAssetInfo<T6::TracerDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::TracerDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::TracerDef>& asset) override;
};
} // namespace tracer

View File

@@ -91,18 +91,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();
@@ -111,24 +111,19 @@ namespace
namespace vehicle
{
bool DumperT6::ShouldDump(XAssetInfo<VehicleDef>* asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<VehicleDef>* asset)
void DumperT6::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 DumperT6 final : public AbstractAssetDumper<T6::VehicleDef>
{
protected:
bool ShouldDump(XAssetInfo<T6::VehicleDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::VehicleDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::VehicleDef>& asset) override;
};
} // namespace vehicle

View File

@@ -47,18 +47,18 @@ namespace
}
};
InfoString CreateInfoString(XAssetInfo<WeaponAttachment>* asset)
InfoString CreateInfoString(const XAssetInfo<WeaponAttachment>& asset)
{
InfoStringFromAttachmentConverter converter(asset->Asset(),
InfoStringFromAttachmentConverter converter(asset.Asset(),
attachment_fields,
std::extent_v<decltype(attachment_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();
@@ -67,24 +67,19 @@ namespace
namespace attachment
{
bool DumperT6::ShouldDump(XAssetInfo<WeaponAttachment>* asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponAttachment>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<WeaponAttachment>& 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_ATTACHMENT);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON_ATTACHMENT);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT, gdtEntry);
context.m_gdt->WriteEntry(gdtEntry);
}
else
{
const auto assetFile = context.OpenAssetFile(GetInfoStringFileNameForAssetName(asset->m_name));
const auto assetFile = context.OpenAssetFile(GetInfoStringFileNameForAssetName(asset.m_name));
if (!assetFile)
return;

View File

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

View File

@@ -107,22 +107,22 @@ namespace
}
}
InfoString CreateInfoString(XAssetInfo<WeaponAttachmentUnique>* asset)
InfoString CreateInfoString(const XAssetInfo<WeaponAttachmentUnique>& asset)
{
const auto fullDef = std::make_unique<WeaponAttachmentUniqueFull>();
memset(fullDef.get(), 0, sizeof(WeaponAttachmentUniqueFull));
CopyToFullDef(asset->Asset(), fullDef.get());
CopyToFullDef(asset.Asset(), fullDef.get());
InfoStringFromWeaponAttachmentUniqueConverter converter(fullDef.get(),
attachment_unique_fields,
std::extent_v<decltype(attachment_unique_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();
@@ -131,24 +131,19 @@ namespace
namespace attachment_unique
{
bool DumperT6::ShouldDump(XAssetInfo<WeaponAttachmentUnique>* asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponAttachmentUnique>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<WeaponAttachmentUnique>& 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_ATTACHMENT_UNIQUE);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON_ATTACHMENT_UNIQUE);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE, 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 attachment_unique
class DumperT6 final : public AbstractAssetDumper<T6::WeaponAttachmentUnique>
{
protected:
bool ShouldDump(XAssetInfo<T6::WeaponAttachmentUnique>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::WeaponAttachmentUnique>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::WeaponAttachmentUnique>& asset) override;
};
} // namespace attachment_unique

View File

@@ -104,20 +104,15 @@ namespace
namespace camo
{
bool JsonDumperT6::ShouldDump(XAssetInfo<WeaponCamo>* asset)
void JsonDumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<WeaponCamo>& asset)
{
return true;
}
void JsonDumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponCamo>* asset)
{
const auto fileName = GetJsonFileNameForAssetName(asset->m_name);
const auto fileName = GetJsonFileNameForAssetName(asset.m_name);
const auto assetFile = context.OpenAssetFile(fileName);
if (!assetFile)
return;
const JsonDumperImpl dumper(*assetFile);
dumper.Dump(asset->Asset());
dumper.Dump(asset.Asset());
}
} // namespace camo

View File

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

View File

@@ -409,31 +409,31 @@ namespace
}
}
InfoString CreateInfoString(XAssetInfo<WeaponVariantDef>* asset)
InfoString CreateInfoString(const XAssetInfo<WeaponVariantDef>& 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<WeaponVariantDef>* asset)
void DumpAccuracyGraphs(AssetDumpingContext& context, const XAssetInfo<WeaponVariantDef>& asset)
{
auto* accuracyGraphWriter = context.GetZoneAssetDumperState<AccuracyGraphWriter>();
const auto weapon = asset->Asset();
const auto weapon = asset.Asset();
const auto* weapDef = weapon->weapDef;
if (!weapDef)
@@ -461,24 +461,19 @@ namespace
namespace weapon
{
bool DumperT6::ShouldDump(XAssetInfo<WeaponVariantDef>* asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<WeaponVariantDef>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<WeaponVariantDef>& 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

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

View File

@@ -30,18 +30,18 @@ namespace
}
};
InfoString CreateInfoString(XAssetInfo<ZBarrierDef>* asset)
InfoString CreateInfoString(const XAssetInfo<ZBarrierDef>& asset)
{
InfoStringFromZBarrierConverter converter(asset->Asset(),
InfoStringFromZBarrierConverter converter(asset.Asset(),
zbarrier_fields,
std::extent_v<decltype(zbarrier_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();
@@ -50,24 +50,19 @@ namespace
namespace z_barrier
{
bool DumperT6::ShouldDump(XAssetInfo<ZBarrierDef>* asset)
{
return true;
}
void DumperT6::DumpAsset(AssetDumpingContext& context, XAssetInfo<ZBarrierDef>* asset)
void DumperT6::DumpAsset(AssetDumpingContext& context, const XAssetInfo<ZBarrierDef>& 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_ZBARRIER);
GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_ZBARRIER);
infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_ZBARRIER, 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 z_barrier
class DumperT6 final : public AbstractAssetDumper<T6::ZBarrierDef>
{
protected:
bool ShouldDump(XAssetInfo<T6::ZBarrierDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, XAssetInfo<T6::ZBarrierDef>* asset) override;
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::ZBarrierDef>& asset) override;
};
} // namespace z_barrier