diff options
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 |
