From 25b228d588c95e85a7b0d439833e9d88ebd5c35f Mon Sep 17 00:00:00 2001 From: chatlanin Date: Thu, 6 Mar 2025 09:12:22 +0300 Subject: [PATCH] add new impl event manager --- bin/layers/local_panel/local_panel.cpp | 1 - src/event/event.hpp | 12 +++++++++--- src/utils/define.hpp | 5 ++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/bin/layers/local_panel/local_panel.cpp b/bin/layers/local_panel/local_panel.cpp index 4255d1b..78316b8 100755 --- a/bin/layers/local_panel/local_panel.cpp +++ b/bin/layers/local_panel/local_panel.cpp @@ -6,7 +6,6 @@ namespace sandbox void local_panel::on_attach() { VE_CONNECT(local_panel); - hack::log()("on_attach"); } void local_panel::render() diff --git a/src/event/event.hpp b/src/event/event.hpp index 0954bb1..9cc7f1c 100755 --- a/src/event/event.hpp +++ b/src/event/event.hpp @@ -39,14 +39,20 @@ namespace VE struct event_manager : public hack::patterns::singleton { std::vector> m_funcs; - void connect(event_fn fn) { m_funcs.push_back(fn); }; + + template + void connect(T* obj, void (T::*method)(event)) + { + m_funcs.push_back(std::bind(method, obj, std::placeholders::_1)); + } + void emit(event e) { - for(auto f : m_funcs) + for(auto func : m_funcs) { try { - f(e); + func(e); } catch(std::exception& e) { diff --git a/src/utils/define.hpp b/src/utils/define.hpp index f459283..5032d9e 100755 --- a/src/utils/define.hpp +++ b/src/utils/define.hpp @@ -10,7 +10,10 @@ void update() override;\ void on_event(VE::event e) override -#define VE_CONNECT(DEF_CLASS) VE::event_manager::instance().connect(std::bind(&DEF_CLASS::on_event, this, std::placeholders::_1)); +// #define VE_CONNECT(DEF_NAME, DEF_CLASS) VE::event_manager::instance().connect(DEF_NAME, std::bind(&DEF_CLASS::on_event, this, std::placeholders::_1)); + +#define VE_CONNECT(DEF_CLASS) VE::event_manager::instance().connect(this, &DEF_CLASS::on_event); + #define VE_EMIT(e) VE::event_manager::instance().emit(e) #define VE_PUSH_FONT(def_font, def_size)\