#include "KingSystem/ActorSystem/actActorConstDataAccess.h" #include #include "KingSystem/ActorSystem/actActor.h" namespace ksys::act { static BaseProc* getProcIfActor(BaseProc* proc) { if (proc && sead::IsDerivedFrom(proc)) return proc; return nullptr; } bool ActorConstDataAccess::acquireActor(const ActorLinkConstDataAccess& other) { return acquire(getProcIfActor(other.mProc)); } bool ActorConstDataAccess::hasProc(BaseProc* proc) const { return mProc == proc; } bool ActorConstDataAccess::hasProc(const BaseProcLink& link) const { return link.hasProcById(getProcIfActor(mProc)); } bool ActorConstDataAccess::linkAcquire(BaseProcLink* link) const { auto* proc = getProcIfActor(mProc); if (proc) return link->acquire(proc, false); link->reset(); return false; } bool ActorConstDataAccess::linkAcquireImmediately(BaseProcLink* link) const { auto* proc = getProcIfActor(mProc); if (proc) return link->acquire(proc, true); link->reset(); return false; } void ActorConstDataAccess::debugLog(s32, const sead::SafeString&) const { // Intentionally left empty. } const sead::SafeString& ActorConstDataAccess::getName() const { auto* proc = getProcIfActor(mProc); if (!proc) return sead::SafeString::cEmptyString; return proc->getName(); } u32 ActorConstDataAccess::getId() const { auto* proc = getProcIfActor(mProc); if (!proc) return 0xffffffff; return proc->getId(); } bool ActorConstDataAccess::acquireConnectedCalcParent(ActorLinkConstDataAccess* accessor) const { auto* proc = getProcIfActor(mProc); if (!proc) return false; accessor->acquire(sead::DynamicCast(proc->getConnectedCalcParent())); return accessor->mProc != nullptr; } bool ActorConstDataAccess::acquireConnectedCalcChild(ActorLinkConstDataAccess* accessor) const { auto* proc = getProcIfActor(mProc); if (!proc) return false; accessor->acquire(sead::DynamicCast(proc->getConnectedCalcChild())); return accessor->mProc != nullptr; } bool ActorConstDataAccess::hasConnectedCalcParent() const { auto* proc = getProcIfActor(mProc); return proc && sead::DynamicCast(proc->getConnectedCalcParent()) != nullptr; } bool acquireActor(BaseProcLink* link, ActorConstDataAccess* accessor) { return link->getProcInContext([accessor](BaseProc* proc, bool valid) { if (!proc) { if (!valid) accessor->acquire(nullptr); return false; } return accessor->acquire(sead::DynamicCast(proc)); }); } } // namespace ksys::act