From 1bb0c30e64a8a11ddc61e80692cb77cb5d93e676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sun, 7 Feb 2021 17:28:59 +0100 Subject: [PATCH] ksys/act: Match BaseProcMgr ctor --- data/uking_functions.csv | 2 +- lib/agl | 2 +- src/KingSystem/ActorSystem/actBaseProc.cpp | 4 ++-- src/KingSystem/ActorSystem/actBaseProc.h | 4 ++-- src/KingSystem/ActorSystem/actBaseProcMgr.cpp | 11 ++++++++--- src/KingSystem/ActorSystem/actBaseProcMgr.h | 6 ++++-- 6 files changed, 18 insertions(+), 11 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 15cda80c..e98378ae 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -91775,7 +91775,7 @@ 0x00000071011bcfd0,sub_71011BCFD0,44, 0x00000071011bcffc,sub_71011BCFFC,100,_ZN4ksys3act11BaseProcMgr18SingletonDisposer_D2Ev 0x00000071011bd060,sub_71011BD060,108,_ZN4ksys3act11BaseProcMgr18SingletonDisposer_D0Ev -0x00000071011bd0cc,BaseProcMgr::createInstance,372, +0x00000071011bd0cc,BaseProcMgr::createInstance,372,_ZN4ksys3act11BaseProcMgr14createInstanceEPN4sead4HeapE 0x00000071011bd240,sub_71011BD240,164, 0x00000071011bd2e4,sub_71011BD2E4,36, 0x00000071011bd308,BaseProcMgr::init,680, diff --git a/lib/agl b/lib/agl index 88f87ad4..1c390c91 160000 --- a/lib/agl +++ b/lib/agl @@ -1 +1 @@ -Subproject commit 88f87ad4b166e1da384abb6131e8141ec1722b15 +Subproject commit 1c390c9183f0c37496b9544bcc0fa78d736e9d7d diff --git a/src/KingSystem/ActorSystem/actBaseProc.cpp b/src/KingSystem/ActorSystem/actBaseProc.cpp index d542d67c..6e1bea55 100644 --- a/src/KingSystem/ActorSystem/actBaseProc.cpp +++ b/src/KingSystem/ActorSystem/actBaseProc.cpp @@ -27,7 +27,7 @@ BaseProc::~BaseProc() { unlinkCalcChild_(); unlinkCalcParent_(); - if (mDeleteListNode.isLinked()) + if (mUpdateStateListNode.isLinked()) BaseProcMgr::instance()->eraseFromUpdateStateList(*this); } @@ -157,7 +157,7 @@ BaseProc::PreDeletePrepareResult BaseProc::prepareForPreDelete_() { // NON_MATCHING: branching bool BaseProc::startPreparingForPreDelete_() { - if (mDeleteListNode.isLinked()) + if (mUpdateStateListNode.isLinked()) return false; return !mBaseProcLinkData || mBaseProcLinkData->refCount() <= 0 || diff --git a/src/KingSystem/ActorSystem/actBaseProc.h b/src/KingSystem/ActorSystem/actBaseProc.h index 530ee966..008d31b4 100644 --- a/src/KingSystem/ActorSystem/actBaseProc.h +++ b/src/KingSystem/ActorSystem/actBaseProc.h @@ -286,8 +286,8 @@ protected: BaseProc* mConnectedCalcChildNew = nullptr; sead::SafeArray mJobHandlers{}; sead::Delegate1R mInvoker; - sead::ListNode mPostDeleteListNode; - sead::ListNode mDeleteListNode; + sead::ListNode mPreDeleteListNode; + sead::ListNode mUpdateStateListNode; BaseProcMapNode mMapNode{this}; BaseProcUnit* mProcUnit = nullptr; sead::Atomic mRefCount = 0; diff --git a/src/KingSystem/ActorSystem/actBaseProcMgr.cpp b/src/KingSystem/ActorSystem/actBaseProcMgr.cpp index 2c4a9f74..9f0044f7 100644 --- a/src/KingSystem/ActorSystem/actBaseProcMgr.cpp +++ b/src/KingSystem/ActorSystem/actBaseProcMgr.cpp @@ -6,6 +6,11 @@ namespace ksys::act { SEAD_SINGLETON_DISPOSER_IMPL(BaseProcMgr) +BaseProcMgr::BaseProcMgr() { + mProcPreDeleteList.initOffset(offsetof(BaseProc, mPreDeleteListNode)); + mProcUpdateStateList.initOffset(offsetof(BaseProc, mUpdateStateListNode)); +} + void BaseProcMgr::generateProcId(u32* id) { *id = mCreatedProcCounter.increment(); } @@ -64,7 +69,7 @@ void BaseProcMgr::processPreDeleteList() { } bool BaseProcMgr::hasExtraJobLink(BaseProcJobLink* job_link, s32 idx) { - for (auto& ptr : mExtraJobLinkArrays[idx]) { + for (auto& ptr : mExtraJobLinkArrays.ref()[idx]) { if (&ptr == job_link) return true; } @@ -72,8 +77,8 @@ bool BaseProcMgr::hasExtraJobLink(BaseProcJobLink* job_link, s32 idx) { } void BaseProcMgr::clearExtraJobArrays() { - mExtraJobLinkArrays[0].clear(); - mExtraJobLinkArrays[1].clear(); + mExtraJobLinkArrays.ref()[0].clear(); + mExtraJobLinkArrays.ref()[1].clear(); } void BaseProcMgr::setActorJobTypeAndPrio(JobType type, s32 prio, bool x) { diff --git a/src/KingSystem/ActorSystem/actBaseProcMgr.h b/src/KingSystem/ActorSystem/actBaseProcMgr.h index f9299387..0ebb4f39 100644 --- a/src/KingSystem/ActorSystem/actBaseProcMgr.h +++ b/src/KingSystem/ActorSystem/actBaseProcMgr.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include "KingSystem/ActorSystem/actBaseProc.h" @@ -202,7 +203,7 @@ private: BaseProcInitializer* mProcInitializer = nullptr; BaseProcDeleter* mProcDeleter = nullptr; bool mIsPushingJobs = false; - bool mPushActorJobType3InsteadOf6 = false; + sead::Atomic mPushActorJobType3InsteadOf6 = false; bool mEnableExtraJobPush = false; Mode mMode = Mode::_0; bool mUnk2 = false; @@ -214,7 +215,8 @@ private: u32 mHavokThreadId1 = 0; u32 mHavokThreadId2 = 0; u32 mUnk4 = 0; - sead::SafeArray mExtraJobLinkArrays{}; + sead::StorageFor> mExtraJobLinkArrays{ + sead::ZeroInitializeTag{}}; }; KSYS_CHECK_SIZE_NX150(BaseProcMgr, 0x21a0);