diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 64345e5c..66eb814b 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -2356,6 +2356,12 @@ AdvSceneSwitcher.tempVar.cursor.y="Cursor position (Y)" AdvSceneSwitcher.tempVar.replay.lastSavePath="Last save path" AdvSceneSwitcher.tempVar.replay.lastSavePath.description="The file path of the last replay buffer saved." +AdvSceneSwitcher.tempVar.sequence.macro="Macro" +AdvSceneSwitcher.tempVar.sequence.macro.description="The name of the macro executed by the \"Sequence\" action.\nIf no macro was executed the returned value is the empty string." + +AdvSceneSwitcher.tempVar.random.macro="Macro" +AdvSceneSwitcher.tempVar.random.macro.description="The name of the macro executed by the \"Random\" action.\nIf no macro was executed the returned value is the empty string." + AdvSceneSwitcher.selectScene="--select scene--" AdvSceneSwitcher.selectCanvas="--select canvas--" AdvSceneSwitcher.selectPreviousScene="Previous Scene" diff --git a/plugins/base/macro-action-random.cpp b/plugins/base/macro-action-random.cpp index 198e4eb7..09808d71 100644 --- a/plugins/base/macro-action-random.cpp +++ b/plugins/base/macro-action-random.cpp @@ -47,20 +47,28 @@ getNextMacros(std::vector ¯os, MacroRef &lastRandomMacroRef, bool MacroActionRandom::PerformAction() { if (_macros.size() == 0) { + SetTempVarValue("macro", ""); return true; } auto macros = getNextMacros(_macros, lastRandomMacro, _allowRepeat); if (macros.size() == 0) { + SetTempVarValue("macro", ""); return true; } + if (macros.size() == 1) { lastRandomMacro = macros[0]; + SetTempVarValue("macro", GetMacroName(macros[0].get())); return RunMacroActions(macros[0].get()); } + srand((unsigned int)time(0)); size_t idx = std::rand() % (macros.size()); lastRandomMacro = macros[idx]; + + SetTempVarValue("macro", GetMacroName(macros[idx].get())); + return RunMacroActions(macros[idx].get()); } @@ -85,6 +93,11 @@ bool MacroActionRandom::Load(obs_data_t *obj) return true; } +bool MacroActionRandom::PostLoad() +{ + return MacroAction::PostLoad() && MultiMacroRefAction::PostLoad(); +} + std::shared_ptr MacroActionRandom::Create(Macro *m) { return std::make_shared(m); @@ -95,6 +108,16 @@ std::shared_ptr MacroActionRandom::Copy() const return std::make_shared(*this); } +void MacroActionRandom::SetupTempVars() +{ + MacroAction::SetupTempVars(); + AddTempvar( + "macro", + obs_module_text("AdvSceneSwitcher.tempVar.random.macro"), + obs_module_text( + "AdvSceneSwitcher.tempVar.random.macro.description")); +} + MacroActionRandomEdit::MacroActionRandomEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent), diff --git a/plugins/base/macro-action-random.hpp b/plugins/base/macro-action-random.hpp index f1a81ac9..30faecfe 100644 --- a/plugins/base/macro-action-random.hpp +++ b/plugins/base/macro-action-random.hpp @@ -15,6 +15,7 @@ public: void LogAction() const; bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); + bool PostLoad(); std::string GetId() const { return id; }; static std::shared_ptr Create(Macro *m); std::shared_ptr Copy() const; @@ -22,7 +23,10 @@ public: bool _allowRepeat = false; private: + void SetupTempVars(); + MacroRef lastRandomMacro; + static bool _registered; static const std::string id; }; diff --git a/plugins/base/macro-action-sequence.cpp b/plugins/base/macro-action-sequence.cpp index 7dce0baf..550391d9 100644 --- a/plugins/base/macro-action-sequence.cpp +++ b/plugins/base/macro-action-sequence.cpp @@ -82,13 +82,22 @@ void MacroActionSequence::ResolveVariablesToFixedValues() _resetIndex.ResolveVariables(); } +void MacroActionSequence::SetAction(Action action) +{ + _action = action; + SetupTempVars(); +} + bool MacroActionSequence::RunSequence() { if (_macros.size() == 0) { + SetTempVarValue("macro", ""); return true; } auto macro = GetNextMacro().GetMacro(); + SetTempVarValue("macro", GetMacroName(macro.get())); + if (!macro.get()) { return true; } @@ -125,6 +134,21 @@ bool MacroActionSequence::SetSequenceIndex() const return true; } +void MacroActionSequence::SetupTempVars() +{ + MacroAction::SetupTempVars(); + + if (_action != Action::RUN_SEQUENCE) { + return; + } + + AddTempvar( + "macro", + obs_module_text("AdvSceneSwitcher.tempVar.sequence.macro"), + obs_module_text( + "AdvSceneSwitcher.tempVar.sequence.macro.description")); +} + bool MacroActionSequence::PerformAction() { if (_action == Action::RUN_SEQUENCE) { @@ -162,7 +186,7 @@ bool MacroActionSequence::Load(obs_data_t *obj) LoadMacroList(obj, _macros); _restart = obs_data_get_bool(obj, "restart"); _macro.Load(obj); - _action = static_cast(obs_data_get_int(obj, "action")); + SetAction(static_cast(obs_data_get_int(obj, "action"))); _resetIndex.Load(obj, "resetIndex"); return true; } @@ -256,7 +280,7 @@ void MacroActionSequenceEdit::UpdateEntryData() _macroList->SetContent(_entryData->_macros); _restart->setChecked(_entryData->_restart); _resetIndex->SetValue(_entryData->_resetIndex); - _actions->setCurrentIndex(static_cast(_entryData->_action)); + _actions->setCurrentIndex(static_cast(_entryData->GetAction())); _macros->SetCurrentMacro(_entryData->_macro); SetWidgetVisibility(); adjustSize(); @@ -361,7 +385,7 @@ void MacroActionSequenceEdit::UpdateStatusLine() void MacroActionSequenceEdit::ActionChanged(int value) { GUARD_LOADING_AND_LOCK(); - _entryData->_action = static_cast(value); + _entryData->SetAction(static_cast(value)); SetWidgetVisibility(); } @@ -385,10 +409,10 @@ void MacroActionSequenceEdit::SetWidgetVisibility() ClearLayout(_layout); + const auto action = _entryData->GetAction(); PlaceWidgets( obs_module_text( - _entryData->_action == - MacroActionSequence::Action::RUN_SEQUENCE + action == MacroActionSequence::Action::RUN_SEQUENCE ? "AdvSceneSwitcher.action.sequence.entry.run" : "AdvSceneSwitcher.action.sequence.entry.setIndex"), _layout, @@ -396,15 +420,14 @@ void MacroActionSequenceEdit::SetWidgetVisibility() {"{{macros}}", _macros}, {"{{index}}", _resetIndex}}); - _macroList->setVisible(_entryData->_action == + _macroList->setVisible(action == MacroActionSequence::Action::RUN_SEQUENCE); - _restart->setVisible(_entryData->_action == + _restart->setVisible(action == MacroActionSequence::Action::RUN_SEQUENCE); - _statusLine->setVisible(_entryData->_action == + _statusLine->setVisible(action == MacroActionSequence::Action::RUN_SEQUENCE); - _macros->setVisible(_entryData->_action == - MacroActionSequence::Action::SET_INDEX); - _resetIndex->setVisible(_entryData->_action == + _macros->setVisible(action == MacroActionSequence::Action::SET_INDEX); + _resetIndex->setVisible(action == MacroActionSequence::Action::SET_INDEX); adjustSize(); diff --git a/plugins/base/macro-action-sequence.hpp b/plugins/base/macro-action-sequence.hpp index a32629cf..9c933b57 100644 --- a/plugins/base/macro-action-sequence.hpp +++ b/plugins/base/macro-action-sequence.hpp @@ -34,7 +34,10 @@ public: RUN_SEQUENCE, SET_INDEX, }; - Action _action = Action::RUN_SEQUENCE; + + Action GetAction() const { return _action; } + void SetAction(Action); + bool _restart = true; IntVariable _resetIndex = 1; @@ -45,6 +48,10 @@ private: bool RunSequence(); bool SetSequenceIndex() const; + void SetupTempVars(); + + Action _action = Action::RUN_SEQUENCE; + static bool _registered; static const std::string id; };