CS2-Kit
C++23 library for CS2 Metamod:Source plugin development
Loading...
Searching...
No Matches
GameEventService.cpp
Go to the documentation of this file.
1#include <CS2Kit/Sdk/GameEventService.hpp>
2#include <CS2Kit/Sdk/GameInterfaces.hpp>
3#include <CS2Kit/Utils/Log.hpp>
4
5namespace CS2Kit::Sdk
6{
7
8using namespace CS2Kit::Utils;
9
10bool GameEventService::Initialize()
11{
12 if (!GameInterfaces::Instance().GameEventManager)
13 {
14 Log::Warn("GameEventService: IGameEventManager2 not available.");
15 return false;
16 }
17
18 Log::Info("Game event service initialized.");
19 return true;
20}
21
22IGameEvent* GameEventService::CreateEvent(const char* name)
23{
24 auto* mgr = GameInterfaces::Instance().GameEventManager;
25 if (!mgr)
26 return nullptr;
27
28 return mgr->CreateEvent(name);
29}
30
31bool GameEventService::FireEvent(IGameEvent* event, bool dontBroadcast)
32{
33 auto* mgr = GameInterfaces::Instance().GameEventManager;
34 if (!mgr || !event)
35 return false;
36
37 return mgr->FireEvent(event, dontBroadcast);
38}
39
40void GameEventService::FreeEvent(IGameEvent* event)
41{
42 auto* mgr = GameInterfaces::Instance().GameEventManager;
43 if (mgr && event)
44 mgr->FreeEvent(event);
45}
46
47uint64_t GameEventService::Listen(const char* eventName, EventCallback callback)
48{
49 auto* mgr = GameInterfaces::Instance().GameEventManager;
50 if (!mgr)
51 return 0;
52
53 if (_registeredEvents.find(eventName) == _registeredEvents.end())
54 {
55 mgr->AddListener(this, eventName, true);
56 _registeredEvents.insert(eventName);
57 }
58
59 uint64_t id = _nextListenerId++;
60 _listeners[id] = {eventName, std::move(callback)};
61 return id;
62}
63
64void GameEventService::RemoveListener(uint64_t id)
65{
66 _listeners.erase(id);
67}
68
69void GameEventService::FireGameEvent(IGameEvent* event)
70{
71 if (!event)
72 return;
73
74 const char* eventName = event->GetName();
75 if (!eventName)
76 return;
77
78 for (auto& [id, listener] : _listeners)
79 {
80 if (listener.EventName == eventName && listener.Callback)
81 {
82 listener.Callback(event);
83 }
84 }
85}
86
87} // namespace CS2Kit::Sdk