mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
Only dump model surfs once for iw5 as well
This commit is contained in:
parent
30870c5e07
commit
2ec65924c6
@ -11,6 +11,24 @@
|
||||
|
||||
using namespace IW5;
|
||||
|
||||
namespace IW5
|
||||
{
|
||||
class SurfsDumpingZoneState final : public IZoneAssetDumperState
|
||||
{
|
||||
std::set<const XModelSurfs*> m_dumped_surfs;
|
||||
|
||||
public:
|
||||
bool ShouldDumpTechnique(const XModelSurfs* surfs)
|
||||
{
|
||||
if (m_dumped_surfs.find(surfs) != m_dumped_surfs.end())
|
||||
return false;
|
||||
|
||||
m_dumped_surfs.emplace(surfs);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
bool AssetDumperXModel::ShouldDump(XAssetInfo<XModel>* asset)
|
||||
{
|
||||
return !asset->m_name.empty() && asset->m_name[0] != ',';
|
||||
@ -234,10 +252,14 @@ void AssetDumperXModel::DumpObjLod(const AssetDumpingContext& context, XAssetInf
|
||||
void AssetDumperXModel::DumpObj(AssetDumpingContext& context, XAssetInfo<XModel>* asset)
|
||||
{
|
||||
const auto* model = asset->Asset();
|
||||
auto* surfZoneState = context.GetZoneAssetDumperState<SurfsDumpingZoneState>();
|
||||
|
||||
DumpObjMat(context, asset);
|
||||
for (auto currentLod = 0u; currentLod < model->numLods; currentLod++)
|
||||
{
|
||||
if (!model->lodInfo[currentLod].modelSurfs || !surfZoneState->ShouldDumpTechnique(model->lodInfo[currentLod].modelSurfs))
|
||||
continue;
|
||||
|
||||
DumpObjLod(context, asset, currentLod);
|
||||
}
|
||||
}
|
||||
@ -592,11 +614,14 @@ void AssetDumperXModel::DumpXModelExportLod(const AssetDumpingContext& context,
|
||||
writer->Write(*assetFile);
|
||||
}
|
||||
|
||||
void AssetDumperXModel::DumpXModelExport(const AssetDumpingContext& context, XAssetInfo<XModel>* asset)
|
||||
void AssetDumperXModel::DumpXModelExport(AssetDumpingContext& context, XAssetInfo<XModel>* asset)
|
||||
{
|
||||
auto* surfZoneState = context.GetZoneAssetDumperState<SurfsDumpingZoneState>();
|
||||
const auto* model = asset->Asset();
|
||||
for (auto currentLod = 0u; currentLod < model->numLods; currentLod++)
|
||||
{
|
||||
if (!model->lodInfo[currentLod].modelSurfs || !surfZoneState->ShouldDumpTechnique(model->lodInfo[currentLod].modelSurfs))
|
||||
continue;
|
||||
DumpXModelExportLod(context, asset, currentLod);
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ namespace IW5
|
||||
static void AddXModelVertexBoneWeights(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs, XModelVertexBoneWeightCollection& weightCollection);
|
||||
static void AddXModelFaces(AbstractXModelWriter& writer, const DistinctMapper<Material*>& materialMapper, const XModelSurfs* modelSurfs, int baseSurfaceIndex);
|
||||
static void DumpXModelExportLod(const AssetDumpingContext& context, XAssetInfo<XModel>* asset, unsigned lod);
|
||||
static void DumpXModelExport(const AssetDumpingContext& context, XAssetInfo<XModel>* asset);
|
||||
static void DumpXModelExport(AssetDumpingContext& context, XAssetInfo<XModel>* asset);
|
||||
|
||||
protected:
|
||||
bool ShouldDump(XAssetInfo<XModel>* asset) override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user