Add generic time constraint to macro conditions

Almost every macro condition can benefit from having the option to
specify a time constraint.
Instead of adding it to each condition separately add it to all
conditions with the option of excluding it when registering a new
condition type.
This commit is contained in:
WarmUpTill
2021-05-28 22:55:29 +02:00
committed by WarmUpTill
parent d9997d374d
commit 326cc0c46f
21 changed files with 274 additions and 203 deletions

View File

@@ -33,6 +33,10 @@ bool Macro::CeckMatch()
_matched = false;
for (auto &c : _conditions) {
bool cond = c->CheckCondition();
if (!cond) {
c->ResetDuration();
}
cond = cond && c->DurationReached();
switch (c->GetLogicType()) {
case LogicType::NONE:
@@ -350,15 +354,37 @@ bool MacroCondition::Save(obs_data_t *obj)
{
obs_data_set_string(obj, "id", GetId().c_str());
obs_data_set_int(obj, "logic", static_cast<int>(_logic));
_duration.Save(obj);
return true;
}
bool MacroCondition::Load(obs_data_t *obj)
{
_logic = static_cast<LogicType>(obs_data_get_int(obj, "logic"));
_duration.Load(obj);
return true;
}
void MacroCondition::SetDurationConstraint(const DurationConstraint &dur)
{
_duration = dur;
}
void MacroCondition::SetDurationCondition(DurationCondition cond)
{
_duration.SetCondition(cond);
}
void MacroCondition::SetDurationUnit(DurationUnit u)
{
_duration.SetUnit(u);
}
void MacroCondition::SetDuration(double seconds)
{
_duration.SetValue(seconds);
}
bool MacroAction::Save(obs_data_t *obj)
{
obs_data_set_string(obj, "id", GetId().c_str());