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

@@ -35,11 +35,7 @@ bool MacroConditionAudio::CheckCondition()
// Reset for next check
_peak = -std::numeric_limits<float>::infinity();
if (!volumeThresholdreached) {
_duration.Reset();
return false;
}
return _duration.DurationReached();
return volumeThresholdreached;
}
bool MacroConditionAudio::Save(obs_data_t *obj)
@@ -49,7 +45,6 @@ bool MacroConditionAudio::Save(obs_data_t *obj)
GetWeakSourceName(_audioSource).c_str());
obs_data_set_int(obj, "volume", _volume);
obs_data_set_int(obj, "condition", static_cast<int>(_condition));
_duration.Save(obj);
return true;
}
@@ -75,12 +70,9 @@ bool MacroConditionAudio::Load(obs_data_t *obj)
MacroCondition::Load(obj);
const char *audioSourceName = obs_data_get_string(obj, "audioSource");
_audioSource = GetWeakSourceByName(audioSourceName);
_volume = obs_data_get_int(obj, "volume");
_condition =
static_cast<AudioCondition>(obs_data_get_int(obj, "condition"));
_duration.Load(obj);
_volmeter = AddVolmeterToSource(this, _audioSource);
return true;
}
@@ -123,7 +115,6 @@ MacroConditionAudioEdit::MacroConditionAudioEdit(
_audioSources = new QComboBox();
_condition = new QComboBox();
_volume = new QSpinBox();
_duration = new DurationSelection(parent, false);
_volume->setSuffix("%");
_volume->setMaximum(100);
@@ -133,8 +124,6 @@ MacroConditionAudioEdit::MacroConditionAudioEdit(
SLOT(VolumeThresholdChanged(int)));
QWidget::connect(_condition, SIGNAL(currentIndexChanged(int)), this,
SLOT(ConditionChanged(int)));
QWidget::connect(_duration, SIGNAL(DurationChanged(double)), this,
SLOT(DurationChanged(double)));
QWidget::connect(_audioSources,
SIGNAL(currentTextChanged(const QString &)), this,
SLOT(SourceChanged(const QString &)));
@@ -147,7 +136,7 @@ MacroConditionAudioEdit::MacroConditionAudioEdit(
{"{{audioSources}}", _audioSources},
{"{{volume}}", _volume},
{"{{condition}}", _condition},
{"{{duration}}", _duration}};
};
placeWidgets(obs_module_text("AdvSceneSwitcher.condition.audio.entry"),
switchLayout, widgetPlaceholders);
@@ -214,16 +203,6 @@ void MacroConditionAudioEdit::ConditionChanged(int cond)
_entryData->_condition = static_cast<AudioCondition>(cond);
}
void MacroConditionAudioEdit::DurationChanged(double seconds)
{
if (_loading || !_entryData) {
return;
}
std::lock_guard<std::mutex> lock(switcher->m);
_entryData->_duration.seconds = seconds;
}
void MacroConditionAudioEdit::UpdateEntryData()
{
if (!_entryData) {
@@ -234,6 +213,5 @@ void MacroConditionAudioEdit::UpdateEntryData()
GetWeakSourceName(_entryData->_audioSource).c_str());
_volume->setValue(_entryData->_volume);
_condition->setCurrentIndex(static_cast<int>(_entryData->_condition));
_duration->SetDuration(_entryData->_duration);
UpdateVolmeterSource();
}