feat: add templated iw4 material loading

This commit is contained in:
Jan
2025-06-26 22:25:29 +01:00
parent f897a41188
commit 2073265a86
17 changed files with 1924 additions and 1464 deletions

View File

@ -1,9 +1,22 @@
#include "AssetDumperMaterial.h"
#include "DecompilingMaterialDumperIW4.h"
#include "Game/IW4/Material/JsonMaterialWriterIW4.h"
#include "Game/IW4/Material/MaterialConstantZoneState.h"
#include "Material/MaterialCommon.h"
// #define EXPERIMENTAL_DECOMPILE_MATERIAL 1
using namespace IW4;
void AssetDumperMaterial::DumpPool(AssetDumpingContext& context, AssetPool<Material>* pool)
{
auto* materialConstantState = context.GetZoneAssetDumperState<MaterialConstantZoneState>();
materialConstantState->ExtractNamesFromZone();
AbstractAssetDumper::DumpPool(context, pool);
}
bool AssetDumperMaterial::ShouldDump(XAssetInfo<Material>* asset)
{
return true;
@ -11,10 +24,17 @@ bool AssetDumperMaterial::ShouldDump(XAssetInfo<Material>* asset)
void AssetDumperMaterial::DumpAsset(AssetDumpingContext& context, XAssetInfo<Material>* asset)
{
const auto* material = asset->Asset();
#ifdef EXPERIMENTAL_DECOMPILE_MATERIAL
if (context.m_gdt)
{
DecompileMaterialToGdt(*context.m_gdt, *material, context);
DecompileMaterialToGdt(*context.m_gdt, *asset->Asset(), context);
}
#else
const auto assetFile = context.OpenAssetFile(material::GetFileNameForAssetName(asset->m_name));
if (!assetFile)
return;
DumpMaterialAsJson(*assetFile, *asset->Asset(), context);
#endif
}