22 Log::Warn(
"LegacyGameEventListener signature not found; per-client event delivery unavailable.");
41 return std::unexpected(
Error::Unsupported(
"the GameEventManager address did not bind"));
45 return std::unexpected(
Error::Engine(
"the game event manager pointer is null"));
75 if (!
mgr || name.empty())
81 return mgr->CreateEvent(std::string(name).
c_str());
113 if (
it == _events.end())
119 EventHandlers&
entry =
it->second;
122 entry.Attached =
mgr->AddListener(
this,
it->first.c_str(),
true);
131 if (!
mgr || _events.empty())
138 mgr->RemoveListener(
this);
142 for (
auto& [name,
entry] : _events)
144 entry.Attached =
false;
145 if (
entry.Handlers.Empty())
150 entry.Attached =
mgr->AddListener(
this, name.c_str(),
true);
157 Log::Warn(
"Game event listener failed to attach: {}.", name);
168 mgr->RemoveListener(
this);
171 for (
auto& [name,
entry] : _events)
173 entry.Handlers.Clear();
174 entry.Attached =
false;
185 const char*
eventName =
event->GetName();
191 const auto it = _events.find(std::string_view(
eventName));
192 if (
it != _events.end())
Typed read/write of engine fields at a base pointer + byte offset.
void * Ptr() const noexcept
void RemoveAllListeners()
void FreeEvent(IGameEvent *event)
bool FireEvent(IGameEvent *event, bool broadcast=true)
IGameEvent * CreateEvent(std::string_view name)
GameEvents(Interfaces &interfaces, const Bindings &bindings)
IGameEventListener2 * GetClientLegacyListener(int slot) const
bool ClientListensTo(int slot, std::string_view eventName) const
void FireGameEvent(IGameEvent *event) override
Owns one registration and releases it on destruction.
void Info(std::format_string< Args... > fmt, Args &&... args)
void Warn(std::format_string< Args... > fmt, Args &&... args)
static std::string ReadFile(const std::filesystem::path &path)
constexpr bool IsValidSlot(int slot)
std::expected< void, Error > Status
Address LegacyGameEventListener
static Error Engine(std::string detail)
static Error Unsupported(std::string detail)
Centralized holder for all HL2SDK interface pointers.
IGameEventManager2 * GameEventManager