Program Listing for File events.cpp

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

#include "events.h"

#include <algorithm>

#include "components/core/logger/logger.h"
#include "components/core/utils/converters/converters.h"

using namespace Blam::Events;

std::vector<Blam::Events::EventListener*> listeners;

void notify_listener(Event* event, EventListener* listener)
{
    switch (event->GetEventType())
    {
        case EventType::CharacterInput:
        {
            listener->onCharacterInputEvent((CharacterInputEvent*)event);
            break;
        }
        case EventType::KeyPress:
        {
            listener->onKeyPressEvent((KeyPressEvent*)event);
            break;
        }
        default:
        {
            break;
        }
    }
}

void Blam::Events::FireEvent(Event* event)
{
    for (int i = listeners.size() - 1; i >= 0; i--)
    {
        EventListener* listener = listeners.at(i);

        if (listener->isSubscribed(event->GetEventType()))
        {
            if (!event->isCancelled())
            {
                notify_listener(event, listener);
            }
        }
    }
}

void Blam::Events::RegisterListener(EventListener* listener)
{
    listeners.push_back(listener);
}

bool compare_listener_priority(EventListener* first, EventListener* second)
{
    return first->GetPriority() < second->GetPriority();
}

void Blam::Events::ResortListeners(EventListener* requesting_listener)
{
    Blam::Logger::LogEvent("EventListener 0x" + Blam::Converters::BytesToString(&requesting_listener, 4) + " priority changed to " + std::to_string(requesting_listener->GetPriority()) + ", resorting listeners");

    std::sort(listeners.begin(), listeners.end(), &compare_listener_priority);
}