diff options
| author | Léo Lam <leo@leolam.fr> | 2020-08-20 01:26:10 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-08-20 01:26:10 +0200 |
| commit | 0dc07525309ecc1d522fa4f18ecb09993b035f2b (patch) | |
| tree | 46a42e8fd745dc443c979e99a14559eb70dae583 /src | |
| parent | 6989d0f7f833179130f43f5b7d6cf4c00cd52ece (diff) | |
ksys/act: Implement ActorLinkConstDataAccess
Diffstat (limited to 'src')
| -rw-r--r-- | src/KingSystem/ActorSystem/actActor.h | 2 | ||||
| -rw-r--r-- | src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp | 33 | ||||
| -rw-r--r-- | src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h | 15 |
3 files changed, 50 insertions, 0 deletions
diff --git a/src/KingSystem/ActorSystem/actActor.h b/src/KingSystem/ActorSystem/actActor.h index cc51e126..39f41064 100644 --- a/src/KingSystem/ActorSystem/actActor.h +++ b/src/KingSystem/ActorSystem/actActor.h @@ -11,6 +11,8 @@ public: Actor(); // FIXME ~Actor() override; + SEAD_RTTI_OVERRIDE(Actor, BaseProc) + void emitBasicSigOn(); void emitBasicSigOff(); }; diff --git a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp index e69de29b..476482ce 100644 --- a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp +++ b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.cpp @@ -0,0 +1,33 @@ +#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h" +#include "KingSystem/ActorSystem/actBaseProc.h" + +namespace ksys::act { + +ActorLinkConstDataAccess::~ActorLinkConstDataAccess() { + if (mAcquired) + acquire(nullptr); +} + +bool ActorLinkConstDataAccess::acquire(BaseProc* proc) { + if (mProc) { + if (mAcquired) + mProc->release(); + + mAcquired = false; + mProc = nullptr; + } + + if (proc) + return proc->acquire(*this); + return false; +} + +bool ActorLinkConstDataAccess::hasProc(BaseProc* proc) const { + return mProc == proc; +} + +void ActorLinkConstDataAccess::debugLog(s32, const sead::SafeString&) { + // Intentionally left empty. +} + +} // namespace ksys::act diff --git a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h index 628138b1..ff4258ec 100644 --- a/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h +++ b/src/KingSystem/ActorSystem/actActorLinkConstDataAccess.h @@ -1,5 +1,8 @@ #pragma once +#include <basis/seadTypes.h> +#include <prim/seadSafeString.h> + namespace ksys { namespace act { @@ -9,9 +12,21 @@ class BaseProc; /// Provides read-only access to actor data for safe, multi-threaded access. class ActorLinkConstDataAccess { public: + ActorLinkConstDataAccess() = default; + explicit ActorLinkConstDataAccess(BaseProc* proc) { acquire(proc); } + /// Destructor that automatically releases any acquired BaseProc. ~ActorLinkConstDataAccess(); + /// Acquire a BaseProc. This increments its reference count. + /// If an actor was already acquired, it is released. + bool acquire(BaseProc* proc); + + /// Checks whether the acquired BaseProc is `proc`. + bool hasProc(BaseProc* proc) const; + private: + void debugLog(s32, const sead::SafeString& method_name); + bool mAcquired = false; BaseProc* mProc = nullptr; }; |
