Program Listing for File EventManager.hpp

Return to documentation for file (engine/include/Cacao/EventManager.hpp)

#pragma once

#include <map>
#include <vector>

#include "Event.hpp"
#include "EventConsumer.hpp"
#include "DllHelper.hpp"

namespace Cacao {
    class CACAO_API EventManager {
      public:
        static EventManager& Get();

        EventManager(const EventManager&) = delete;
        EventManager(EventManager&&) = delete;
        EventManager& operator=(const EventManager&) = delete;
        EventManager& operator=(EventManager&&) = delete;

        void SubscribeConsumer(std::string type, const EventConsumer& consumer);

        void UnsubscribeConsumer(std::string type, const EventConsumer& consumer);

        void UnsubscribeAllConsumers();

        void Dispatch(Event& event);

      private:
        //Map of event types to list of consumers
        std::map<std::string, std::vector<EventConsumer>> consumers;

        EventManager() {}
        ~EventManager() {
            UnsubscribeAllConsumers();
        }
    };
}