#pragma once #include "Emu/IdManager.h" struct lv2_event_queue_t; class EventManager { std::mutex m_mutex; std::unordered_map> m_map; public: void Init(); void Clear(); bool UnregisterKey(u64 key); template::value>> std::shared_ptr MakeEventQueue(u64 key, Args&&... args) { std::lock_guard lock(m_mutex); if (key && m_map.find(key) != m_map.end()) { return nullptr; } auto queue = Emu.GetIdManager().make_ptr(std::forward(args)...); if (key) { m_map[key] = queue; } return queue; } std::shared_ptr GetEventQueue(u64 key); };