mirror of
https://github.com/zeldaret/botw
synced 2026-08-18 05:18:13 -04:00
ksys/gdt: Add more flag utilities
This commit is contained in:
@@ -14,4 +14,163 @@ inline bool getBool(FlagHandle handle, bool debug = false) {
|
||||
return value;
|
||||
}
|
||||
|
||||
inline s32 getS32(FlagHandle handle, bool debug = false) {
|
||||
s32 value{};
|
||||
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getS32(handle, &value, debug);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
inline f32 getF32(FlagHandle handle, bool debug = false) {
|
||||
f32 value{};
|
||||
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getF32(handle, &value, debug);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
inline void getStr(FlagHandle handle, const char** value, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getStr(handle, value, debug);
|
||||
}
|
||||
|
||||
inline void getStr64(FlagHandle handle, const char** value, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getStr64(handle, value, debug);
|
||||
}
|
||||
|
||||
inline void getStr256(FlagHandle handle, const char** value, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getStr256(handle, value, debug);
|
||||
}
|
||||
|
||||
inline void getVec2f(FlagHandle handle, sead::Vector2f* value, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getVec2f(handle, value, debug);
|
||||
}
|
||||
|
||||
inline void getVec3f(FlagHandle handle, sead::Vector3f* value, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getVec3f(handle, value, debug);
|
||||
}
|
||||
|
||||
inline void getVec4f(FlagHandle handle, sead::Vector4f* value, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getVec4f(handle, value, debug);
|
||||
}
|
||||
|
||||
inline bool getBool(FlagHandle handle, s32 idx, bool debug = false) {
|
||||
bool value{};
|
||||
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getBool(handle, &value, idx, debug);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
inline s32 getS32(FlagHandle handle, s32 idx, bool debug = false) {
|
||||
s32 value{};
|
||||
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getS32(handle, &value, idx, debug);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
inline f32 getF32(FlagHandle handle, s32 idx, bool debug = false) {
|
||||
f32 value{};
|
||||
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getF32(handle, &value, idx, debug);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
inline void getStr(FlagHandle handle, const char** value, s32 idx, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getStr(handle, value, idx, debug);
|
||||
}
|
||||
|
||||
inline void getStr64(FlagHandle handle, const char** value, s32 idx, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getStr64(handle, value, idx, debug);
|
||||
}
|
||||
|
||||
inline void getStr256(FlagHandle handle, const char** value, s32 idx, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getStr256(handle, value, idx, debug);
|
||||
}
|
||||
|
||||
inline void getVec2f(FlagHandle handle, sead::Vector2f* value, s32 idx, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getVec2f(handle, value, idx, debug);
|
||||
}
|
||||
|
||||
inline void getVec3f(FlagHandle handle, sead::Vector3f* value, s32 idx, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getVec3f(handle, value, idx, debug);
|
||||
}
|
||||
|
||||
inline void getVec4f(FlagHandle handle, sead::Vector4f* value, s32 idx, bool debug = false) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->getVec4f(handle, value, idx, debug);
|
||||
}
|
||||
|
||||
#define GDT_SET_FLAG_(NAME, T) \
|
||||
inline void NAME(T value, FlagHandle handle, bool debug = false) { \
|
||||
auto* mgr = Manager::instance(); \
|
||||
if (mgr) \
|
||||
mgr->NAME(value, handle, debug); \
|
||||
} \
|
||||
inline void NAME(T value, FlagHandle handle, s32 sub_idx, bool debug = false) { \
|
||||
auto* mgr = Manager::instance(); \
|
||||
if (mgr) \
|
||||
mgr->NAME(value, handle, debug, sub_idx); \
|
||||
}
|
||||
|
||||
#define GDT_SET_FLAG_STR_(NAME, T) \
|
||||
inline void NAME(T value, FlagHandle handle, bool debug = false) { \
|
||||
auto* mgr = Manager::instance(); \
|
||||
if (mgr) \
|
||||
mgr->NAME(value.cstr(), handle, debug); \
|
||||
} \
|
||||
inline void NAME(T value, FlagHandle handle, s32 sub_idx, bool debug = false) { \
|
||||
auto* mgr = Manager::instance(); \
|
||||
if (mgr) \
|
||||
mgr->NAME(value.cstr(), handle, debug, sub_idx); \
|
||||
}
|
||||
|
||||
GDT_SET_FLAG_(setBool, bool)
|
||||
GDT_SET_FLAG_(setS32, s32)
|
||||
GDT_SET_FLAG_(setF32, f32)
|
||||
GDT_SET_FLAG_STR_(setStr, const sead::SafeString&)
|
||||
GDT_SET_FLAG_STR_(setStr64, const sead::SafeString&)
|
||||
GDT_SET_FLAG_STR_(setStr256, const sead::SafeString&)
|
||||
GDT_SET_FLAG_(setVec2f, const sead::Vector2f&)
|
||||
GDT_SET_FLAG_(setVec3f, const sead::Vector3f&)
|
||||
GDT_SET_FLAG_(setVec4f, const sead::Vector4f&)
|
||||
|
||||
#undef GDT_SET_FLAG_
|
||||
#undef GDT_SET_FLAG_STR_
|
||||
|
||||
} // namespace ksys::gdt
|
||||
|
||||
@@ -215,6 +215,12 @@ public:
|
||||
ref.get().NAME(value, idx); \
|
||||
return true; \
|
||||
}); \
|
||||
} \
|
||||
void NAME(FlagHandle handle, T* value, s32 sub_idx, bool debug = false) { \
|
||||
unwrapHandle<false>(handle, debug, [&](u32 idx, TriggerParamRef& ref) { \
|
||||
ref.get().NAME(value, idx, sub_idx); \
|
||||
return true; \
|
||||
}); \
|
||||
}
|
||||
|
||||
GDT_GET_(getBool, bool)
|
||||
@@ -230,6 +236,7 @@ public:
|
||||
#undef GDT_GET_
|
||||
|
||||
#define GDT_SET_(NAME, T) \
|
||||
/* Setters (by handle) */ \
|
||||
KSYS_ALWAYS_INLINE bool NAME(T value, FlagHandle handle, bool debug, bool force) { \
|
||||
if (mBitFlags.isOn(BitFlag::_40000)) \
|
||||
return false; \
|
||||
@@ -242,7 +249,25 @@ public:
|
||||
bool NAME##NoCheckForce(T 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, \
|
||||
s32 sub_idx) { \
|
||||
if (mBitFlags.isOn(BitFlag::_40000)) \
|
||||
return false; \
|
||||
return unwrapHandle<true>(handle, debug, [&](u32 idx, TriggerParamRef& ref) { \
|
||||
return ref.get().NAME(value, idx, sub_idx, force); \
|
||||
}); \
|
||||
} \
|
||||
bool NAME(T value, FlagHandle handle, s32 sub_idx) { \
|
||||
return NAME(value, handle, false, false, sub_idx); \
|
||||
} \
|
||||
bool NAME##NoCheck(T value, FlagHandle handle, s32 sub_idx) { \
|
||||
return NAME(value, handle, true, false, sub_idx); \
|
||||
} \
|
||||
bool NAME##NoCheckForce(T 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) { \
|
||||
if (mBitFlags.isOn(BitFlag::_40000)) \
|
||||
return false; \
|
||||
@@ -257,6 +282,58 @@ public:
|
||||
} \
|
||||
[[gnu::noinline]] bool NAME##NoCheckForce(T 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) { \
|
||||
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) { \
|
||||
return NAME(value, name, false, false, sub_idx); \
|
||||
} \
|
||||
[[gnu::noinline]] bool NAME##NoCheck(T 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) { \
|
||||
return NAME(value, name, true, true, sub_idx); \
|
||||
} \
|
||||
\
|
||||
bool NAME(T value, FlagHandle handle, bool debug) { \
|
||||
if (debug) { \
|
||||
setBool(true, "IsChangedByDebug"); \
|
||||
mBitFlags.set(BitFlag::_800); \
|
||||
return NAME##NoCheckForce(value, handle); \
|
||||
} \
|
||||
return NAME(value, handle); \
|
||||
} \
|
||||
bool NAME(T value, const sead::SafeString& name, bool debug) { \
|
||||
if (debug) { \
|
||||
setBool(true, "IsChangedByDebug"); \
|
||||
mBitFlags.set(BitFlag::_800); \
|
||||
return NAME##NoCheckForce(value, name); \
|
||||
} \
|
||||
return NAME(value, name); \
|
||||
} \
|
||||
\
|
||||
bool NAME(T value, FlagHandle handle, bool debug, s32 sub_idx) { \
|
||||
if (debug) { \
|
||||
setBool(true, "IsChangedByDebug"); \
|
||||
mBitFlags.set(BitFlag::_800); \
|
||||
return NAME##NoCheckForce(value, handle, sub_idx); \
|
||||
} \
|
||||
return NAME(value, handle, sub_idx); \
|
||||
} \
|
||||
bool NAME(T value, const sead::SafeString& name, bool debug, s32 sub_idx) { \
|
||||
if (debug) { \
|
||||
setBool(true, "IsChangedByDebug"); \
|
||||
mBitFlags.set(BitFlag::_800); \
|
||||
return NAME##NoCheckForce(value, name, sub_idx); \
|
||||
} \
|
||||
return NAME(value, name, sub_idx); \
|
||||
}
|
||||
|
||||
GDT_SET_(setBool, bool)
|
||||
|
||||
Reference in New Issue
Block a user