diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 29ad12c1..9f390087 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1419,6 +1419,11 @@ AdvSceneSwitcher.tempVar.scene.preview="Preview scene" AdvSceneSwitcher.tempVar.window.window="Window title" AdvSceneSwitcher.tempVar.window.window.description="The window title of the current foreground window." +AdvSceneSwitcher.tempVar.timer.seconds="Seconds" +AdvSceneSwitcher.tempVar.timer.minutes="Minutes" +AdvSceneSwitcher.tempVar.timer.hours="Hours" +AdvSceneSwitcher.tempVar.timer.days="Days" + AdvSceneSwitcher.selectScene="--select scene--" AdvSceneSwitcher.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene" diff --git a/src/macro-core/macro-condition-timer.cpp b/src/macro-core/macro-condition-timer.cpp index bbd590fe..f22a1927 100644 --- a/src/macro-core/macro-condition-timer.cpp +++ b/src/macro-core/macro-condition-timer.cpp @@ -10,18 +10,20 @@ bool MacroConditionTimer::_registered = MacroConditionFactory::Register( {MacroConditionTimer::Create, MacroConditionTimerEdit::Create, "AdvSceneSwitcher.condition.timer", false}); -const static std::map timerTypes = { - {TimerType::FIXED, "AdvSceneSwitcher.condition.timer.type.fixed"}, - {TimerType::RANDOM, "AdvSceneSwitcher.condition.timer.type.random"}, +const static std::map timerTypes = { + {MacroConditionTimer::TimerType::FIXED, + "AdvSceneSwitcher.condition.timer.type.fixed"}, + {MacroConditionTimer::TimerType::RANDOM, + "AdvSceneSwitcher.condition.timer.type.random"}, }; bool MacroConditionTimer::CheckCondition() { if (_paused) { - SetVariableValue(std::to_string(_remaining)); + SetVariables(_remaining); return _remaining == 0.; } - SetVariableValue(std::to_string(_duration.TimeRemaining())); + SetVariables(_duration.TimeRemaining()); if (_duration.DurationReached()) { if (!_oneshot) { _duration.Reset(); @@ -120,6 +122,29 @@ void MacroConditionTimer::Reset() } } +void MacroConditionTimer::SetVariables(double seconds) +{ + SetVariableValue(std::to_string(seconds)); + SetTempVarValue("seconds", std::to_string((int)seconds)); + SetTempVarValue("minutes", std::to_string((int)(seconds / 60))); + SetTempVarValue("hours", std::to_string((int)(seconds / (60 * 60)))); + SetTempVarValue("days", + std::to_string((int)(seconds / (60 * 60 * 24)))); +} + +void MacroConditionTimer::SetupTempVars() +{ + MacroCondition::SetupTempVars(); + AddTempvar("seconds", + obs_module_text("AdvSceneSwitcher.tempVar.timer.seconds")); + AddTempvar("minutes", + obs_module_text("AdvSceneSwitcher.tempVar.timer.minutes")); + AddTempvar("hours", + obs_module_text("AdvSceneSwitcher.tempVar.timer.hours")); + AddTempvar("days", + obs_module_text("AdvSceneSwitcher.tempVar.timer.days")); +} + static inline void populateTimerTypeSelection(QComboBox *list) { for (auto entry : timerTypes) { @@ -203,7 +228,7 @@ void MacroConditionTimerEdit::TimerTypeChanged(int type) } auto lock = LockContext(); - _entryData->_type = static_cast(type); + _entryData->_type = static_cast(type); SetWidgetVisibility(); } @@ -337,7 +362,7 @@ void MacroConditionTimerEdit::SetWidgetVisibility() {"{{duration2}}", _duration2}, }; - if (_entryData->_type == TimerType::RANDOM) { + if (_entryData->_type == MacroConditionTimer::TimerType::RANDOM) { PlaceWidgets( obs_module_text( "AdvSceneSwitcher.condition.timer.entry.line1.random"), diff --git a/src/macro-core/macro-condition-timer.hpp b/src/macro-core/macro-condition-timer.hpp index 50f2ecbe..3fac8270 100644 --- a/src/macro-core/macro-condition-timer.hpp +++ b/src/macro-core/macro-condition-timer.hpp @@ -12,11 +12,6 @@ namespace advss { -enum class TimerType { - FIXED, - RANDOM, -}; - class MacroConditionTimer : public MacroCondition { public: MacroConditionTimer(Macro *m) : MacroCondition(m, true) {} @@ -32,6 +27,7 @@ public: void Continue(); void Reset(); + enum class TimerType { FIXED, RANDOM }; TimerType _type = TimerType::FIXED; Duration _duration; Duration _duration2; @@ -42,6 +38,9 @@ public: private: void SetRandomTimeRemaining(); + void SetVariables(double seconds); + void SetupTempVars(); + std::default_random_engine _re; static bool _registered; static const std::string id;