Files
vertex_engine/src/event/event_manager.hpp
2025-04-17 17:52:25 +03:00

50 lines
1.0 KiB
C++
Executable File

#pragma once
#include <hack/patterns/singleton.hpp>
#include <hack/logger/logger.hpp>
#include <hack/security/uuid.hpp>
#include "event.hpp"
#include "utils/using.hpp"
namespace VE
{
struct event_manager : public hack::patterns::singleton<event_manager>
{
std::map<std::string, event_fn<event>> m_funcs;
template<typename T>
std::string connect(T* obj, void (T::*method)(event))
{
std::string key = hack::security::generate_uuid();
m_funcs[key] = std::bind(method, obj, std::placeholders::_1);
return key;
}
void disconnect(std::string key)
{
m_funcs.erase(key);
}
void emit(event e)
{
hack::log()("emit", m_funcs.size());
try
{
for(auto [key, f] : m_funcs) m_funcs[key](e);
}
catch(const std::exception& ex)
{
hack::error()(ex.what());
hack::log()("size funcs", m_funcs.size());
}
catch(...)
{
hack::error()("ooops...");
}
hack::log()("emit end", m_funcs.size());
}
};
}