Add temp variable support to timer condition

This commit is contained in:
WarmUpTill 2023-11-18 00:09:55 +01:00 committed by WarmUpTill
parent 7e56dc35b8
commit 975eacbc7e
3 changed files with 41 additions and 12 deletions

View File

@ -1419,6 +1419,11 @@ AdvSceneSwitcher.tempVar.scene.preview="Preview scene"
AdvSceneSwitcher.tempVar.window.window="Window title" AdvSceneSwitcher.tempVar.window.window="Window title"
AdvSceneSwitcher.tempVar.window.window.description="The window title of the current foreground window." 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.selectScene="--select scene--"
AdvSceneSwitcher.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectPreviousScene="Previous Scene"
AdvSceneSwitcher.selectCurrentScene="Current Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene"

View File

@ -10,18 +10,20 @@ bool MacroConditionTimer::_registered = MacroConditionFactory::Register(
{MacroConditionTimer::Create, MacroConditionTimerEdit::Create, {MacroConditionTimer::Create, MacroConditionTimerEdit::Create,
"AdvSceneSwitcher.condition.timer", false}); "AdvSceneSwitcher.condition.timer", false});
const static std::map<TimerType, std::string> timerTypes = { const static std::map<MacroConditionTimer::TimerType, std::string> timerTypes = {
{TimerType::FIXED, "AdvSceneSwitcher.condition.timer.type.fixed"}, {MacroConditionTimer::TimerType::FIXED,
{TimerType::RANDOM, "AdvSceneSwitcher.condition.timer.type.random"}, "AdvSceneSwitcher.condition.timer.type.fixed"},
{MacroConditionTimer::TimerType::RANDOM,
"AdvSceneSwitcher.condition.timer.type.random"},
}; };
bool MacroConditionTimer::CheckCondition() bool MacroConditionTimer::CheckCondition()
{ {
if (_paused) { if (_paused) {
SetVariableValue(std::to_string(_remaining)); SetVariables(_remaining);
return _remaining == 0.; return _remaining == 0.;
} }
SetVariableValue(std::to_string(_duration.TimeRemaining())); SetVariables(_duration.TimeRemaining());
if (_duration.DurationReached()) { if (_duration.DurationReached()) {
if (!_oneshot) { if (!_oneshot) {
_duration.Reset(); _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) static inline void populateTimerTypeSelection(QComboBox *list)
{ {
for (auto entry : timerTypes) { for (auto entry : timerTypes) {
@ -203,7 +228,7 @@ void MacroConditionTimerEdit::TimerTypeChanged(int type)
} }
auto lock = LockContext(); auto lock = LockContext();
_entryData->_type = static_cast<TimerType>(type); _entryData->_type = static_cast<MacroConditionTimer::TimerType>(type);
SetWidgetVisibility(); SetWidgetVisibility();
} }
@ -337,7 +362,7 @@ void MacroConditionTimerEdit::SetWidgetVisibility()
{"{{duration2}}", _duration2}, {"{{duration2}}", _duration2},
}; };
if (_entryData->_type == TimerType::RANDOM) { if (_entryData->_type == MacroConditionTimer::TimerType::RANDOM) {
PlaceWidgets( PlaceWidgets(
obs_module_text( obs_module_text(
"AdvSceneSwitcher.condition.timer.entry.line1.random"), "AdvSceneSwitcher.condition.timer.entry.line1.random"),

View File

@ -12,11 +12,6 @@
namespace advss { namespace advss {
enum class TimerType {
FIXED,
RANDOM,
};
class MacroConditionTimer : public MacroCondition { class MacroConditionTimer : public MacroCondition {
public: public:
MacroConditionTimer(Macro *m) : MacroCondition(m, true) {} MacroConditionTimer(Macro *m) : MacroCondition(m, true) {}
@ -32,6 +27,7 @@ public:
void Continue(); void Continue();
void Reset(); void Reset();
enum class TimerType { FIXED, RANDOM };
TimerType _type = TimerType::FIXED; TimerType _type = TimerType::FIXED;
Duration _duration; Duration _duration;
Duration _duration2; Duration _duration2;
@ -42,6 +38,9 @@ public:
private: private:
void SetRandomTimeRemaining(); void SetRandomTimeRemaining();
void SetVariables(double seconds);
void SetupTempVars();
std::default_random_engine _re; std::default_random_engine _re;
static bool _registered; static bool _registered;
static const std::string id; static const std::string id;