summaryrefslogtreecommitdiff
path: root/src/KingSystem/ActorSystem/actBaseProcAccessor.cpp
diff options
context:
space:
mode:
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