From a9c693d04df73852f4756345558086f311e0b88d Mon Sep 17 00:00:00 2001 From: Jan Date: Wed, 9 Jul 2025 21:57:22 +0100 Subject: [PATCH] refactor: template remaining xmodel files for iw5,t5,t6 --- src/ObjCommon/Game/IW5/XModel/JsonXModelIW5.h | 32 --------- .../Game/IW5/XModel/XModelConstantsIW5.h | 32 --------- src/ObjCommon/Game/T5/XModel/JsonXModelT5.h | 31 -------- .../Game/T5/XModel/XModelConstantsT5.h | 31 -------- src/ObjCommon/Game/T6/XModel/JsonXModelT6.h | 33 --------- src/ObjCommon/XModel/JsonXModel.h.template | 71 +++++++++++++++++++ .../XModelConstants.h.template} | 30 ++++++-- .../Game/IW5/XModel/LoaderXModelIW5asdf.cpp | 55 -------------- .../Game/IW5/XModel/LoaderXModelIW5asdf.h | 13 ---- .../XModel/XModelDumper.cpp.template | 6 +- 10 files changed, 99 insertions(+), 235 deletions(-) delete mode 100644 src/ObjCommon/Game/IW5/XModel/JsonXModelIW5.h delete mode 100644 src/ObjCommon/Game/IW5/XModel/XModelConstantsIW5.h delete mode 100644 src/ObjCommon/Game/T5/XModel/JsonXModelT5.h delete mode 100644 src/ObjCommon/Game/T5/XModel/XModelConstantsT5.h delete mode 100644 src/ObjCommon/Game/T6/XModel/JsonXModelT6.h create mode 100644 src/ObjCommon/XModel/JsonXModel.h.template rename src/ObjCommon/{Game/T6/XModel/XModelConstantsT6.h => XModel/XModelConstants.h.template} (51%) delete mode 100644 src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.cpp delete mode 100644 src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.h diff --git a/src/ObjCommon/Game/IW5/XModel/JsonXModelIW5.h b/src/ObjCommon/Game/IW5/XModel/JsonXModelIW5.h deleted file mode 100644 index ce7424ff..00000000 --- a/src/ObjCommon/Game/IW5/XModel/JsonXModelIW5.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include "Json/JsonCommon.h" -#include -#include -#include -#include -#include - -namespace IW5 -{ - class JsonXModelLod - { - public: - std::string file; - float distance; - }; - - NLOHMANN_DEFINE_TYPE_EXTENSION(JsonXModelLod, file, distance); - - class JsonXModel - { - public: - std::vector lods; - std::optional collLod; - std::optional physPreset; - std::optional physCollmap; - uint8_t flags; - }; - - NLOHMANN_DEFINE_TYPE_EXTENSION(JsonXModel, lods, collLod, physPreset, physCollmap, flags); -} // namespace IW5 diff --git a/src/ObjCommon/Game/IW5/XModel/XModelConstantsIW5.h b/src/ObjCommon/Game/IW5/XModel/XModelConstantsIW5.h deleted file mode 100644 index a0a129a3..00000000 --- a/src/ObjCommon/Game/IW5/XModel/XModelConstantsIW5.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include "Game/IW5/IW5.h" - -namespace IW5 -{ - inline const char* HITLOC_NAMES[]{ - // clang-format off - "none", - "helmet", - "head", - "neck", - "torso_upper", - "torso_lower", - "right_arm_upper", - "left_arm_upper", - "right_arm_lower", - "left_arm_lower", - "right_hand", - "left_hand", - "right_leg_upper", - "left_leg_upper", - "right_leg_lower", - "left_leg_lower", - "right_foot", - "left_foot", - "gun", - "shield", - // clang-format on - }; - static_assert(std::extent_v == HITLOC_COUNT); -} // namespace IW5 diff --git a/src/ObjCommon/Game/T5/XModel/JsonXModelT5.h b/src/ObjCommon/Game/T5/XModel/JsonXModelT5.h deleted file mode 100644 index 5b52ca9a..00000000 --- a/src/ObjCommon/Game/T5/XModel/JsonXModelT5.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include "Json/JsonCommon.h" -#include -#include -#include -#include - -namespace T5 -{ - class JsonXModelLod - { - public: - std::string file; - float distance; - }; - - NLOHMANN_DEFINE_TYPE_EXTENSION(JsonXModelLod, file, distance); - - class JsonXModel - { - public: - std::vector lods; - std::optional collLod; - std::optional physPreset; - std::optional physConstraints; - unsigned flags; - }; - - NLOHMANN_DEFINE_TYPE_EXTENSION(JsonXModel, lods, collLod, physPreset, physConstraints, flags); -} // namespace T5 diff --git a/src/ObjCommon/Game/T5/XModel/XModelConstantsT5.h b/src/ObjCommon/Game/T5/XModel/XModelConstantsT5.h deleted file mode 100644 index 0481cd27..00000000 --- a/src/ObjCommon/Game/T5/XModel/XModelConstantsT5.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include "Game/T5/T5.h" - -namespace T5 -{ - inline const char* HITLOC_NAMES[]{ - // clang-format off - "none", - "helmet", - "head", - "neck", - "torso_upper", - "torso_lower", - "right_arm_upper", - "left_arm_upper", - "right_arm_lower", - "left_arm_lower", - "right_hand", - "left_hand", - "right_leg_upper", - "left_leg_upper", - "right_leg_lower", - "left_leg_lower", - "right_foot", - "left_foot", - "gun", - // clang-format on - }; - static_assert(std::extent_v == HITLOC_COUNT); -} // namespace T5 diff --git a/src/ObjCommon/Game/T6/XModel/JsonXModelT6.h b/src/ObjCommon/Game/T6/XModel/JsonXModelT6.h deleted file mode 100644 index 79e6eb06..00000000 --- a/src/ObjCommon/Game/T6/XModel/JsonXModelT6.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "Json/JsonCommon.h" -#include -#include -#include -#include - -namespace T6 -{ - class JsonXModelLod - { - public: - std::string file; - float distance; - }; - - NLOHMANN_DEFINE_TYPE_EXTENSION(JsonXModelLod, file, distance); - - class JsonXModel - { - public: - std::vector lods; - std::optional collLod; - std::optional physPreset; - std::optional physConstraints; - unsigned flags; - JsonVec3 lightingOriginOffset; - float lightingOriginRange; - }; - - NLOHMANN_DEFINE_TYPE_EXTENSION(JsonXModel, lods, collLod, physPreset, physConstraints, flags, lightingOriginOffset, lightingOriginRange); -} // namespace T6 diff --git a/src/ObjCommon/XModel/JsonXModel.h.template b/src/ObjCommon/XModel/JsonXModel.h.template new file mode 100644 index 00000000..315960e0 --- /dev/null +++ b/src/ObjCommon/XModel/JsonXModel.h.template @@ -0,0 +1,71 @@ +#options GAME (IW5, T5, T6) + +#filename "Game/" + GAME + "/XModel/JsonXModel" + GAME + ".h" + +#set GAME_HEADER "\"Game/" + GAME + "/" + GAME + ".h\"" + +#if GAME == "IW5" +#define FEATURE_IW5 +#elif GAME == "T5" +#define FEATURE_T5 +#elif GAME == "T6" +#define FEATURE_T6 +#endif + +// This file was templated. +// See JsonXModel.h.template. +// Do not modify, changes will be lost. +#pragma once + +#include "Json/JsonCommon.h" +#include +#include +#include +#include + +namespace GAME +{ + class JsonXModelLod + { + public: + std::string file; + float distance; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION(JsonXModelLod, file, distance); + + class JsonXModel + { + public: + std::vector lods; + std::optional collLod; + std::optional physPreset; +#if defined(FEATURE_IW5) + std::optional physCollmap; +#elif defined(FEATURE_T5) || defined(FEATURE_T6) + std::optional physConstraints; +#endif +#if defined(FEATURE_T6) + JsonVec3 lightingOriginOffset; + float lightingOriginRange; +#endif + unsigned flags; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION( + JsonXModel, + lods, + collLod, + physPreset, +#if defined(FEATURE_IW5) + physCollmap, +#elif defined(FEATURE_T5) || defined(FEATURE_T6) + physConstraints, +#endif +#if defined(FEATURE_T6) + lightingOriginOffset, + lightingOriginRange, +#endif + flags + ); +} // namespace GAME diff --git a/src/ObjCommon/Game/T6/XModel/XModelConstantsT6.h b/src/ObjCommon/XModel/XModelConstants.h.template similarity index 51% rename from src/ObjCommon/Game/T6/XModel/XModelConstantsT6.h rename to src/ObjCommon/XModel/XModelConstants.h.template index e7ae94cd..6f4b5bfe 100644 --- a/src/ObjCommon/Game/T6/XModel/XModelConstantsT6.h +++ b/src/ObjCommon/XModel/XModelConstants.h.template @@ -1,17 +1,36 @@ +#options GAME (IW5, T5, T6) + +#filename "Game/" + GAME + "/XModel/XModelConstants" + GAME + ".h" + +#set GAME_HEADER "\"Game/" + GAME + "/" + GAME + ".h\"" + +#if GAME == "IW5" +#define FEATURE_IW5 +#elif GAME == "T5" +#define FEATURE_T5 +#elif GAME == "T6" +#define FEATURE_T6 +#endif + +// This file was templated. +// See JsonXModel.h.template. +// Do not modify, changes will be lost. #pragma once -#include "Game/T6/T6.h" +#set GAME_HEADER "\"Game/" + GAME + "/" + GAME + ".h\"" +#include GAME_HEADER -namespace T6 +namespace GAME { inline const char* HITLOC_NAMES[]{ - // clang-format off "none", "helmet", "head", "neck", "torso_upper", +#if defined(FEATURE_T6) "torso_middle", +#endif "torso_lower", "right_arm_upper", "left_arm_upper", @@ -26,8 +45,9 @@ namespace T6 "right_foot", "left_foot", "gun", +#if defined(FEATURE_IW5) || defined(FEATURE_T6) "shield", - // clang-format on +#endif }; static_assert(std::extent_v == HITLOC_COUNT); -} // namespace T6 +} // namespace GAME diff --git a/src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.cpp b/src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.cpp deleted file mode 100644 index 973d59f3..00000000 --- a/src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// #include "LoaderXModelIW5.h" - -// #include "Game/IW5/IW5.h" -// #include "Game/IW5/XModel/XModelLoaderIW5.h" -// #include "Pool/GlobalAssetPool.h" - -// #include -// #include -// #include - -// using namespace IW5; - -// namespace -// { -// class XModelLoader final : public AssetCreator -// { -// public: -// XModelLoader(MemoryManager& memory, ISearchPath& searchPath) -// : m_memory(memory), -// m_search_path(searchPath) -// { -// } - -// AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override -// { -// const auto file = m_search_path.Open(std::format("xmodel/{}.json", assetName)); -// if (!file.IsOpen()) -// return AssetCreationResult::NoAction(); - -// auto* xmodel = m_memory.Alloc(); -// xmodel->name = m_memory.Dup(assetName.c_str()); - -// AssetRegistration registration(assetName, xmodel); -// if (!LoadXModel(*file.m_stream, *xmodel, m_memory, context, registration)) -// { -// std::cerr << std::format("Failed to load xmodel \"{}\"\n", assetName); -// return AssetCreationResult::Failure(); -// } - -// return AssetCreationResult::Success(context.AddAsset(std::move(registration))); -// } - -// private: -// MemoryManager& m_memory; -// ISearchPath& m_search_path; -// }; -// } // namespace - -// namespace IW5 -// { -// std::unique_ptr> CreateXModelLoader(MemoryManager& memory, ISearchPath& searchPath) -// { -// return std::make_unique(memory, searchPath); -// } -// } // namespace IW5 diff --git a/src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.h b/src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.h deleted file mode 100644 index 3d656f21..00000000 --- a/src/ObjLoading/Game/IW5/XModel/LoaderXModelIW5asdf.h +++ /dev/null @@ -1,13 +0,0 @@ -// #pragma once - -// #include "Asset/IAssetCreator.h" -// #include "Game/IW5/IW5.h" -// #include "SearchPath/ISearchPath.h" -// #include "Utils/MemoryManager.h" - -// #include - -// namespace IW5 -// { -// std::unique_ptr> CreateXModelLoader(MemoryManager& memory, ISearchPath& searchPath); -// } // namespace IW5 diff --git a/src/ObjWriting/XModel/XModelDumper.cpp.template b/src/ObjWriting/XModel/XModelDumper.cpp.template index fee67d24..7759f92a 100644 --- a/src/ObjWriting/XModel/XModelDumper.cpp.template +++ b/src/ObjWriting/XModel/XModelDumper.cpp.template @@ -66,7 +66,7 @@ namespace { MaterialTextureDef* def = &material->textureTable[textureIndex]; -#ifdef FEATURE_IW5 +#if defined(FEATURE_IW5) if (def->semantic == TS_COLOR_MAP) potentialTextureDefs.push_back(def); #else @@ -155,7 +155,7 @@ namespace bool GetSurfaces(const XModel* model, const unsigned lod, XSurface*& surfs, unsigned& surfCount) { -#ifdef FEATURE_IW5 +#if defined(FEATURE_IW5) if (!model->lodInfo[lod].modelSurfs || !model->lodInfo[lod].modelSurfs->surfs) return false; @@ -722,7 +722,7 @@ namespace if (xmodel.physPreset && xmodel.physPreset->name) jXModel.physPreset = AssetName(xmodel.physPreset->name); -#ifdef FEATURE_IW5 +#if defined(FEATURE_IW5) if (xmodel.physCollmap && xmodel.physCollmap->name) jXModel.physCollmap = AssetName(xmodel.physCollmap->name); #endif