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);
}