diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 84edb306..77d72ca6 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -94501,9 +94501,9 @@ 0x0000007101272f24,sub_7101272F24,100, 0x0000007101272f88,sub_7101272F88,52, 0x0000007101272fbc,sub_7101272FBC,52, -0x0000007101272ff0,evt::ActorBinder::init,64, -0x0000007101273030,evt::ActorActionBinder::bind,56, -0x0000007101273068,sub_7101273068,56, +0x0000007101272ff0,evt::ActorBinder::init,64,_ZN4ksys3res20EventFlowActorBinder4bindEPN4evfl12ActorBindingEPKNS2_8ResActorE +0x0000007101273030,evt::ActorActionBinder::bind,56,_ZN4ksys3res21EventFlowActionBinder4bindEPN4evfl12ActorBinding6ActionEPKNS2_9ResActionEPKNS2_8ResActorEPNS_3evt12ActorBindingE +0x0000007101273068,sub_7101273068,56,_ZN4ksys3res20EventFlowQueryBinder4bindEPN4evfl12ActorBinding5QueryEPKNS2_8ResQueryEPKNS2_8ResActorEPNS_3evt12ActorBindingE 0x00000071012730a0,EventMgrStruct1::ctor,312, 0x00000071012731d8,sub_71012731D8,348, 0x0000007101273334,sub_7101273334,60, diff --git a/lib/EventFlow b/lib/EventFlow index e2978fa4..18dcfd78 160000 --- a/lib/EventFlow +++ b/lib/EventFlow @@ -1 +1 @@ -Subproject commit e2978fa46508b16d12817d5ccc05455906a4b4e1 +Subproject commit 18dcfd780faf1d5af5b089b92db5cfd329a306d6 diff --git a/src/KingSystem/Event/CMakeLists.txt b/src/KingSystem/Event/CMakeLists.txt index 3a5dd1e5..776f7b81 100644 --- a/src/KingSystem/Event/CMakeLists.txt +++ b/src/KingSystem/Event/CMakeLists.txt @@ -3,6 +3,8 @@ target_sources(uking PRIVATE evtActorBinding.h evtActorBindings.cpp evtActorBindings.h + evtActorManager.cpp + evtActorManager.h evtDemoInfo.cpp evtDemoInfo.h evtEvent.cpp diff --git a/src/KingSystem/Event/evtActorManager.cpp b/src/KingSystem/Event/evtActorManager.cpp new file mode 100644 index 00000000..11f57ba5 --- /dev/null +++ b/src/KingSystem/Event/evtActorManager.cpp @@ -0,0 +1 @@ +#include "KingSystem/Event/evtActorManager.h" diff --git a/src/KingSystem/Event/evtActorManager.h b/src/KingSystem/Event/evtActorManager.h new file mode 100644 index 00000000..b765d279 --- /dev/null +++ b/src/KingSystem/Event/evtActorManager.h @@ -0,0 +1,18 @@ +#pragma once + +namespace evfl { +struct ActionArg; +class ActionDoneHandler; +struct QueryArg; +} // namespace evfl + +namespace ksys::evt { + +// TODO +class ActorManager { +public: + static void actionHandler(const evfl::ActionArg& arg, evfl::ActionDoneHandler handler); + static int queryHandler(const evfl::QueryArg& arg); +}; + +} // namespace ksys::evt diff --git a/src/KingSystem/Resource/CMakeLists.txt b/src/KingSystem/Resource/CMakeLists.txt index 51b24dc7..8d4ab270 100644 --- a/src/KingSystem/Resource/CMakeLists.txt +++ b/src/KingSystem/Resource/CMakeLists.txt @@ -194,6 +194,8 @@ target_sources(uking PRIVATE Actor/resResourceUMii.cpp Actor/resResourceUMii.h + Event/resEventFlowBinder.cpp + Event/resEventFlowBinder.h Event/resDemoASLoader.cpp Event/resDemoASLoader.h Event/resResourceDemo.cpp diff --git a/src/KingSystem/Resource/Event/resEventFlowBinder.cpp b/src/KingSystem/Resource/Event/resEventFlowBinder.cpp new file mode 100644 index 00000000..49e26790 --- /dev/null +++ b/src/KingSystem/Resource/Event/resEventFlowBinder.cpp @@ -0,0 +1,37 @@ +#include "KingSystem/Resource/Event/resEventFlowBinder.h" +#include "KingSystem/Event/evtActorBinding.h" +#include "KingSystem/Event/evtActorBindings.h" +#include "KingSystem/Event/evtActorManager.h" + +namespace ksys::res { + +void EventFlowActorBinder::bind(evfl::ActorBinding* evfl_binding, + const evfl::ResActor* evfl_actor) { + auto* binding = mBindings->bindActor(evfl_actor, mHeap); + if (binding) { + evfl_binding->SetUserData(binding); + evfl_binding->SetInitialized(true); + } +} + +void EventFlowActionBinder::bind(evfl::ActorBinding::Action* evfl_binding, + const evfl::ResAction* evfl_action, + const evfl::ResActor* evfl_actor, evt::ActorBinding* binding) { + if (binding) + binding->bindAction(evfl_action); + + evfl_binding->handler = evt::ActorManager::actionHandler; + evfl_binding->user_data = nullptr; +} + +void EventFlowQueryBinder::bind(evfl::ActorBinding::Query* evfl_binding, + const evfl::ResQuery* evfl_query, const evfl::ResActor* evfl_actor, + evt::ActorBinding* binding) { + if (binding) + binding->bindQuery(evfl_query); + + evfl_binding->handler = evt::ActorManager::queryHandler; + evfl_binding->user_data = nullptr; +} + +} // namespace ksys::res diff --git a/src/KingSystem/Resource/Event/resEventFlowBinder.h b/src/KingSystem/Resource/Event/resEventFlowBinder.h new file mode 100644 index 00000000..fcdd36be --- /dev/null +++ b/src/KingSystem/Resource/Event/resEventFlowBinder.h @@ -0,0 +1,44 @@ +#pragma once + +#include + +namespace sead { +class Heap; +} + +namespace ksys::evt { +class ActorBinding; +class ActorBindings; +} // namespace ksys::evt + +namespace ksys::res { + +class EventFlowBinder { +public: + EventFlowBinder(evt::ActorBindings* bindings, sead::Heap* heap) + : mBindings(bindings), mHeap(heap) {} + virtual ~EventFlowBinder() = default; + +protected: + evt::ActorBindings* mBindings; + sead::Heap* mHeap; +}; + +class EventFlowActorBinder : public EventFlowBinder { +public: + void bind(evfl::ActorBinding* evfl_binding, const evfl::ResActor* evfl_actor); +}; + +class EventFlowActionBinder : public EventFlowBinder { +public: + void bind(evfl::ActorBinding::Action* evfl_binding, const evfl::ResAction* evfl_action, + const evfl::ResActor* evfl_actor, evt::ActorBinding* binding); +}; + +class EventFlowQueryBinder : public EventFlowBinder { +public: + void bind(evfl::ActorBinding::Query* evfl_binding, const evfl::ResQuery* evfl_query, + const evfl::ResActor* evfl_actor, evt::ActorBinding* binding); +}; + +} // namespace ksys::res