summaryrefslogtreecommitdiff
path: root/src/KingSystem/Event/evtActorBindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/KingSystem/Event/evtActorBindings.cpp')
-rw-r--r--src/KingSystem/Event/evtActorBindings.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/KingSystem/Event/evtActorBindings.cpp b/src/KingSystem/Event/evtActorBindings.cpp
index 3c77be0d..a2725d1a 100644
--- a/src/KingSystem/Event/evtActorBindings.cpp
+++ b/src/KingSystem/Event/evtActorBindings.cpp
@@ -1 +1,52 @@
#include "KingSystem/Event/evtActorBindings.h"
+#include <evfl/ResActor.h>
+#include "KingSystem/Event/evtActorBinding.h"
+
+namespace ksys::evt {
+
+void ActorBindings::allocBindings(sead::Heap* heap) {
+ if (mNumActorsToAlloc != 0)
+ mBindings.allocBuffer(mNumActorsToAlloc, heap);
+}
+
+void ActorBindings::allocBindingsActions(sead::Heap* heap) {
+ for (int i = 0; i < mBindings.size(); ++i)
+ mBindings[i]->allocActions(heap);
+}
+
+void ActorBindings::allocBindingsQueries(sead::Heap* heap) {
+ for (int i = 0; i < mBindings.size(); ++i)
+ mBindings[i]->allocQueries(heap);
+}
+
+ActorBindings::~ActorBindings() {
+ for (int i = 0; i < mBindings.size(); ++i) {
+ mBindings[i]->finalize();
+ delete mBindings[i];
+ }
+ mBindings.freeBuffer();
+}
+
+ActorBinding* ActorBindings::bindActor(const evfl::ResActor* res_actor, sead::Heap* heap) {
+ if (mBindings.isBufferReady()) {
+ for (int i = 0; i < mBindings.size(); ++i) {
+ const char* name = res_actor->name.Get()->data();
+ const char* sub_name = res_actor->secondary_name.Get()->data();
+
+ if (sead::SafeString(mBindings[i]->getRes()->name.Get()->data()) != name)
+ continue;
+ if (sead::SafeString(mBindings[i]->getRes()->secondary_name.Get()->data()) != sub_name)
+ continue;
+ return mBindings[i];
+ }
+
+ auto* binding = new (heap) ActorBinding(res_actor, this);
+ mBindings.pushBack(binding);
+ return binding;
+ }
+
+ ++mNumActorsToAlloc;
+ return nullptr;
+}
+
+} // namespace ksys::evt