summaryrefslogtreecommitdiff
path: root/src/KingSystem/ActorSystem/actActorParam.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/KingSystem/ActorSystem/actActorParam.cpp')
-rw-r--r--src/KingSystem/ActorSystem/actActorParam.cpp78
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