ksys/gdt: Fix "no check, force" setters for vector flags

And add the other setters to the CSV.
This commit is contained in:
Léo Lam 2020-11-10 02:38:49 +01:00
parent 9b516acad0
commit 8fd9863e1a
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
2 changed files with 107 additions and 61 deletions

View File

@ -11003,7 +11003,7 @@
0x00000071001ab258,sub_71001AB258,856,
0x00000071001ab5b0,sub_71001AB5B0,344,
0x00000071001ab708,sub_71001AB708,384,
0x00000071001ab888,GameDataMgr::setS32ByIdx,196,
0x00000071001ab888,GameDataMgr::setS32ByIdx,196,_ZN4ksys3gdt7Manager6setS32EiNS0_10FlagHandleE
0x00000071001ab94c,sub_71001AB94C,324,
0x00000071001aba90,sub_71001ABA90,316,
0x00000071001abbcc,sub_71001ABBCC,56,
@ -39388,7 +39388,7 @@
0x0000007100678954,MotorcycleMgr::init,468,
0x0000007100678b28,MotorcycleMgr::clampMotorcycleEnergy,172,
0x0000007100678e80,MotorcycleMgr::updateSpawnMotorcycle,1664,
0x0000007100679500,GameDataMgr::setFloatByIter,196,
0x0000007100679500,GameDataMgr::setFloatByIter,196,_ZN4ksys3gdt7Manager6setF32EfNS0_10FlagHandleE
0x00000071006795c4,MotorcycleMgr::checkUsableForSoundEffectAndMarker,308,
0x00000071006796f8,MotorcycleMgr::hasHavokQueryStarted,16,
0x0000007100679708,MotorcycleMgr::x_1,904,
@ -39550,7 +39550,7 @@
0x0000007100683698,sub_7100683698,56,
0x00000071006836d0,WolfLinkMgr::postCalc,672,
0x0000007100683970,sub_7100683970,428,
0x0000007100683b1c,GameDataMgr::setVec3ByIdx,196,
0x0000007100683b1c,GameDataMgr::setVec3ByIdx,196,_ZN4ksys3gdt7Manager8setVec3fERKN4sead7Vector3IfEENS0_10FlagHandleE
0x0000007100683be0,sub_7100683BE0,48,
0x0000007100683c10,sub_7100683C10,92,
0x0000007100683c6c,sinitWolfLinkFlags,476,
@ -53006,24 +53006,29 @@
0x00000071008ff4a8,sub_71008FF4A8,84,
0x00000071008ff4fc,sub_71008FF4FC,272,
0x00000071008ff60c,sub_71008FF60C,308,
0x00000071008ff740,GameDataMgr::setBoolByIdx,236,
0x00000071008ff82c,GameDataMgr::setS32ByIdxForce,236,
0x00000071008ff918,GameDataMgr::setFloatByIdx,236,
0x00000071008ffa04,GameDataMgr::x,236,
0x00000071008ffbb4,sub_71008FFBB4,236,
0x00000071008ffca0,GameDataMgr::setString64ByIdx,196,
0x00000071008ffd64,GameDataMgr::setString256ByIdx,236,
0x00000071008fff14,sub_71008FFF14,240,
0x0000007100900004,sub_7100900004,252,
0x00000071009001d0,sub_71009001D0,252,
0x00000071009002cc,GameDataMgr::x_0,208,
0x000000710090039c,GameDataMgr::__auto2,216,
0x0000007100900474,sub_7100900474,252,
0x0000007100900570,GameDataMgr::__auto0,208,
0x0000007100900640,sub_7100900640,252,
0x000000710090073c,sub_710090073C,208,
0x000000710090080c,sub_710090080C,252,
0x00000071009009d8,sub_71009009D8,264,
0x00000071008ff740,GameDataMgr::setBoolByIdx,236,_ZN4ksys3gdt7Manager19setBoolNoCheckForceEbNS0_10FlagHandleE
0x00000071008ff82c,GameDataMgr::setS32ByIdxForce,236,_ZN4ksys3gdt7Manager18setS32NoCheckForceEiNS0_10FlagHandleE
0x00000071008ff918,GameDataMgr::setFloatByIdx,236,_ZN4ksys3gdt7Manager18setF32NoCheckForceEfNS0_10FlagHandleE
0x00000071008ffa04,GameDataMgr::x,236,_ZN4ksys3gdt7Manager18setStrNoCheckForceEPKcNS0_10FlagHandleE
0x00000071008ffaf0,_ZN4ksys3gdt7Manager6setStrEPKcNS0_10FlagHandleE,0xc4,_ZN4ksys3gdt7Manager6setStrEPKcNS0_10FlagHandleE
0x00000071008ffbb4,sub_71008FFBB4,236,_ZN4ksys3gdt7Manager20setStr64NoCheckForceEPKcNS0_10FlagHandleE
0x00000071008ffca0,GameDataMgr::setString64ByIdx,196,_ZN4ksys3gdt7Manager8setStr64EPKcNS0_10FlagHandleE
0x00000071008ffd64,GameDataMgr::setString256ByIdx,236,_ZN4ksys3gdt7Manager21setStr256NoCheckForceEPKcNS0_10FlagHandleE
0x00000071008ffe50,_ZN4ksys3gdt7Manager9setStr256EPKcNS0_10FlagHandleE,0xc4,_ZN4ksys3gdt7Manager9setStr256EPKcNS0_10FlagHandleE
0x00000071008fff14,sub_71008FFF14,240,_ZN4ksys3gdt7Manager20setVec3fNoCheckForceEN4sead7Vector3IfEENS0_10FlagHandleE
0x0000007100900004,sub_7100900004,252,_ZN4ksys3gdt7Manager19setBoolNoCheckForceEbNS0_10FlagHandleEi
0x0000007100900100,_ZN4ksys3gdt7Manager7setBoolEbNS0_10FlagHandleEi,0xd0,_ZN4ksys3gdt7Manager7setBoolEbNS0_10FlagHandleEi
0x00000071009001d0,sub_71009001D0,252,_ZN4ksys3gdt7Manager18setS32NoCheckForceEiNS0_10FlagHandleEi
0x00000071009002cc,GameDataMgr::x_0,208,_ZN4ksys3gdt7Manager6setS32EiNS0_10FlagHandleEi
0x000000710090039c,GameDataMgr::__auto2,216,_ZN4ksys3gdt7Manager6setF32EfNS0_10FlagHandleEi
0x0000007100900474,sub_7100900474,252,_ZN4ksys3gdt7Manager20setStr64NoCheckForceEPKcNS0_10FlagHandleEi
0x0000007100900570,GameDataMgr::__auto0,208,_ZN4ksys3gdt7Manager8setStr64EPKcNS0_10FlagHandleEi
0x0000007100900640,sub_7100900640,252,_ZN4ksys3gdt7Manager21setStr256NoCheckForceEPKcNS0_10FlagHandleEi
0x000000710090073c,sub_710090073C,208,_ZN4ksys3gdt7Manager9setStr256EPKcNS0_10FlagHandleEi
0x000000710090080c,sub_710090080C,252,_ZN4ksys3gdt7Manager20setVec2fNoCheckForceEN4sead7Vector2IfEENS0_10FlagHandleEi
0x0000007100900908,_ZN4ksys3gdt7Manager8setVec2fERKN4sead7Vector2IfEENS0_10FlagHandleEi,0xd0,_ZN4ksys3gdt7Manager8setVec2fERKN4sead7Vector2IfEENS0_10FlagHandleEi
0x00000071009009d8,sub_71009009D8,264,_ZN4ksys3gdt7Manager20setVec3fNoCheckForceEN4sead7Vector3IfEENS0_10FlagHandleEi
0x0000007100900ae0,_ZN4ksys3gdt7Manager8setVec3fERKN4sead7Vector3IfEENS0_10FlagHandleEi,0xd0,_ZN4ksys3gdt7Manager8setVec3fERKN4sead7Vector3IfEENS0_10FlagHandleEi
0x0000007100900bb0,sub_7100900BB0,92,
0x0000007100900c0c,sub_7100900C0C,60,
0x0000007100900c48,getFlagInt,60,

