diff options
| author | Léo Lam <leo@leolam.fr> | 2020-11-08 13:55:12 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-11-08 15:13:59 +0100 |
| commit | aa92bf882c41b292a9ee11b6ec5ba8593b4b4fc2 (patch) | |
| tree | 43276b3ef760144aafdd22d531176ff76a54c80e /src/KingSystem/ActorSystem/actActorParam.cpp | |
| parent | 23ec19806c606e9a3c44f1b4360e421151362bef (diff) | |
ksys/act: Implement more ActorParam functions
Diffstat (limited to 'src/KingSystem/ActorSystem/actActorParam.cpp')
| -rw-r--r-- | src/KingSystem/ActorSystem/actActorParam.cpp | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/src/KingSystem/ActorSystem/actActorParam.cpp b/src/KingSystem/ActorSystem/actActorParam.cpp index bfe08fed..bcc3a045 100644 --- a/src/KingSystem/ActorSystem/actActorParam.cpp +++ b/src/KingSystem/ActorSystem/actActorParam.cpp @@ -1,4 +1,5 @@ #include "KingSystem/ActorSystem/actActorParam.h" +#include <basis/seadRawPrint.h> #include <prim/seadScopedLock.h> namespace ksys::act { @@ -34,7 +35,7 @@ void ActorParam::deleteData() { deleteResHandles(); mActorName = ""; - _168 = 0; + mRefCount = 0; _a = 0; mRes = {}; mEvent.resetSignal(); @@ -49,4 +50,79 @@ bool ActorParam::isDummyParam(res::ActorLink::Users::User user) const { return mRes.mActorLink->getUsers().getUserName(user) == "Dummy"; } +void ActorParam::allocResHandles(sead::Heap* heap, u32 buffer_idx, s32 count) { + SEAD_ASSERT(buffer_idx == 0 || buffer_idx == 1); + mHandles[buffer_idx].allocBufferAssert(count, heap); + mNumHandles[buffer_idx] = 0; +} + +s32 ActorParam::incrementRef() { + auto lock = sead::makeScopedLock(mCS); + return ++mRefCount; +} + +s32 ActorParam::decrementRef() { + auto lock = sead::makeScopedLock(mCS); + + if (mActorName.isEmpty()) + return 0; + + if (--mRefCount == 0) + deleteData(); + + return mRefCount; +} + +void ActorParam::setEventSignal() { + mEvent.setSignal(); +} + +void ActorParam::waitForEvent() { + mEvent.wait(); +} + +bool ActorParam::isSignalSet() const { + return mEvent.isSignalSet(); +} + +res::Handle* ActorParam::allocHandle() { + const auto idx = mNumHandles[mActiveBufferIdx]; + ++mNumHandles[mActiveBufferIdx]; + return &mHandles[mActiveBufferIdx][idx]; +} + +void ActorParam::freeLastHandle() { + --mNumHandles[mActiveBufferIdx]; +} + +void ActorParam::setResource(ResourceType type, ParamIO* param_io) { + const auto idx = u32(type); + mRes.mArray[idx] = param_io; + param_io->setIndex(idx); +} + +bool ActorParam::setPriority(const sead::SafeString& priority) { + if (priority == "PlayerBefore") { + mPriority = Priority::PlayerBefore; + return true; + } + + if (priority == "Player") { + mPriority = Priority::Player; + return true; + } + + if (priority == "PlayerAfter") { + mPriority = Priority::PlayerAfter; + return true; + } + + if (priority == "AllAfter") { + mPriority = Priority::AllAfter; + return true; + } + + return false; +} + } // namespace ksys::act |
