summaryrefslogtreecommitdiff
path: root/src/KingSystem/GameData/gdtTriggerParam.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-04-07 17:52:39 +0200
committerLéo Lam <leo@leolam.fr>2021-04-07 17:53:05 +0200
commitcdd2a501a0a1098fdd75e3817c80bc99a4cf7d4e (patch)
tree788a0661061f948081f9bcbc13a826a5f19ef13a /src/KingSystem/GameData/gdtTriggerParam.cpp
parentf49219d33c5f3fe3798f68b3db620708f4566fda (diff)
ksys/gdt: Improve accuracy of getXXXXXFlagAndIdx functions
Diffstat (limited to 'src/KingSystem/GameData/gdtTriggerParam.cpp')
-rw-r--r--src/KingSystem/GameData/gdtTriggerParam.cpp51
1 files changed, 15 insertions, 36 deletions
diff --git a/src/KingSystem/GameData/gdtTriggerParam.cpp b/src/KingSystem/GameData/gdtTriggerParam.cpp
index 3b89cc4b..6243c753 100644
--- a/src/KingSystem/GameData/gdtTriggerParam.cpp
+++ b/src/KingSystem/GameData/gdtTriggerParam.cpp
@@ -108,6 +108,12 @@ inline Flag<T>* getFlag(const sead::PtrArray<FlagBase>& flags, const sead::SafeS
return getFlag<T>(flags, sead::HashCRC32::calcStringHash(name));
}
+template <typename T>
+inline Flag<T>* getFlagAndIndex(s32* idx, const sead::PtrArray<FlagBase>& flags, u32 name_hash) {
+ *idx = getFlagIndex(flags, name_hash);
+ return getFlagByIndex<T>(flags, *idx);
+}
+
template <typename T, typename FlagValueType = T>
inline bool getFlagValue(const sead::PtrArray<FlagBase>& array, T* out_value, s32 index,
bool check_permissions) {
@@ -2018,66 +2024,39 @@ FlagVector4f* TriggerParam::getVec4fFlag(s32 idx) const {
}
FlagBool* TriggerParam::getBoolFlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getBoolIdx(name_hash);
- if (*idx < 0 || mBoolFlags.size() <= *idx)
- return nullptr;
- return getBoolFlag(*idx);
+ return getFlagAndIndex<bool>(idx, mBoolFlags, name_hash);
}
FlagS32* TriggerParam::getS32FlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getS32Idx(name_hash);
- if (*idx < 0 || mS32Flags.size() <= *idx)
- return nullptr;
- return getS32Flag(*idx);
+ return getFlagAndIndex<s32>(idx, mS32Flags, name_hash);
}
FlagF32* TriggerParam::getF32FlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getF32Idx(name_hash);
- if (*idx < 0 || mF32Flags.size() <= *idx)
- return nullptr;
- return getF32Flag(*idx);
+ return getFlagAndIndex<f32>(idx, mF32Flags, name_hash);
}
FlagString* TriggerParam::getStrFlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getStrIdx(name_hash);
- if (*idx < 0 || mStringFlags.size() <= *idx)
- return nullptr;
- return getStrFlag(*idx);
+ return getFlagAndIndex<sead::FixedSafeString<32>>(idx, mStringFlags, name_hash);
}
FlagString64* TriggerParam::getStr64FlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getStr64Idx(name_hash);
- if (*idx < 0 || mString64Flags.size() <= *idx)
- return nullptr;
- return getStr64Flag(*idx);
+ return getFlagAndIndex<sead::FixedSafeString<64>>(idx, mString64Flags, name_hash);
}
FlagString256* TriggerParam::getStr256FlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getStr256Idx(name_hash);
- if (*idx < 0 || mString256Flags.size() <= *idx)
- return nullptr;
- return getStr256Flag(*idx);
+ return getFlagAndIndex<sead::FixedSafeString<256>>(idx, mString256Flags, name_hash);
}
FlagVector2f* TriggerParam::getVec2fFlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getVec2fIdx(name_hash);
- if (*idx < 0 || mVector2fFlags.size() <= *idx)
- return nullptr;
- return getVec2fFlag(*idx);
+ return getFlagAndIndex<sead::Vector2f>(idx, mVector2fFlags, name_hash);
}
FlagVector3f* TriggerParam::getVec3fFlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getVec3fIdx(name_hash);
- if (*idx < 0 || mVector3fFlags.size() <= *idx)
- return nullptr;
- return getVec3fFlag(*idx);
+ return getFlagAndIndex<sead::Vector3f>(idx, mVector3fFlags, name_hash);
}
FlagVector4f* TriggerParam::getVec4fFlagAndIdx(s32* idx, u32 name_hash) const {
- *idx = getVec4fIdx(name_hash);
- if (*idx < 0 || mVector4fFlags.size() <= *idx)
- return nullptr;
- return getVec4fFlag(*idx);
+ return getFlagAndIndex<sead::Vector4f>(idx, mVector4fFlags, name_hash);
}
FlagS32* TriggerParam::getS32FlagByHash(u32 name_hash) const {