ksys/act: Implement ActorLinkConstDataAccess

This commit is contained in:
Léo Lam 2020-08-20 01:26:10 +02:00
parent 6989d0f7f8
commit 0dc0752530
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
5 changed files with 55 additions and 5 deletions

View File

@ -71172,7 +71172,7 @@
0x0000007100d0dae8,Account::__auto0,8, 0x0000007100d0dae8,Account::__auto0,8,
0x0000007100d0daf0,Account::getUserId,28, 0x0000007100d0daf0,Account::getUserId,28,
0x0000007100d0db0c,ActorAccessor::ctorCopy,144, 0x0000007100d0db0c,ActorAccessor::ctorCopy,144,
0x0000007100d0db9c,ActorAccessor::hasActor,16, 0x0000007100d0db9c,ActorAccessor::hasActor,16,_ZNK4ksys3act24ActorLinkConstDataAccess7hasProcEPNS0_8BaseProcE
0x0000007100d0dbac,act::fieldx8IsEqualToActorFieldx60,144, 0x0000007100d0dbac,act::fieldx8IsEqualToActorFieldx60,144,
0x0000007100d0dc3c,sub_7100D0DC3C,168, 0x0000007100d0dc3c,sub_7100D0DC3C,168,
0x0000007100d0dce4,act::acc::Actor::baseProcLinkFromActor,168, 0x0000007100d0dce4,act::acc::Actor::baseProcLinkFromActor,168,
@ -71238,7 +71238,7 @@
0x0000007100d105a8,sub_7100D105A8,188, 0x0000007100d105a8,sub_7100D105A8,188,
0x0000007100d10664,sub_7100D10664,156, 0x0000007100d10664,sub_7100D10664,156,
0x0000007100d10700,act::acc::getActorMtx,156, 0x0000007100d10700,act::acc::getActorMtx,156,
0x0000007100d1079c,ActorAccessor::debugLog,4, 0x0000007100d1079c,ActorAccessor::debugLog,4,_ZN4ksys3act24ActorLinkConstDataAccess8debugLogEiRKN4sead14SafeStringBaseIcEE
0x0000007100d107a0,ActorAccessor::getPosition2,148, 0x0000007100d107a0,ActorAccessor::getPosition2,148,
0x0000007100d10834,act::acc::getPreviousPos2,156, 0x0000007100d10834,act::acc::getPreviousPos2,156,
0x0000007100d108d0,act::acc::getField440_Vec3,156, 0x0000007100d108d0,act::acc::getField440_Vec3,156,
@ -74112,8 +74112,8 @@
0x0000007100dca3b4,ActorInstParams::Buf::addInvoker,196, 0x0000007100dca3b4,ActorInstParams::Buf::addInvoker,196,
0x0000007100dca478,ActorInstParams::Buf::pop,604, 0x0000007100dca478,ActorInstParams::Buf::pop,604,
0x0000007100dca6d4,_ZN15ActorInstParams3BufaSERS0_,56, 0x0000007100dca6d4,_ZN15ActorInstParams3BufaSERS0_,56,
0x0000007100dca70c,_ZN13ActorAccessorD2Ev,56, 0x0000007100dca70c,_ZN13ActorAccessorD2Ev,56,_ZN4ksys3act24ActorLinkConstDataAccessD1Ev
0x0000007100dca744,ActorAccessor::acquire,88, 0x0000007100dca744,ActorAccessor::acquire,88,_ZN4ksys3act24ActorLinkConstDataAccess7acquireEPNS0_8BaseProcE
0x0000007100dca79c,act::acquireActorFromGameOrHavokThread,256, 0x0000007100dca79c,act::acquireActorFromGameOrHavokThread,256,
0x0000007100dca89c,GameFramework::ctor,96, 0x0000007100dca89c,GameFramework::ctor,96,
0x0000007100dca8fc,GameFramework::dtor,64, 0x0000007100dca8fc,GameFramework::dtor,64,

Can't render this file because it is too large.

@ -1 +1 @@
Subproject commit 2bf8456295d4640862e112fba66cb6bf2cc0ee93 Subproject commit c53aff46fc42344958c42d0b69b27f992fc8d979

View File

@ -11,6 +11,8 @@ public:
Actor(); // FIXME Actor(); // FIXME
~Actor() override; ~Actor() override;
SEAD_RTTI_OVERRIDE(Actor, BaseProc)
void emitBasicSigOn(); void emitBasicSigOn();
void emitBasicSigOff(); void emitBasicSigOff();
}; };

View File

@ -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

View File

@ -1,5 +1,8 @@
#pragma once #pragma once
#include <basis/seadTypes.h>
#include <prim/seadSafeString.h>
namespace ksys { namespace ksys {
namespace act { namespace act {
@ -9,9 +12,21 @@ class BaseProc;
/// Provides read-only access to actor data for safe, multi-threaded access. /// Provides read-only access to actor data for safe, multi-threaded access.
class ActorLinkConstDataAccess { class ActorLinkConstDataAccess {
public: public:
ActorLinkConstDataAccess() = default;
explicit ActorLinkConstDataAccess(BaseProc* proc) { acquire(proc); }
/// Destructor that automatically releases any acquired BaseProc.
~ActorLinkConstDataAccess(); ~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: private:
void debugLog(s32, const sead::SafeString& method_name);
bool mAcquired = false; bool mAcquired = false;
BaseProc* mProc = nullptr; BaseProc* mProc = nullptr;
}; };