From fb70135c3e71f8d3afa0114339ffb6cd6c2304ff Mon Sep 17 00:00:00 2001 From: dP Date: Tue, 7 Jul 2020 21:50:27 +0300 Subject: [PATCH] Allow multiple event handlers for the same slot --- src/citymania/cm_event.hpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/citymania/cm_event.hpp b/src/citymania/cm_event.hpp index 2a5fe1eb7c..4c0bde4fdd 100644 --- a/src/citymania/cm_event.hpp +++ b/src/citymania/cm_event.hpp @@ -107,10 +107,11 @@ struct CompanyBalanceChanged { }; enum class Slot : uint8 { - CONTROLLER = 10, - GAME = 20, - CONTROLLER_POST = 30, - RECORDER = 40, + GOAL = 10, + CONTROLLER = 20, + GAME = 30, + CONTROLLER_POST = 40, + RECORDER = 50, }; class TypeDispatcherBase { @@ -128,11 +129,7 @@ public: virtual ~TypeDispatcher() {} void listen(Slot slot, Handler &handler) { - auto p = this->handler_map.find(slot); - if (p != this->handler_map.end()) - IConsolePrintF(CC_ERROR, "ERROR: Ignored duplicate handler for event %s slot %d", typeid(T).name(), (int)slot); - this->handler_map.insert(p, std::make_pair(slot, handler)); - this->new_handlers = true; + this->handler_map.insert(std::make_pair(slot, handler)); } void emit(const T &event) { @@ -149,7 +146,7 @@ public: protected: std::vector handlers; - std::map handler_map; + std::multimap handler_map; bool new_handlers = false; };