diff options
Diffstat (limited to 'src/KingSystem/ActorSystem/actBaseProcAccessor.cpp')
| -rw-r--r-- | src/KingSystem/ActorSystem/actBaseProcAccessor.cpp | 48 |
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 |
