Add Hotkeys and OSD manager libs
This commit is contained in:
32
libs/HotkeysManager.cpp
Normal file
32
libs/HotkeysManager.cpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#include "HotkeysManager.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
struct Hotkey {
|
||||||
|
int vk;
|
||||||
|
Modifier mods;
|
||||||
|
std::function<void()> callback;
|
||||||
|
bool wasPressed = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
static std::vector<Hotkey> g_hotkeys;
|
||||||
|
|
||||||
|
static bool IsModifierDown(reshade::api::effect_runtime* rt, Modifier m) {
|
||||||
|
if ((int)m & (int)Modifier::Alt && !rt->is_key_down(VK_MENU)) return false;
|
||||||
|
if ((int)m & (int)Modifier::Ctrl && !rt->is_key_down(VK_CONTROL)) return false;
|
||||||
|
if ((int)m & (int)Modifier::Shift && !rt->is_key_down(VK_SHIFT)) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterHotkey(int vk, Modifier mods, std::function<void()> callback) {
|
||||||
|
g_hotkeys.push_back({ vk, mods, std::move(callback) });
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProcessHotkeys(reshade::api::effect_runtime* runtime) {
|
||||||
|
for (auto& hotkey : g_hotkeys) {
|
||||||
|
bool pressed = IsModifierDown(runtime, hotkey.mods) && runtime->is_key_down(hotkey.vk);
|
||||||
|
|
||||||
|
if (pressed && !hotkey.wasPressed) hotkey.callback();
|
||||||
|
|
||||||
|
hotkey.wasPressed = pressed;
|
||||||
|
}
|
||||||
|
}
|
||||||
33
libs/OSDManager.cpp
Normal file
33
libs/OSDManager.cpp
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#include "OSDManager.h"
|
||||||
|
|
||||||
|
static float g_timer = 0.0f;
|
||||||
|
static OSDUpdateFn g_onUpdate;
|
||||||
|
static OSDEndFn g_onEnd;
|
||||||
|
|
||||||
|
void ShowOSD(float duration, OSDUpdateFn onUpdate, OSDEndFn onEnd) {
|
||||||
|
g_timer = duration;
|
||||||
|
g_onUpdate = std::move(onUpdate);
|
||||||
|
g_onEnd = std::move(onEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateOSD(reshade::api::effect_runtime* runtime, float deltaTime) {
|
||||||
|
if (g_timer <= 0.0f) return;
|
||||||
|
|
||||||
|
g_timer -= deltaTime;
|
||||||
|
|
||||||
|
if (g_onUpdate) g_onUpdate(runtime);
|
||||||
|
|
||||||
|
if (g_timer <= 0.0f) {
|
||||||
|
if (g_onEnd) g_onEnd(runtime);
|
||||||
|
|
||||||
|
g_onUpdate = nullptr;
|
||||||
|
g_onEnd = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetAllUniformVariables(reshade::api::effect_runtime* runtime, const char* effect_name) {
|
||||||
|
runtime->enumerate_uniform_variables(effect_name, [runtime](reshade::api::effect_runtime* rt, reshade::api::effect_uniform_variable OSDvar) {
|
||||||
|
runtime->reset_uniform_value(OSDvar);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user