ksys: Add EventFlowBinder

This commit is contained in:
Léo Lam 2021-06-17 11:07:23 +02:00
parent 1f628bb94a
commit 4014329dc2
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
8 changed files with 108 additions and 4 deletions

View File

@ -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,

Can't render this file because it is too large.

@ -1 +1 @@
Subproject commit e2978fa46508b16d12817d5ccc05455906a4b4e1
Subproject commit 18dcfd780faf1d5af5b089b92db5cfd329a306d6

View File

@ -3,6 +3,8 @@ target_sources(uking PRIVATE
evtActorBinding.h
evtActorBindings.cpp
evtActorBindings.h
evtActorManager.cpp
evtActorManager.h
evtDemoInfo.cpp
evtDemoInfo.h
evtEvent.cpp

View File

@ -0,0 +1 @@
#include "KingSystem/Event/evtActorManager.h"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,44 @@
#pragma once
#include <evfl/ResActor.h>
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