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* getFlag(const sead::PtrArray& flags, const sead::SafeS return getFlag(flags, sead::HashCRC32::calcStringHash(name)); } +template +inline Flag* getFlagAndIndex(s32* idx, const sead::PtrArray& flags, u32 name_hash) { + *idx = getFlagIndex(flags, name_hash); + return getFlagByIndex(flags, *idx); +} + template inline bool getFlagValue(const sead::PtrArray& 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(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(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(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>(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>(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>(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(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(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(idx, mVector4fFlags, name_hash); } FlagS32* TriggerParam::getS32FlagByHash(u32 name_hash) const {