Can't render this file because it is too large.

View File

@ -7,6 +7,7 @@
#include <heap/seadDisposer.h>
#include <prim/seadDelegateEventSlot.h>
#include <prim/seadTypedBitFlag.h>
#include <type_traits>
#include "KingSystem/GameData/gdtTriggerParam.h"
#include "KingSystem/Resource/resHandle.h"
#include "KingSystem/System/KingEditor.h"
@ -20,6 +21,36 @@ class MethodTreeMgr;
namespace ksys::gdt {
namespace detail {
template <typename T>
struct SetterTraits {
static constexpr bool isVectorType() {
return std::is_same_v<T, sead::Vector2f> || std::is_same_v<T, sead::Vector3f> ||
std::is_same_v<T, sead::Vector4f>;
}
static constexpr bool isStringType() { return std::is_same_v<T, const char*>; }
static constexpr bool isInlineType() {
return std::is_same_v<T, bool> || std::is_same_v<T, s32> || std::is_same_v<T, f32> ||
isStringType();
}
using ArgType = std::conditional_t<isInlineType(), T, const T&>;
using WrapperArgType = std::conditional_t<isStringType(), const sead::SafeString&, ArgType>;
using NoCheckForceArgType = T;
static ArgType convertValue(WrapperArgType v) {
if constexpr (isStringType())
return v.cstr();
else
return v;
}
};
} // namespace detail
enum class FlagHandle : u32 {};
constexpr FlagHandle InvalidHandle = FlagHandle(-1);
@ -235,22 +266,27 @@ public:
#undef GDT_GET_
#define GDT_SET_(NAME, T, WRAPPER_T, WRAPPER_VALUE) \
#define GDT_SET_(NAME, TRAITS) \
/* Setters (by handle) */ \
KSYS_ALWAYS_INLINE bool NAME(T value, FlagHandle handle, bool debug, bool force) { \
KSYS_ALWAYS_INLINE bool NAME(TRAITS::ArgType value, FlagHandle handle, bool debug, \
bool force) { \
if (mBitFlags.isOn(BitFlag::_40000)) \
return false; \
return unwrapHandle<true>(handle, debug, [&](u32 idx, TriggerParamRef& ref) { \
return ref.get().NAME(value, idx, force); \
}); \
} \
bool NAME(T value, FlagHandle handle) { return NAME(value, handle, false, false); } \
bool NAME##NoCheck(T value, FlagHandle handle) { return NAME(value, handle, true, false); } \
bool NAME##NoCheckForce(T value, FlagHandle handle) { \
bool NAME(TRAITS::ArgType value, FlagHandle handle) { \
return NAME(value, handle, false, false); \
} \
bool NAME##NoCheck(TRAITS::ArgType value, FlagHandle handle) { \
return NAME(value, handle, true, false); \
} \
bool NAME##NoCheckForce(TRAITS::NoCheckForceArgType value, FlagHandle handle) { \
return NAME(value, handle, true, true); \
} \
/* Setters for arrays (by handle) */ \
KSYS_ALWAYS_INLINE bool NAME(T value, FlagHandle handle, bool debug, bool force, \
KSYS_ALWAYS_INLINE bool NAME(TRAITS::ArgType value, FlagHandle handle, bool debug, bool force, \
s32 sub_idx) { \
if (mBitFlags.isOn(BitFlag::_40000)) \
return false; \
@ -258,93 +294,98 @@ public:
return ref.get().NAME(value, idx, sub_idx, force); \
}); \
} \
bool NAME(T value, FlagHandle handle, s32 sub_idx) { \
bool NAME(TRAITS::ArgType value, FlagHandle handle, s32 sub_idx) { \
return NAME(value, handle, false, false, sub_idx); \
} \
bool NAME##NoCheck(T value, FlagHandle handle, s32 sub_idx) { \
bool NAME##NoCheck(TRAITS::ArgType value, FlagHandle handle, s32 sub_idx) { \
return NAME(value, handle, true, false, sub_idx); \
} \
bool NAME##NoCheckForce(T value, FlagHandle handle, s32 sub_idx) { \
bool NAME##NoCheckForce(TRAITS::NoCheckForceArgType value, FlagHandle handle, s32 sub_idx) { \
return NAME(value, handle, true, true, sub_idx); \
} \
/* Setters (by name) */ \
KSYS_ALWAYS_INLINE bool NAME(T value, const sead::SafeString& name, bool debug, bool force) { \
KSYS_ALWAYS_INLINE bool NAME(TRAITS::ArgType value, const sead::SafeString& name, bool debug, \
bool force) { \
if (mBitFlags.isOn(BitFlag::_40000)) \
return false; \
auto& ref = debug ? getParamBypassPerm() : getParam(); \
return ref.get().NAME(value, name, force); \
} \
[[gnu::noinline]] bool NAME(T value, const sead::SafeString& name) { \
[[gnu::noinline]] bool NAME(TRAITS::ArgType value, const sead::SafeString& name) { \
return NAME(value, name, false, false); \
} \
[[gnu::noinline]] bool NAME##NoCheck(T value, const sead::SafeString& name) { \
[[gnu::noinline]] bool NAME##NoCheck(TRAITS::ArgType value, const sead::SafeString& name) { \
return NAME(value, name, true, false); \
} \
[[gnu::noinline]] bool NAME##NoCheckForce(T value, const sead::SafeString& name) { \
[[gnu::noinline]] bool NAME##NoCheckForce(TRAITS::NoCheckForceArgType value, \
const sead::SafeString& name) { \
return NAME(value, name, true, true); \
} \
/* Setters for arrays (by name) */ \
KSYS_ALWAYS_INLINE bool NAME(T value, const sead::SafeString& name, bool debug, bool force, \
s32 sub_idx) { \
KSYS_ALWAYS_INLINE bool NAME(TRAITS::ArgType value, const sead::SafeString& name, bool debug, \
bool force, s32 sub_idx) { \
if (mBitFlags.isOn(BitFlag::_40000)) \
return false; \
auto& ref = debug ? getParamBypassPerm() : getParam(); \
return ref.get().NAME(value, name, sub_idx, force); \
} \
[[gnu::noinline]] bool NAME(T value, const sead::SafeString& name, s32 sub_idx) { \
[[gnu::noinline]] bool NAME(TRAITS::ArgType value, const sead::SafeString& name, \
s32 sub_idx) { \
return NAME(value, name, false, false, sub_idx); \
} \
[[gnu::noinline]] bool NAME##NoCheck(T value, const sead::SafeString& name, s32 sub_idx) { \
[[gnu::noinline]] bool NAME##NoCheck(TRAITS::ArgType value, const sead::SafeString& name, \
s32 sub_idx) { \
return NAME(value, name, true, false, sub_idx); \
} \
[[gnu::noinline]] bool NAME##NoCheckForce(T value, const sead::SafeString& name, \
s32 sub_idx) { \
[[gnu::noinline]] bool NAME##NoCheckForce(TRAITS::NoCheckForceArgType value, \
const sead::SafeString& name, s32 sub_idx) { \
return NAME(value, name, true, true, sub_idx); \
} \
\
bool NAME(WRAPPER_T value, FlagHandle handle, bool debug) { \
bool NAME(TRAITS::WrapperArgType value, FlagHandle handle, bool debug) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
return NAME##NoCheckForce(WRAPPER_VALUE, handle); \
return NAME##NoCheckForce(TRAITS::convertValue(value), handle); \
} \
return NAME(WRAPPER_VALUE, handle); \
return NAME(TRAITS::convertValue(value), handle); \
} \
bool NAME(WRAPPER_T value, const sead::SafeString& name, bool debug) { \
bool NAME(TRAITS::WrapperArgType value, const sead::SafeString& name, bool debug) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
return NAME##NoCheckForce(WRAPPER_VALUE, name); \
return NAME##NoCheckForce(TRAITS::convertValue(value), name); \
} \
return NAME(WRAPPER_VALUE, name); \
return NAME(TRAITS::convertValue(value), name); \
} \
\
bool NAME(WRAPPER_T value, FlagHandle handle, bool debug, s32 sub_idx) { \
bool NAME(TRAITS::WrapperArgType value, FlagHandle handle, bool debug, s32 sub_idx) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
return NAME##NoCheckForce(WRAPPER_VALUE, handle, sub_idx); \
return NAME##NoCheckForce(TRAITS::convertValue(value), handle, sub_idx); \
} \
return NAME(WRAPPER_VALUE, handle, sub_idx); \
return NAME(TRAITS::convertValue(value), handle, sub_idx); \
} \
bool NAME(WRAPPER_T value, const sead::SafeString& name, bool debug, s32 sub_idx) { \
bool NAME(TRAITS::WrapperArgType value, const sead::SafeString& name, bool debug, \
s32 sub_idx) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
return NAME##NoCheckForce(WRAPPER_VALUE, name, sub_idx); \
return NAME##NoCheckForce(TRAITS::convertValue(value), name, sub_idx); \
} \
return NAME(WRAPPER_VALUE, name, sub_idx); \
return NAME(TRAITS::convertValue(value), name, sub_idx); \
}
GDT_SET_(setBool, bool, bool, value)
GDT_SET_(setS32, s32, s32, value)
GDT_SET_(setF32, f32, f32, value)
GDT_SET_(setStr, char const*, const sead::SafeString&, value.cstr())
GDT_SET_(setStr64, char const*, const sead::SafeString&, value.cstr())
GDT_SET_(setStr256, char const*, const sead::SafeString&, value.cstr())
GDT_SET_(setVec2f, const sead::Vector2f&, const sead::Vector2f&, value)
GDT_SET_(setVec3f, const sead::Vector3f&, const sead::Vector3f&, value)
GDT_SET_(setVec4f, const sead::Vector4f&, const sead::Vector4f&, value)
GDT_SET_(setBool, detail::SetterTraits<bool>)
GDT_SET_(setS32, detail::SetterTraits<s32>)
GDT_SET_(setF32, detail::SetterTraits<f32>)
GDT_SET_(setStr, detail::SetterTraits<const char*>)
GDT_SET_(setStr64, detail::SetterTraits<const char*>)
GDT_SET_(setStr256, detail::SetterTraits<const char*>)
GDT_SET_(setVec2f, detail::SetterTraits<sead::Vector2f>)
GDT_SET_(setVec3f, detail::SetterTraits<sead::Vector3f>)
GDT_SET_(setVec4f, detail::SetterTraits<sead::Vector4f>)
#undef GDT_SET_