mirror of
https://github.com/zeldaret/botw
synced 2026-07-29 15:33:17 -04:00
ksys/gdt: Implement Manager increase functions
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -184,4 +184,11 @@ GDT_RESET_FLAG_(resetVec4f)
|
||||
|
||||
#undef GDT_SET_FLAG_
|
||||
|
||||
inline void increaseS32CommonFlag(s32 value, const sead::SafeString& name, s32 sub_idx,
|
||||
bool debug) {
|
||||
auto* mgr = Manager::instance();
|
||||
if (mgr)
|
||||
mgr->increaseS32CommonFlag(value, name, sub_idx, debug);
|
||||
}
|
||||
|
||||
} // namespace ksys::gdt
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "KingSystem/GameData/gdtManager.h"
|
||||
#include <devenv/seadEnvUtil.h>
|
||||
#include <framework/seadFramework.h>
|
||||
#include <mc/seadCoreInfo.h>
|
||||
#include <thread/seadThreadUtil.h>
|
||||
#include <time/seadTickTime.h>
|
||||
#include "KingSystem/GameData/gdtSaveMgr.h"
|
||||
@@ -70,7 +71,7 @@ void Manager::init(sead::Heap* heap, sead::Framework* framework) {
|
||||
|
||||
mGameDataHeap = util::DualHeap::create(0xf00000, "GameDataHeap", heap, nullptr, sizeof(void*),
|
||||
sead::Heap::cHeapDirection_Forward, true);
|
||||
mIncrementLogger = new (mGameDataHeap) IncrementLogger;
|
||||
mIncreaseLogger = new (mGameDataHeap) IncreaseLogger;
|
||||
SaveMgr::createInstance(mGameDataHeap);
|
||||
|
||||
SaveMgr::InitArg arg;
|
||||
@@ -136,4 +137,18 @@ void Manager::addReinitCallback(sead::DelegateEvent<ReinitEvent*>::Slot&) {
|
||||
// Stubbed in release builds.
|
||||
}
|
||||
|
||||
void Manager::IncreaseLogger::addRecord(s32 value, const sead::SafeString& name, s32 sub_idx,
|
||||
bool debug) {
|
||||
const u32 name_hash = sead::HashCRC32::calcStringHash(name);
|
||||
const auto core = sead::CoreInfo::getCurrentCoreId();
|
||||
const u32 platform_core_id = sead::CoreInfo::getPlatformCoreId(core);
|
||||
|
||||
Record record;
|
||||
record.debug = debug;
|
||||
record.name_hash = name_hash;
|
||||
record.sub_idx = sub_idx;
|
||||
record.value = value;
|
||||
ring_buffers[0][platform_core_id].pushBack(record);
|
||||
}
|
||||
|
||||
} // namespace ksys::gdt
|
||||
|
||||
@@ -459,6 +459,15 @@ public:
|
||||
|
||||
#undef GDT_RESET_
|
||||
|
||||
void increaseS32CommonFlag(s32 value, const sead::SafeString& name, s32 sub_idx, bool debug) {
|
||||
if (!mIncreaseLogger)
|
||||
return;
|
||||
|
||||
mIncreaseLogger->addRecord(value, name, sub_idx, debug);
|
||||
if (debug)
|
||||
onChangedByDebug();
|
||||
}
|
||||
|
||||
void init(sead::Heap* heap, sead::Framework* framework);
|
||||
|
||||
void addReinitCallback(ReinitSignal::Slot& slot);
|
||||
@@ -496,17 +505,19 @@ private:
|
||||
sead::MethodTreeMgr* method_tree_mgr = nullptr;
|
||||
};
|
||||
|
||||
struct IncrementLogger {
|
||||
struct IncreaseLogger {
|
||||
struct Record {
|
||||
u8 _0 = 0;
|
||||
u32 _4 = 0;
|
||||
s32 _8 = -1;
|
||||
u32 _c = 0;
|
||||
bool debug = false;
|
||||
u32 name_hash = 0;
|
||||
s32 sub_idx = -1;
|
||||
s32 value = 0;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(Record, 0x10);
|
||||
|
||||
void addRecord(s32 value, const sead::SafeString& name, s32 sub_idx, bool debug);
|
||||
|
||||
u64 _0 = 0;
|
||||
sead::FixedRingBuffer<Record, 64> ring_buffers[6]{};
|
||||
sead::SafeArray<sead::FixedRingBuffer<Record, 64>, 3> ring_buffers[2];
|
||||
sead::SafeArray<Record, 0xc0> arrays[2]{};
|
||||
};
|
||||
|
||||
@@ -561,7 +572,7 @@ private:
|
||||
TriggerParamRef mParamBypassPerm{&mFlagBuffer1, &mFlagBuffer, false, false, false};
|
||||
TriggerParamRef mParam{&mFlagBuffer1, &mFlagBuffer, true, false, false};
|
||||
|
||||
IncrementLogger* mIncrementLogger = nullptr;
|
||||
IncreaseLogger* mIncreaseLogger = nullptr;
|
||||
|
||||
TriggerParam* mFlagBuffer1;
|
||||
TriggerParam* mFlagBuffer;
|
||||
|
||||
Reference in New Issue
Block a user