summaryrefslogtreecommitdiff
path: root/src/KingSystem/ActorSystem/actBaseProcAccessor.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2026-10-11 04:13:20 +0200
committerLéo Lam <leo@leolam.fr>2026-10-11 04:13:20 +0200
commit6e9afd0f7d6f8e037fd71e91dfdad4b45f8e7e2f (patch)
treed971f814d1cde46f56da6041037a65f512654ee3 /src/KingSystem/ActorSystem/actBaseProcAccessor.cpp
parent49c6b5c18344de6555163b3af7044970ad9d7c5e (diff)
ksys/act: rename the actor accessor to ActorLinkConstDataAccess
The 0x18-sized accessor appears to be named ActorLinkConstDataAccess based on a source path string in the Wii U build. The 0x10-sized base class (which we had given the name to) only holds a BaseProc and its dtor/acquire functions live in a separate TU so let's rename it BaseProcAccessor (unofficial name). acquireActor is a header inline whose one copy landed in the BeamBase object. Nothing in BeamBase calls it, so the BeamBase function that used it was probably dead-stripped by the linker. (AI assisted using Claude Opus 5.5)
Diffstat (limited to 'src/KingSystem/ActorSystem/actBaseProcAccessor.cpp')
-rw-r--r--src/KingSystem/ActorSystem/actBaseProcAccessor.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/KingSystem/ActorSystem/actBaseProcAccessor.cpp b/src/KingSystem/ActorSystem/actBaseProcAccessor.cpp
new file mode 100644
index 00000000..4333471a
--- /dev/null
+++ b/src/KingSystem/ActorSystem/actBaseProcAccessor.cpp
@@ -0,0 +1,48 @@
+#include "KingSystem/ActorSystem/actBaseProcAccessor.h"
+#include "KingSystem/ActorSystem/actBaseProc.h"
+#include "KingSystem/ActorSystem/actBaseProcMgr.h"
+#include "KingSystem/Utils/Debug.h"
+
+namespace ksys::act {
+
+BaseProcAccessor::~BaseProcAccessor() {
+ if (mAcquired && mProc)
+ mProc->release();
+
+ mAcquired = false;
+ mProc = nullptr;
+}
+
+bool BaseProcAccessor::acquire(BaseProc* proc) {
+ if (mProc) {
+ if (mAcquired)
+ mProc->release();
+
+ mAcquired = false;
+ mProc = nullptr;
+ }
+
+ return proc && proc->acquire(*this);
+}
+
+bool acquireProc(BaseProcAccessor* accessor, BaseProc* proc, const sead::SafeString& from, s32) {
+ bool acquired = false;
+
+ if (accessor) {
+ acquired = accessor->acquire(proc);
+ if (!acquired)
+ return false;
+ }
+
+ if (acquired || BaseProcMgr::instance()->isHighPriorityThread())
+ return true;
+
+ sead::FixedSafeString<256> message;
+ // (%s)Acquiring from a low priority thread. Please change via ActorLinkConstDataAccess
+ message.format("(%s)低スレッドからの取得です。ActorLinkConstDataAccess経由に変更お願いします",
+ from.cstr());
+ util::PrintDebug(message);
+ return false;
+}
+
+} // namespace ksys::act