summaryrefslogtreecommitdiff
path: root/src/managers/HookSystemManager.hpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-10-21 14:52:43 +0100
committerVaxry <vaxry@vaxry.net>2023-10-21 14:52:43 +0100
commita61eb7694df25a75f45502ed64b1536fda370c1d (patch)
tree30c48c414cec95598c50bed092ee35c19f3e28a2 /src/managers/HookSystemManager.hpp
parentc6233a790fed3d9a3100e16a73143700846928a2 (diff)
hooksystem: add callbackinfo struct and cancellable events
Diffstat (limited to 'src/managers/HookSystemManager.hpp')
-rw-r--r--src/managers/HookSystemManager.hpp17
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;