#pragma once #include #include "Dumping/AbstractAssetDumper.h" #include "Game/IW4/IW4.h" #include "Model/XModel/XModelExportWriter.h" #include "Utils/DistinctMapper.h" namespace IW4 { class AssetDumperXModel final : public AbstractAssetDumper { static void DumpObjLod(AssetDumpingContext& context, XAssetInfo* asset, unsigned lod); static void DumpObjMatMaterial(AssetDumpingContext& context, const Material* material, std::ostream& stream); static void DumpObjMat(AssetDumpingContext& context, XAssetInfo* asset); static void DumpObj(AssetDumpingContext& context, XAssetInfo* asset); static void AddBonesToWriter(const AssetDumpingContext& context, AbstractXModelWriter& writer, const XModel* model); static void AddMaterialsToWriter(AbstractXModelWriter& writer, DistinctMapper& materialMapper, const XModel* model); static void AddObjectsToWriter(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs); static void AddVerticesToWriter(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs); static void AddFacesToWriter(AbstractXModelWriter& writer, const DistinctMapper& materialMapper, const XModelSurfs* modelSurfs, int baseSurfaceIndex); static void DumpXModelExportLod(const AssetDumpingContext& context, XAssetInfo* asset, const unsigned lod); static void DumpXModelExport(const AssetDumpingContext& context, XAssetInfo* asset); protected: bool ShouldDump(XAssetInfo* asset) override; void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; }; }