From 51314db2f19bb89771e8c2f96c356f3b0d1b1a0a Mon Sep 17 00:00:00 2001 From: elsid Date: Mon, 12 Sep 2022 16:08:26 +0200 Subject: [PATCH] Remove AI_CNDT from AI package types AI_CNDT is a label of subrecord containing cell name. It's not AI package type. --- apps/esmtool/labels.cpp | 17 ++++++++++------- apps/esmtool/labels.hpp | 5 ++++- apps/opencs/model/world/refidadapterimp.hpp | 1 - components/esm3/aipackage.hpp | 7 ++++--- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/apps/esmtool/labels.cpp b/apps/esmtool/labels.cpp index 6bbf680e51..9737511274 100644 --- a/apps/esmtool/labels.cpp +++ b/apps/esmtool/labels.cpp @@ -239,14 +239,17 @@ std::string_view weaponTypeLabel(int idx) return "Invalid"; } -std::string_view aiTypeLabel(int type) +std::string_view aiTypeLabel(ESM::AiPackageType type) { - if (type == ESM::AI_Wander) return "Wander"; - else if (type == ESM::AI_Travel) return "Travel"; - else if (type == ESM::AI_Follow) return "Follow"; - else if (type == ESM::AI_Escort) return "Escort"; - else if (type == ESM::AI_Activate) return "Activate"; - else return "Invalid"; + switch (type) + { + case ESM::AI_Wander: return "Wander"; + case ESM::AI_Travel: return "Travel"; + case ESM::AI_Follow: return "Follow"; + case ESM::AI_Escort: return "Escort"; + case ESM::AI_Activate: return "Activate"; + } + return "Invalid"; } std::string_view magicEffectLabel(int idx) diff --git a/apps/esmtool/labels.hpp b/apps/esmtool/labels.hpp index ef039f3070..2baa8a3fdc 100644 --- a/apps/esmtool/labels.hpp +++ b/apps/esmtool/labels.hpp @@ -2,6 +2,9 @@ #define OPENMW_ESMTOOL_LABELS_H #include +#include + +#include std::string_view bodyPartLabel(int idx); std::string_view meshPartLabel(int idx); @@ -16,7 +19,7 @@ std::string_view weaponTypeLabel(int idx); // This function's a bit different because the types are record types, // not consecutive values. -std::string_view aiTypeLabel(int type); +std::string_view aiTypeLabel(ESM::AiPackageType type); // This one's also a bit different, because it enumerates dialog // select rule functions, not types. Structurally, it still converts diff --git a/apps/opencs/model/world/refidadapterimp.hpp b/apps/opencs/model/world/refidadapterimp.hpp index 97420a3dbd..ab25c87607 100644 --- a/apps/opencs/model/world/refidadapterimp.hpp +++ b/apps/opencs/model/world/refidadapterimp.hpp @@ -1756,7 +1756,6 @@ namespace CSMWorld case ESM::AI_Follow: return 2; case ESM::AI_Escort: return 3; case ESM::AI_Activate: return 4; - case ESM::AI_CNDT: default: return QVariant(); } case 1: // wander dist diff --git a/components/esm3/aipackage.hpp b/components/esm3/aipackage.hpp index 90e1d1cf9e..516c1e6790 100644 --- a/components/esm3/aipackage.hpp +++ b/components/esm3/aipackage.hpp @@ -58,21 +58,22 @@ namespace ESM #pragma pack(pop) - enum + enum AiPackageType : std::uint32_t { AI_Wander = 0x575f4941, AI_Travel = 0x545f4941, AI_Follow = 0x465f4941, AI_Escort = 0x455f4941, AI_Activate = 0x415f4941, - AI_CNDT = 0x54444e43 }; + inline constexpr std::uint32_t AI_CNDT = 0x54444e43; + /// \note Used for storaging packages in a single container /// w/o manual memory allocation accordingly to policy standards struct AIPackage { - int mType; + AiPackageType mType; // Anonymous union union