From afd54a64e40aff6729b94356e0393eafe2be2f34 Mon Sep 17 00:00:00 2001
From: altalk23 <45172705+altalk23@users.noreply.github.com>
Date: Sun, 25 Feb 2024 10:38:46 +0300
Subject: [PATCH] fix dispatch

---
 loader/include/Geode/loader/Dispatch.hpp | 20 ++++++++++++--------
 loader/src/loader/Dispatch.cpp           |  8 ++++++++
 loader/test/dependency/main.cpp          |  2 +-
 loader/test/main/main.cpp                | 13 ++++++++++++-
 4 files changed, 33 insertions(+), 10 deletions(-)
 create mode 100644 loader/src/loader/Dispatch.cpp

diff --git a/loader/include/Geode/loader/Dispatch.hpp b/loader/include/Geode/loader/Dispatch.hpp
index c1edc075..69130b0b 100644
--- a/loader/include/Geode/loader/Dispatch.hpp
+++ b/loader/include/Geode/loader/Dispatch.hpp
@@ -9,6 +9,8 @@
 namespace geode {
     // Mod interoperability
 
+    std::unordered_map<std::string, EventListenerPool*>& dispatchPools();
+
     template <class... Args>
     class DispatchEvent : public Event {
     protected:
@@ -26,6 +28,13 @@ namespace geode {
         std::string getID() const {
             return m_id;
         }
+
+        EventListenerPool* getPool() const override {
+            if (dispatchPools().count(m_id) == 0) {
+                dispatchPools()[m_id] = new DefaultEventListenerPool();
+            }
+            return dispatchPools()[m_id];
+        }
     };
 
     template <class... Args>
@@ -33,20 +42,15 @@ namespace geode {
     protected:
         std::string m_id;
 
-        static auto& pools() {
-            static std::unordered_map<std::string, EventListenerPool*> s_pools;
-            return s_pools;
-        }
-
     public:
         using Ev = DispatchEvent<Args...>;
         using Callback = ListenerResult(Args...);
 
         EventListenerPool* getPool() const {
-            if (pools().count(m_id) == 0) {
-                pools()[m_id] = new DefaultEventListenerPool();
+            if (dispatchPools().count(m_id) == 0) {
+                dispatchPools()[m_id] = new DefaultEventListenerPool();
             }
-            return pools()[m_id];
+            return dispatchPools()[m_id];
         }
 
         ListenerResult handle(utils::MiniFunction<Callback> fn, Ev* event) {
diff --git a/loader/src/loader/Dispatch.cpp b/loader/src/loader/Dispatch.cpp
new file mode 100644
index 00000000..53ef91af
--- /dev/null
+++ b/loader/src/loader/Dispatch.cpp
@@ -0,0 +1,8 @@
+#include <Geode/loader/Dispatch.hpp>
+
+using namespace geode::prelude;
+
+std::unordered_map<std::string, EventListenerPool*>& geode::dispatchPools() {
+    static std::unordered_map<std::string, EventListenerPool*> pools;
+    return pools;
+}
\ No newline at end of file
diff --git a/loader/test/dependency/main.cpp b/loader/test/dependency/main.cpp
index 34cccb33..c9a898fd 100644
--- a/loader/test/dependency/main.cpp
+++ b/loader/test/dependency/main.cpp
@@ -171,5 +171,5 @@ $on_mod(Loaded) {
     	label->setZOrder(99999);
     	gl->addChild(label);
         return ListenerResult::Propagate;
-    }, MyDispatchFilter("geode.testdep/test-garage-open"));
+    }, MyDispatchFilter("geode.test/test-garage-open"));
 }
\ No newline at end of file
diff --git a/loader/test/main/main.cpp b/loader/test/main/main.cpp
index 07f8fdc3..b4b2e686 100644
--- a/loader/test/main/main.cpp
+++ b/loader/test/main/main.cpp
@@ -16,10 +16,13 @@ $on_mod(Loaded) {
     log::info("Loaded");
 }
 
+static std::string s_recievedEvent;
+
 // Events
 $execute {
     new EventListener<TestEventFilter>(+[](TestEvent* event) {
         log::info("Received event: {}", event->getData());
+        s_recievedEvent = event->getData();
     });
 }
 
@@ -99,7 +102,15 @@ struct GJGarageLayerTest : Modify<GJGarageLayerTest, GJGarageLayer> {
         addChild(label2);
 
         // Dispatch system pt. 1
-        MyDispatchEvent("test-garage-open"_spr, this).post();
+        MyDispatchEvent("geode.test/test-garage-open", this).post();
+
+        if (s_recievedEvent.size() > 0) {
+            auto label = CCLabelBMFont::create("Event works!", "bigFont.fnt");
+            label->setPosition(100, 70);
+            label->setScale(.4f);
+            label->setZOrder(99999);
+            addChild(label);
+        }
 
         return true;
     }