From 18524761a6f34bb64820d5cce92435ba3047ee2b Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Sun, 12 Oct 2025 20:44:50 +0200 Subject: [PATCH] Add option to check if a macro's actions were performed --- data/locale/en-US.ini | 2 ++ lib/macro/macro-condition-macro.cpp | 29 ++++++++++++++++++++++++++++- lib/macro/macro-condition-macro.hpp | 3 +++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 9cd538b8..1081cc02 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -490,6 +490,7 @@ AdvSceneSwitcher.condition.macro.type.multiState="Multiple macro condition state AdvSceneSwitcher.condition.macro.type.actionDisabled="Macro action disabled" AdvSceneSwitcher.condition.macro.type.actionEnabled="Macro action enabled" AdvSceneSwitcher.condition.macro.type.paused="Macro is paused" +AdvSceneSwitcher.condition.macro.type.actionsPerformed="Macro actions were executed" AdvSceneSwitcher.condition.macro.type.selection="{{types}}" AdvSceneSwitcher.condition.macro.count.type.below="Less than" AdvSceneSwitcher.condition.macro.count.type.above="More than" @@ -506,6 +507,7 @@ AdvSceneSwitcher.condition.macro.count.entry.line2="Current count:{{currentCount AdvSceneSwitcher.condition.macro.actionState.disabled.entry="Action{{actionIndex}}of{{macros}}is disabled" AdvSceneSwitcher.condition.macro.actionState.enabled.entry="Action{{actionIndex}}of{{macros}}is enabled" AdvSceneSwitcher.condition.macro.paused.entry="Macro{{macros}}is paused" +AdvSceneSwitcher.condition.macro.actionsPerformed.entry="The actions of macro{{macros}}were performed" AdvSceneSwitcher.condition.source="Source" AdvSceneSwitcher.condition.source.type.active="Is active" AdvSceneSwitcher.condition.source.type.showing="Is showing" diff --git a/lib/macro/macro-condition-macro.cpp b/lib/macro/macro-condition-macro.cpp index 2d432478..d1a2a58f 100644 --- a/lib/macro/macro-condition-macro.cpp +++ b/lib/macro/macro-condition-macro.cpp @@ -26,6 +26,8 @@ const static std::map "AdvSceneSwitcher.condition.macro.type.actionEnabled"}, {MacroConditionMacro::Type::PAUSED, "AdvSceneSwitcher.condition.macro.type.paused"}, + {MacroConditionMacro::Type::ACTIONS_PERFORMED, + "AdvSceneSwitcher.condition.macro.type.actionsPerformed"}, }; const static std::map @@ -121,6 +123,16 @@ bool MacroConditionMacro::CheckPauseState() return macro->Paused(); } +bool MacroConditionMacro::CheckActionsPerformed() +{ + auto macro = _macro.GetMacro(); + if (!macro) { + return false; + } + + return macro->WasExecutedSince(macro->LastConditionCheckTime()); +} + bool MacroConditionMacro::CheckCountCondition() { auto macro = _macro.GetMacro(); @@ -158,6 +170,8 @@ bool MacroConditionMacro::CheckCondition() return CheckActionStateCondition(); case Type::PAUSED: return CheckPauseState(); + case Type::ACTIONS_PERFORMED: + return CheckActionsPerformed(); default: break; } @@ -414,6 +428,9 @@ void MacroConditionMacroEdit::SetupWidgets() case MacroConditionMacro::Type::PAUSED: SetupPauseWidgets(); break; + case MacroConditionMacro::Type::ACTIONS_PERFORMED: + SetupActionsPerformedWidgets(); + break; default: break; } @@ -472,6 +489,14 @@ void MacroConditionMacroEdit::SetupPauseWidgets() _settingsLine1, {{"{{macros}}", _macros}}); } +void MacroConditionMacroEdit::SetupActionsPerformedWidgets() +{ + PlaceWidgets( + obs_module_text( + "AdvSceneSwitcher.condition.macro.actionsPerformed.entry"), + _settingsLine1, {{"{{macros}}", _macros}}); +} + void MacroConditionMacroEdit::SetWidgetVisibility() { _macros->setVisible( @@ -481,7 +506,9 @@ void MacroConditionMacroEdit::SetWidgetVisibility() MacroConditionMacro::Type::ACTION_DISABLED || _entryData->GetType() == MacroConditionMacro::Type::ACTION_ENABLED || - _entryData->GetType() == MacroConditionMacro::Type::PAUSED); + _entryData->GetType() == MacroConditionMacro::Type::PAUSED || + _entryData->GetType() == + MacroConditionMacro::Type::ACTIONS_PERFORMED); _counterConditions->setVisible(_entryData->GetType() == MacroConditionMacro::Type::COUNT); _count->setVisible(_entryData->GetType() == diff --git a/lib/macro/macro-condition-macro.hpp b/lib/macro/macro-condition-macro.hpp index d0625ccf..57b08430 100644 --- a/lib/macro/macro-condition-macro.hpp +++ b/lib/macro/macro-condition-macro.hpp @@ -39,6 +39,7 @@ public: ACTION_DISABLED, ACTION_ENABLED, PAUSED, + ACTIONS_PERFORMED, }; void SetType(Type); Type GetType() const { return _type; } @@ -66,6 +67,7 @@ private: bool CheckMultiStateCondition(); bool CheckActionStateCondition(); bool CheckPauseState(); + bool CheckActionsPerformed(); void SetupTempVars(); @@ -134,6 +136,7 @@ private: void SetupCountWidgets(); void SetupActionStateWidgets(bool enable); void SetupPauseWidgets(); + void SetupActionsPerformedWidgets(); void SetWidgetVisibility(); bool _loading = true; };