Add temp vars to "Sequence" and "Random" action for executed macro

This commit is contained in:
WarmUpTill 2026-03-18 10:39:12 +01:00
parent 8e2c466c2d
commit 898fed0d7f
5 changed files with 75 additions and 12 deletions

View File

@ -2354,6 +2354,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"

View File

@ -47,20 +47,28 @@ getNextMacros(std::vector<MacroRef> &macros, 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<MacroAction> MacroActionRandom::Create(Macro *m)
{
return std::make_shared<MacroActionRandom>(m);
@ -95,6 +108,16 @@ std::shared_ptr<MacroAction> MacroActionRandom::Copy() const
return std::make_shared<MacroActionRandom>(*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<MacroActionRandom> entryData)
: QWidget(parent),

View File

@ -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<MacroAction> Create(Macro *m);
std::shared_ptr<MacroAction> Copy() const;
@ -22,7 +23,10 @@ public:
bool _allowRepeat = false;
private:
void SetupTempVars();
MacroRef lastRandomMacro;
static bool _registered;
static const std::string id;
};

View File

@ -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<Action>(obs_data_get_int(obj, "action"));
SetAction(static_cast<Action>(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<int>(_entryData->_action));
_actions->setCurrentIndex(static_cast<int>(_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<MacroActionSequence::Action>(value);
_entryData->SetAction(static_cast<MacroActionSequence::Action>(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();

View File

@ -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;
};