diff options
Diffstat (limited to 'mwe/events/src')
-rw-r--r-- | mwe/events/src/eventManager.cpp | 152 | ||||
-rw-r--r-- | mwe/events/src/main.cpp | 25 |
2 files changed, 0 insertions, 177 deletions
diff --git a/mwe/events/src/eventManager.cpp b/mwe/events/src/eventManager.cpp index e022849..c37dcb0 100644 --- a/mwe/events/src/eventManager.cpp +++ b/mwe/events/src/eventManager.cpp @@ -1,6 +1,5 @@ #include "eventManager.h" -<<<<<<< HEAD void EventManager::shutdown() { subscribers.clear(); @@ -96,155 +95,4 @@ void EventManager::dispatchEvents() ++eventIt; } } -======= -void EventManager::shutdown() { m_subscribers.clear(); } - -void EventManager::subscribe(int eventType, - std::unique_ptr<IEventHandlerWrapper> && handler, - int eventId) { - if (eventId) { - std::unordered_map< - int, std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>>:: - iterator subscribers - = m_subscribersByEventId.find(eventType); - - if (subscribers != m_subscribersByEventId.end()) { - std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>> & - handlersMap - = subscribers->second; - std::unordered_map< - int, - std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator - handlers - = handlersMap.find(eventId); - if (handlers != handlersMap.end()) { - handlers->second.emplace_back(std::move(handler)); - return; - } - } - m_subscribersByEventId[eventType][eventId].emplace_back( - std::move(handler)); - - } else { - std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator - subscribers - = m_subscribers.find(eventType); - if (subscribers != m_subscribers.end()) { - std::vector<std::unique_ptr<IEventHandlerWrapper>> & handlers - = subscribers->second; - for (std::unique_ptr<IEventHandlerWrapper> & it : handlers) { - if (it->getType() == handler->getType()) { - // log for double register - return; - } - } - handlers.emplace_back(std::move(handler)); - } else { - m_subscribers[eventType].emplace_back(std::move(handler)); - } - } -} - -void EventManager::unsubscribe(int eventType, const std::string & handlerName, - int eventId) { - if (eventId) { - std::unordered_map< - int, std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>>:: - iterator subscribers - = m_subscribersByEventId.find(eventType); - if (subscribers != m_subscribersByEventId.end()) { - std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>> & - handlersMap - = subscribers->second; - std::unordered_map< - int, - std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator - handlers - = handlersMap.find(eventId); - if (handlers != handlersMap.end()) { - std::vector<std::unique_ptr<IEventHandlerWrapper>> & callbacks - = handlers->second; - for (std::vector< - std::unique_ptr<IEventHandlerWrapper>>::iterator it - = callbacks.begin(); - it != callbacks.end(); ++it) { - if (it->get()->getType() == handlerName) { - it = callbacks.erase(it); - return; - } - } - } - } - } else { - std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator - handlersIt - = m_subscribers.find(eventType); - if (handlersIt != m_subscribers.end()) { - std::vector<std::unique_ptr<IEventHandlerWrapper>> & handlers - = handlersIt->second; - for (std::vector<std::unique_ptr<IEventHandlerWrapper>>::iterator it - = handlers.begin(); - it != handlers.end(); ++it) { - if (it->get()->getType() == handlerName) { - it = handlers.erase(it); - return; - } - } - } - } -} - -void EventManager::triggerEvent(const Event & event_, int eventId) { - std::vector<std::unique_ptr<IEventHandlerWrapper>> & handlers - = m_subscribers[event_.getEventType()]; - for (std::unique_ptr<IEventHandlerWrapper> & handler : handlers) { - handler->exec(event_); - } - - std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>> & handlersMap - = m_subscribersByEventId[event_.getEventType()]; - std::unordered_map< - int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>::iterator - handlersIt - = handlersMap.find(eventId); - if (handlersIt != handlersMap.end()) { - std::vector<std::unique_ptr<IEventHandlerWrapper>> & callbacks - = handlersIt->second; - for (std::vector<std::unique_ptr<IEventHandlerWrapper>>::iterator it - = callbacks.begin(); - it != callbacks.end();) { - std::unique_ptr<IEventHandlerWrapper> & handler = *it; - handler->exec(event_); - if (handler->isDestroyOnSuccess()) { - it = callbacks.erase(it); - } else { - ++it; - } - } - } -} - -void EventManager::queueEvent(std::unique_ptr<Event> && event_, int eventId) { - m_eventsQueue.emplace_back(std::move(event_), eventId); -} - -void EventManager::dispatchEvents() { - for (std::vector<std::pair<std::unique_ptr<Event>, int>>::iterator eventIt - = m_eventsQueue.begin(); - eventIt != m_eventsQueue.end();) { - if (!eventIt->first.get()->getHandled()) { - triggerEvent(*eventIt->first.get(), eventIt->second); - eventIt = m_eventsQueue.erase(eventIt); - } else { - ++eventIt; - } - } ->>>>>>> b3b762a34e7ccb4a0dcd041a693ac7180af16002 } diff --git a/mwe/events/src/main.cpp b/mwe/events/src/main.cpp index 971ca35..d056f85 100644 --- a/mwe/events/src/main.cpp +++ b/mwe/events/src/main.cpp @@ -3,13 +3,9 @@ #include <SDL2/SDL.h> #include <iostream> #include <memory> -<<<<<<< HEAD #include "loopManager.h" #include "event.h" #include "customTypes.h" -======= - ->>>>>>> b3b762a34e7ccb4a0dcd041a693ac7180af16002 class PlayerDamagedEvent : public Event { public: PlayerDamagedEvent(int damage, int playerID) @@ -17,15 +13,9 @@ public: REGISTER_EVENT_TYPE(PlayerDamagedEvent); -<<<<<<< HEAD int getDamage() const { return damage; } int getPlayerID() const { return playerID; } -======= - int getDamage() const { return damage; } - int getPlayerID() const { return playerID; } - ->>>>>>> b3b762a34e7ccb4a0dcd041a693ac7180af16002 private: int damage; int playerID; @@ -35,7 +25,6 @@ void onPlayerDamaged(const PlayerDamagedEvent & e) { << " damage." << std::endl; } -<<<<<<< HEAD void onKeyPressed1(const KeyPressedEvent& e) { int keyCode = e.getKeyCode(); @@ -54,11 +43,6 @@ void testCollisionEvent() { subscribe<CollisionEvent>(CollisionHandler,1); // EventHandler<PlayerDamagedEvent> triggerEvent(CollisionEvent(testCollision), 1); -======= -void onKeyPressed(const KeyPressedEvent & e) { - const int keyCode = e.getKeyCode(); - fprintf(stderr, "KeyCode %d\n", keyCode); ->>>>>>> b3b762a34e7ccb4a0dcd041a693ac7180af16002 } int main(int argc, char * args[]) { LoopManager gameLoop; @@ -69,20 +53,11 @@ int main(int argc, char * args[]) { // custom event class poc subscribe<PlayerDamagedEvent>(onPlayerDamaged); triggerEvent(PlayerDamagedEvent(50, 1)); -<<<<<<< HEAD subscribe<KeyPressedEvent>(onKeyPressed,1,false); subscribe<KeyPressedEvent>(onKeyPressed1,false); // queueEvent(std::move(anotherKeyPressEvent)); triggerEvent(KeyPressedEvent(42), 1); -======= - //EventHandler<KeyPressedEvent> callback = onKeyPressed; - //subscribe<KeyPressedEvent>(callback,false); - std::unique_ptr<Event> anotherKeyPressEvent - = std::make_unique<KeyPressedEvent>(65); - queueEvent(std::move(anotherKeyPressEvent)); - triggerEvent(KeyPressedEvent(42)); ->>>>>>> b3b762a34e7ccb4a0dcd041a693ac7180af16002 EventManager::getInstance().dispatchEvents(); //collision event call testCollisionEvent(); |