From 1c94a1ab4423cd578f725c98f303edbf000e1a8a Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Wed, 21 May 2025 16:45:06 +0200 Subject: [PATCH] Add X and Y position tempvars to cursor condition --- data/locale/en-US.ini | 3 +++ plugins/base/macro-condition-cursor.cpp | 24 ++++++++++++++++-------- plugins/base/macro-condition-cursor.hpp | 5 ++++- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 6c82eced..1c4a6ba4 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -2118,6 +2118,9 @@ AdvSceneSwitcher.tempVar.http.error.description="Empty when no error occurred.\n AdvSceneSwitcher.tempVar.mqtt.message="Message" +AdvSceneSwitcher.tempVar.cursor.x="Cursor position (X)" +AdvSceneSwitcher.tempVar.cursor.y="Cursor position (Y)" + AdvSceneSwitcher.selectScene="--select scene--" AdvSceneSwitcher.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene" diff --git a/plugins/base/macro-condition-cursor.cpp b/plugins/base/macro-condition-cursor.cpp index f925d3f9..8bcf926c 100644 --- a/plugins/base/macro-condition-cursor.cpp +++ b/plugins/base/macro-condition-cursor.cpp @@ -52,24 +52,26 @@ bool MacroConditionCursor::CheckClick() bool MacroConditionCursor::CheckCondition() { bool ret = false; - std::pair cursorPos = GetCursorPos(); + const auto &[x, y] = GetCursorPos(); + SetTempVarValue("x", std::to_string(x)); + SetTempVarValue("y", std::to_string(y)); + switch (_condition) { case Condition::REGION: - ret = cursorPos.first >= _minX && cursorPos.second >= _minY && - cursorPos.first <= _maxX && cursorPos.second <= _maxY; - SetVariableValue(std::to_string(cursorPos.first) + " " + - std::to_string(cursorPos.second)); + ret = x >= _minX && y >= _minY && x <= _maxX && y <= _maxY; + SetVariableValue(std::to_string(x) + " " + std::to_string(y)); break; case Condition::MOVING: - ret = cursorPos.first != _lastCursorPosition.first || - cursorPos.second != _lastCursorPosition.second; + ret = x != _lastX || y != _lastY; break; case Condition::CLICK: ret = CheckClick(); break; } + _lastCheckTime = std::chrono::high_resolution_clock::now(); - _lastCursorPosition = cursorPos; + _lastX = x; + _lastY = y; if (GetVariableValue().empty()) { SetVariableValue(ret ? "true" : "false"); @@ -109,6 +111,12 @@ bool MacroConditionCursor::Load(obs_data_t *obj) return true; } +void MacroConditionCursor::SetupTempVars() +{ + AddTempvar("x", obs_module_text("AdvSceneSwitcher.tempVar.cursor.x")); + AddTempvar("y", obs_module_text("AdvSceneSwitcher.tempVar.cursor.y")); +} + static inline void populateConditionSelection(QComboBox *list) { for (const auto &[condition, name] : cursorConditionTypes) { diff --git a/plugins/base/macro-condition-cursor.hpp b/plugins/base/macro-condition-cursor.hpp index 9d734c3e..17295c02 100644 --- a/plugins/base/macro-condition-cursor.hpp +++ b/plugins/base/macro-condition-cursor.hpp @@ -38,9 +38,12 @@ public: NumberVariable _minX = 0, _minY = 0, _maxX = 0, _maxY = 0; private: + void SetupTempVars(); + bool CheckClick(); std::chrono::high_resolution_clock::time_point _lastCheckTime{}; - std::pair _lastCursorPosition; + int _lastX = 0; + int _lastY = 0; static bool _registered; static const std::string id;