From fc8d4b5c683694c3287ef13975d2f231822287c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sun, 13 Feb 2022 01:16:38 +0100 Subject: [PATCH] Fix matching issue in ksys::phys::motionTypeFromText --- data/uking_functions.csv | 2 +- src/KingSystem/Physics/System/physDefines.cpp | 24 ++++++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index f3d665f8..daaf19b1 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -84347,7 +84347,7 @@ Address,Quality,Size,Name 0x0000007100fd0690,U,000004,nullsub_4261 0x0000007100fd0694,U,000004,j__ZdlPv_1015 0x0000007100fd0698,U,000004,j__ZdlPv_1016 -0x0000007100fd069c,m,000372,_ZN4ksys4phys18motionTypeFromTextERKN4sead14SafeStringBaseIcEE +0x0000007100fd069c,O,000372,_ZN4ksys4phys18motionTypeFromTextERKN4sead14SafeStringBaseIcEE 0x0000007100fd0810,U,000092, 0x0000007100fd086c,U,000356, 0x0000007100fd09d0,U,000076, diff --git a/src/KingSystem/Physics/System/physDefines.cpp b/src/KingSystem/Physics/System/physDefines.cpp index 2b75af66..5f505dc6 100644 --- a/src/KingSystem/Physics/System/physDefines.cpp +++ b/src/KingSystem/Physics/System/physDefines.cpp @@ -84,17 +84,23 @@ WallCode wallCodeFromText(const sead::SafeString& text) { return 0; } -// duplicated branches? -#ifdef NON_MATCHING MotionType motionTypeFromText(const sead::SafeString& text) { - if (text == "Dynamic") - return MotionType::Dynamic; - if (text == "Fixed") - return MotionType::Fixed; - if (text == "Keyframed") - return MotionType::Keyframed; + static constexpr const char* texts[] = { + "Dynamic", + "Fixed", + "Keyframed", + }; + static_assert(int(MotionType::Dynamic) == 0); + static_assert(int(MotionType::Fixed) == 1); + static_assert(int(MotionType::Keyframed) == 2); + + int type = 0; + for (const char* type_text : texts) { + if (text == type_text) + return static_cast(type); + ++type; + } return MotionType::Unknown; } -#endif } // namespace ksys::phys