21 virtual std::string
GetID() = 0;
27 template<
typename... Args>
36 storedArgs = std::forward_as_tuple(args...);
41 std::apply(function, storedArgs);
45 std::string
GetID()
override {
return ""; };
49 std::tuple<Args...> storedArgs;
58 virtual std::string
GetID() = 0;
64 template<
typename EventT>
78 if (function && eventPtr) {
87 "0123456789!^#%&=*?+-_/"
89 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
90 std::random_device dev;
91 std::mt19937 rand(dev());
92 std::uniform_int_distribution<> dist(0,str.size() - 1);
94 for(
int i = 0; i < 32; i++)
95 uuid += str[dist(rand)];
100 std::string
GetID()
override {
return uuid; }
104 const EventT* eventPtr =
nullptr;
110 template<
typename... Args>
114 delegates.push_back(delegate);
119 for (
auto& delegate : delegates) {
120 auto typedDelegate = std::dynamic_pointer_cast<
Delegate<Args...>>(delegate);
122 typedDelegate->SetArgs(std::forward<Args>(args)...);
123 typedDelegate->Execute();
129 std::vector<std::shared_ptr<IDelegate>> delegates;
134 template<
typename T,
typename... Args>
136 return std::make_shared<
Delegate<Args...>>([obj, func](Args... args) {
137 (obj->*func)(std::forward<Args>(args)...);
std::function< void(Args...)> FunctionType
std::string GetID() override
void SetArgs(Args... args)
Delegate(FunctionType func)
virtual ~EventDelegateBase()=default
virtual std::string GetID()=0
std::string GenerateID()
Assigns a fresh random 32-character ID, used to identify this delegate for unregistration.
void SetEvent(const EventT &event)
std::function< void(const EventT &)> FunctionType
EventDelegate(FunctionType func)
std::string GetID() override
virtual ~IDelegate()=default
virtual std::string GetID()=0
void AddDelegate(std::shared_ptr< IDelegate > delegate)
void Broadcast(Args... args)
Sets args on and executes every registered delegate that matches Args.
Root namespace for everything the engine exposes.
std::shared_ptr< Delegate< Args... > > CreateDelegate(T *obj, void(T::*func)(Args...))
Wraps a member function bound to obj into a shared Delegate.