From 728df4e785e340575377c101008fb3d9e8fba7a0 Mon Sep 17 00:00:00 2001 From: camila314 <47485054+camila314@users.noreply.github.com> Date: Mon, 13 Jan 2025 03:56:25 -0600 Subject: [PATCH] Event V2 system --- loader/include/Geode/Loader.hpp | 1 + loader/include/Geode/loader/EventV2.hpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 loader/include/Geode/loader/EventV2.hpp diff --git a/loader/include/Geode/Loader.hpp b/loader/include/Geode/Loader.hpp index a1bb4c37e..94b8143e3 100644 --- a/loader/include/Geode/Loader.hpp +++ b/loader/include/Geode/Loader.hpp @@ -5,6 +5,7 @@ #include "loader/Log.hpp" #include "loader/Mod.hpp" #include "loader/ModEvent.hpp" +#include "loader/EventV2.hpp" #include "loader/Setting.hpp" #include "loader/Dirs.hpp" diff --git a/loader/include/Geode/loader/EventV2.hpp b/loader/include/Geode/loader/EventV2.hpp new file mode 100644 index 000000000..296c472c3 --- /dev/null +++ b/loader/include/Geode/loader/EventV2.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "Event.hpp" + +namespace geode::event::v2 { + template + struct GEODE_DLL WrapFilter : public EventFilter { + std::function m_filterFunc; + + WrapFilter(std::function ff) : m_filterFunc(ff) {} + + ListenerResult handle(std::function fn, T* event) { + if (m_filterFunc(event)) + return fn(event); + return ListenerResult::Propagate; + } + }; + + template + struct GEODE_DLL EventHandler : public EventListener> { + EventHandler(std::function filterFunc) : EventListener>(WrapFilter(filterFunc)) {} + }; +}