Program Listing for File events.h

Return to documentation for file (blam\components\events\events.h)

#pragma once

#include <vector>

enum EventType
{
    KeyPress,
    CharacterInput
};

#include "events/Event.hpp"
#include "events/CharacterInputEvent.hpp"
#include "events/KeyPressEvent.hpp"

#ifndef BLAM
#define BLAM
#endif



namespace Blam::Events
{
    class EventListener;
    BLAM void ResortListeners(EventListener* requesting_listener);

    class EventListener
    {
    private:
        std::vector<EventType> subscribed_events;
        int priority = 0;

    public:
        void Subscribe(EventType type)
        {
            subscribed_events.push_back(type);
        }

        std::vector<EventType> getSubscribedEvents()
        {
            return subscribed_events;
        }

        bool isSubscribed(EventType type)
        {
            for (int i = 0; i < subscribed_events.size(); i++)
            {
                if (subscribed_events.at(i) == type)
                {
                    return true;
                }
            }

            return false;
        }

        void SetPriority(int new_priority)
        {
            priority = new_priority;

            Blam::Events::ResortListeners(this);
        }

        int GetPriority()
        {
            return priority;
        }

        virtual void onCharacterInputEvent(Blam::Events::CharacterInputEvent* event) {}

        virtual void onKeyPressEvent(Blam::Events::KeyPressEvent* event) {}
    };

    BLAM void FireEvent(Event* event);

    BLAM void RegisterListener(EventListener* listener);

    BLAM void ResortListeners(EventListener* requesting_listener);
}