summaryrefslogtreecommitdiff
path: root/src/KingSystem/ActorSystem
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-02-07 17:28:59 +0100
committerLéo Lam <leo@leolam.fr>2021-02-07 18:16:01 +0100
commit1bb0c30e64a8a11ddc61e80692cb77cb5d93e676 (patch)
tree250fe07f57894a75c3c5accd271fe36d3c792ca3 /src/KingSystem/ActorSystem
parent5b83ad5f822593071e5f7b2a6d520602ddf86de4 (diff)
ksys/act: Match BaseProcMgr ctor
Diffstat (limited to 'src/KingSystem/ActorSystem')
-rw-r--r--src/KingSystem/ActorSystem/actBaseProc.cpp4
-rw-r--r--src/KingSystem/ActorSystem/actBaseProc.h4
-rw-r--r--src/KingSystem/ActorSystem/actBaseProcMgr.cpp11
-rw-r--r--src/KingSystem/ActorSystem/actBaseProcMgr.h6
4 files changed, 16 insertions, 9 deletions
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<BaseProcJobHandler*, 7> mJobHandlers{};
sead::Delegate1R<BaseProc, void*, bool> mInvoker;
- sead::ListNode mPostDeleteListNode;
- sead::ListNode mDeleteListNode;
+ sead::ListNode mPreDeleteListNode;
+ sead::ListNode mUpdateStateListNode;
BaseProcMapNode mMapNode{this};
BaseProcUnit* mProcUnit = nullptr;
sead::Atomic<s32> 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 <prim/seadBitFlag.h>
#include <prim/seadScopedLock.h>
#include <prim/seadSizedEnum.h>
+#include <prim/seadStorageFor.h>
#include <thread/seadAtomic.h>
#include <thread/seadCriticalSection.h>
#include "KingSystem/ActorSystem/actBaseProc.h"
@@ -202,7 +203,7 @@ private:
BaseProcInitializer* mProcInitializer = nullptr;
BaseProcDeleter* mProcDeleter = nullptr;
bool mIsPushingJobs = false;
- bool mPushActorJobType3InsteadOf6 = false;
+ sead::Atomic<bool> 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<ExtraJobLinkArray, 2> mExtraJobLinkArrays{};
+ sead::StorageFor<sead::SafeArray<ExtraJobLinkArray, 2>> mExtraJobLinkArrays{
+ sead::ZeroInitializeTag{}};
};
KSYS_CHECK_SIZE_NX150(BaseProcMgr, 0x21a0);