From 677ead1195d02976c50954206ac3ebcc3bfa6067 Mon Sep 17 00:00:00 2001 From: chatlanin Date: Mon, 9 Jun 2025 13:54:56 +0300 Subject: [PATCH] add returned event field --- example/layers/ui_layer/ui_layer.cpp | 20 ++++++++-- .../ui_layer_double/ui_layer_double.cpp | 12 ++++-- example/layers/utils.hpp | 3 +- src/vertex_engine/event/connector.hpp | 15 +------- src/vertex_engine/event/event.hpp | 5 ++- src/vertex_engine/event/event_manager.hpp | 4 +- src/vertex_engine/glfw/glfw.cpp | 37 +++++++++++++------ src/vertex_engine/layer/layer.hpp | 2 +- src/vertex_engine/utils/define.hpp | 2 +- src/vertex_engine/utils/using.hpp | 2 +- 10 files changed, 63 insertions(+), 39 deletions(-) diff --git a/example/layers/ui_layer/ui_layer.cpp b/example/layers/ui_layer/ui_layer.cpp index cfaba3a..12046bb 100755 --- a/example/layers/ui_layer/ui_layer.cpp +++ b/example/layers/ui_layer/ui_layer.cpp @@ -47,14 +47,25 @@ namespace example if (!ImGui::Begin(VE_NAME("Test signal"), nullptr, m_win_flags)) ImGui::End(); if (ImGui::Button("Test signal", ImVec2(128, 130))) - EMIT(test_event::TEST_EVEN, std::string("test event message"), "asdf-asdf-asdf", "test event log msg"); + { + VE::event e { test_event::TEST_EVEN_1, std::string("test event 1 message"), "asdf-asdf-asdf" }; + EMIT(e); + auto r = std::any_cast(e.m_result); + hack::log()(r); + + e = { test_event::TEST_EVEN_2, std::string("test event 2 message") }; + EMIT(e); + r = std::any_cast(e.m_result); + hack::log()(r); + } + VE_POP_FONT(); ImGui::End(); } - void ui_layer::on_event(VE::event e) + void ui_layer::on_event(VE::event& e) { // для событий от перефирии // if (e.m_type.type() == typeid(VE::event_type)) @@ -67,8 +78,11 @@ namespace example if (e.m_type.type() == typeid(test_event)) { auto t = std::any_cast(e.m_type); - if (t == test_event::TEST_EVEN) + if (t == test_event::TEST_EVEN_1) + { hack::log()(std::any_cast(e.m_data)); + e.m_result = std::string("test_event_1"); + } } } diff --git a/example/layers/ui_layer_double/ui_layer_double.cpp b/example/layers/ui_layer_double/ui_layer_double.cpp index 61948b8..f660e77 100755 --- a/example/layers/ui_layer_double/ui_layer_double.cpp +++ b/example/layers/ui_layer_double/ui_layer_double.cpp @@ -26,7 +26,10 @@ namespace example VE_PUSH_FONT(REGULAR, 20); if (ImGui::Button("Test signal_double", ImVec2(128, 130))) - EMIT(test_event::TEST_EVEN, std::string("test event message ui_layer_double")); + { + VE::event e { test_event::TEST_EVEN_2, std::string("test event message ui_layer_double") }; + EMIT(e); + } if (ImGui::Button("Test on_detach", ImVec2(128, 130))) on_detach(); if (ImGui::Button("Test on_attach", ImVec2(128, 130))) on_attach(); @@ -39,7 +42,7 @@ namespace example ImGui::End(); } - void ui_layer_double::on_event(VE::event e) + void ui_layer_double::on_event(VE::event& e) { // для событий от перефирии // if (e.m_type.type() == typeid(VE::event_type)) @@ -52,8 +55,11 @@ namespace example if (e.m_type.type() == typeid(test_event)) { auto t = std::any_cast(e.m_type); - if (t == test_event::TEST_EVEN) + if (t == test_event::TEST_EVEN_2) + { hack::log()(std::any_cast(e.m_data)); + e.m_result = std::string("test_event_2"); + } } } diff --git a/example/layers/utils.hpp b/example/layers/utils.hpp index d3f6996..04f72d8 100644 --- a/example/layers/utils.hpp +++ b/example/layers/utils.hpp @@ -4,6 +4,7 @@ namespace example { enum class test_event { - TEST_EVEN + TEST_EVEN_1, + TEST_EVEN_2 }; } diff --git a/src/vertex_engine/event/connector.hpp b/src/vertex_engine/event/connector.hpp index 7ebd295..56e5ef5 100755 --- a/src/vertex_engine/event/connector.hpp +++ b/src/vertex_engine/event/connector.hpp @@ -30,24 +30,11 @@ namespace VE } public: - template - static void EMIT(TYPE t, DATA d, std::string id = hack::security::generate_uuid(), std::string msg = "") - { - event e{ t, d, id }; - if (msg != "") e.m_event_log_message = msg; - event_manager::instance().emit(e); - } - - static void EMIT(event e) + static void EMIT(event& e) { event_manager::instance().emit(e); } - void log() - { - hack::log()("key = ", m_key); - } - private: std::string m_key; }; diff --git a/src/vertex_engine/event/event.hpp b/src/vertex_engine/event/event.hpp index d379f4e..ffb29d9 100755 --- a/src/vertex_engine/event/event.hpp +++ b/src/vertex_engine/event/event.hpp @@ -8,12 +8,13 @@ namespace VE { struct event { - event(std::any type, std::any data, std::string id) : m_type{ type }, m_data{ data }, m_id { id } {} + event(std::any type, std::any data, std::string id = hack::security::generate_uuid()) : m_type{ type }, m_data{ data }, m_id { id } {} ~event() = default; std::any m_type; std::any m_data; - std::string m_id = hack::security::generate_uuid(); + std::any m_result; + std::string m_id; std::string m_event_log_message; std::string m_event_id = hack::security::generate_uuid(); }; diff --git a/src/vertex_engine/event/event_manager.hpp b/src/vertex_engine/event/event_manager.hpp index 67f3c8c..cc3aa9b 100755 --- a/src/vertex_engine/event/event_manager.hpp +++ b/src/vertex_engine/event/event_manager.hpp @@ -11,7 +11,7 @@ namespace VE struct event_manager : public hack::patterns::singleton { template - std::string connect(T* obj, void (T::*method)(event)) + std::string connect(T* obj, void (T::*method)(event&)) { std::string key = hack::security::generate_uuid(); m_funcs[key] = std::bind(method, obj, std::placeholders::_1); @@ -25,7 +25,7 @@ namespace VE m_funcs.erase(it); } - void emit(event e) + void emit(event& e) { if (m_funcs.size() == 0) { diff --git a/src/vertex_engine/glfw/glfw.cpp b/src/vertex_engine/glfw/glfw.cpp index 187b37e..ac82bdc 100755 --- a/src/vertex_engine/glfw/glfw.cpp +++ b/src/vertex_engine/glfw/glfw.cpp @@ -124,17 +124,20 @@ namespace VE { case GLFW_PRESS: { - connector::EMIT(event_type::KEY_PRESSED, key); + event e { event_type::KEY_PRESSED, key }; + connector::EMIT(e); break; } case GLFW_RELEASE: { - connector::EMIT(event_type::KEY_RELEASED, key); + event e { event_type::KEY_RELEASED, key }; + connector::EMIT(e); break; } case GLFW_REPEAT: { - connector::EMIT(event_type::KEY_REPEATE, key); + event e { event_type::KEY_REPEATE, key }; + connector::EMIT(e); break; } } @@ -155,16 +158,23 @@ namespace VE std::chrono::duration duration = local - time; if (duration.count() > 10 && duration.count() < 200) - connector::EMIT(event_type::MOUSE_BUTTON_DOUBLE_PRESSED, button); + { + event e { event_type::MOUSE_BUTTON_DOUBLE_PRESSED, button }; + connector::EMIT(e); + } else - connector::EMIT(event_type::MOUSE_BUTTON_PRESSED, button); + { + event e { event_type::MOUSE_BUTTON_PRESSED, button }; + connector::EMIT(e); + } time = local; break; } case GLFW_RELEASE: { - connector::EMIT(event_type::MOUSE_BUTTON_RELEASED, button); + event e { event_type::MOUSE_BUTTON_RELEASED, button }; + connector::EMIT(e); break; } } @@ -175,7 +185,8 @@ namespace VE try { auto data = std::pair{ static_cast(xOffset), static_cast(yOffset) }; - connector::EMIT(event_type::MOUSE_SCROLL, data); + event e { event_type::MOUSE_SCROLL, data }; + connector::EMIT(e); } catch(std::exception& e) { @@ -188,7 +199,8 @@ namespace VE try { auto data = std::pair{ static_cast(xPos), static_cast(yPos) }; - connector::EMIT(event_type::MOUSE_CURSOR_POSITION, data); + event e { event_type::MOUSE_CURSOR_POSITION, data }; + connector::EMIT(e); } catch(std::exception& e) { @@ -210,7 +222,8 @@ namespace VE try { auto data = std::pair{ static_cast(width), static_cast(height) }; - connector::EMIT(event_type::WINDOW_RESIZE, data); + event e { event_type::WINDOW_RESIZE, data }; + connector::EMIT(e); } catch(std::exception& e) { @@ -222,7 +235,8 @@ namespace VE { try { - connector::EMIT(event_type::WINDOW_CLOSE, nullptr); + event e { event_type::WINDOW_CLOSE, nullptr }; + connector::EMIT(e); } catch(std::exception& e) { @@ -234,7 +248,8 @@ namespace VE { try { - connector::EMIT(event_type::WINDOW_FOCUS, focused); + event e { event_type::WINDOW_FOCUS, focused }; + connector::EMIT(e); } catch(std::exception& e) { diff --git a/src/vertex_engine/layer/layer.hpp b/src/vertex_engine/layer/layer.hpp index a308e24..ddfd176 100755 --- a/src/vertex_engine/layer/layer.hpp +++ b/src/vertex_engine/layer/layer.hpp @@ -19,7 +19,7 @@ namespace VE virtual void on_detach() {}; virtual void render() {}; virtual void update() {}; - virtual void on_event(event e) {}; + virtual void on_event(event& e) {}; protected: event_fn execute; diff --git a/src/vertex_engine/utils/define.hpp b/src/vertex_engine/utils/define.hpp index 2d23813..97e3d56 100755 --- a/src/vertex_engine/utils/define.hpp +++ b/src/vertex_engine/utils/define.hpp @@ -9,7 +9,7 @@ void on_detach() override;\ void render() override;\ void update() override;\ - void on_event(VE::event e) override + void on_event(VE::event& e) override #define VE_PUSH_FONT(def_font, def_size)\ ImGui::PushFont(VE::style::fonts::get_font(VE::style::fonts::font_type::def_font, def_size)) diff --git a/src/vertex_engine/utils/using.hpp b/src/vertex_engine/utils/using.hpp index 0f84d43..34f9626 100644 --- a/src/vertex_engine/utils/using.hpp +++ b/src/vertex_engine/utils/using.hpp @@ -5,7 +5,7 @@ namespace VE { template - using event_fn = std::function; + using event_fn = std::function; template using layers_stack = std::vector;