diff options
| author | Vaxry <vaxry@vaxry.net> | 2023-10-21 14:52:43 +0100 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2023-10-21 14:52:43 +0100 |
| commit | a61eb7694df25a75f45502ed64b1536fda370c1d (patch) | |
| tree | 30c48c414cec95598c50bed092ee35c19f3e28a2 /src/managers/HookSystemManager.hpp | |
| parent | c6233a790fed3d9a3100e16a73143700846928a2 (diff) | |
hooksystem: add callbackinfo struct and cancellable events
Diffstat (limited to 'src/managers/HookSystemManager.hpp')
| -rw-r--r-- | src/managers/HookSystemManager.hpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/managers/HookSystemManager.hpp b/src/managers/HookSystemManager.hpp index 66edd1c0..ca8e9006 100644 --- a/src/managers/HookSystemManager.hpp +++ b/src/managers/HookSystemManager.hpp @@ -12,7 +12,8 @@ #include "../plugins/PluginAPI.hpp" // global typedef for hooked functions. Passes itself as a ptr when called, and `data` additionally. -typedef std::function<void(void*, std::any)> HOOK_CALLBACK_FN; + +typedef std::function<void(void*, SCallbackInfo& info, std::any data)> HOOK_CALLBACK_FN; struct SCallbackFNPtr { HOOK_CALLBACK_FN* fn = nullptr; @@ -22,7 +23,17 @@ struct SCallbackFNPtr { #define EMIT_HOOK_EVENT(name, param) \ { \ static auto* const PEVENTVEC = g_pHookSystem->getVecForEvent(name); \ - g_pHookSystem->emit(PEVENTVEC, param); \ + SCallbackInfo info; \ + g_pHookSystem->emit(PEVENTVEC, info, param); \ + } + +#define EMIT_HOOK_EVENT_CANCELLABLE(name, param) \ + { \ + static auto* const PEVENTVEC = g_pHookSystem->getVecForEvent(name); \ + SCallbackInfo info; \ + g_pHookSystem->emit(PEVENTVEC, info, param); \ + if (info.cancelled) \ + return; \ } class CHookSystemManager { @@ -34,7 +45,7 @@ class CHookSystemManager { void hookStatic(const std::string& event, HOOK_CALLBACK_FN* fn, HANDLE handle = nullptr); void unhook(HOOK_CALLBACK_FN* fn); - void emit(const std::vector<SCallbackFNPtr>* callbacks, std::any data = 0); + void emit(const std::vector<SCallbackFNPtr>* callbacks, SCallbackInfo& info, std::any data = 0); std::vector<SCallbackFNPtr>* getVecForEvent(const std::string& event); bool m_bCurrentEventPlugin = false; |
