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.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"

View File

@ -10,18 +10,20 @@ bool MacroConditionTimer::_registered = MacroConditionFactory::Register(
{MacroConditionTimer::Create, MacroConditionTimerEdit::Create,
"AdvSceneSwitcher.condition.timer", false});
const static std::map<TimerType, std::string> timerTypes = {
{TimerType::FIXED, "AdvSceneSwitcher.condition.timer.type.fixed"},
{TimerType::RANDOM, "AdvSceneSwitcher.condition.timer.type.random"},
const static std::map<MacroConditionTimer::TimerType, std::string> 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<TimerType>(type);
_entryData->_type = static_cast<MacroConditionTimer::TimerType>(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"),

View File

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