mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-07-02 00:22:10 -05:00
Add option to for macro condition scene to trigger on any scene change
This commit is contained in:
parent
96b472776a
commit
bee75336d0
|
|
@ -93,9 +93,10 @@ AdvSceneSwitcher.condition.cursor.hideFrame="Hide frame"
|
|||
AdvSceneSwitcher.condition.cursor.entry.line1="Cursor is {{conditions}} {{minX}} {{minY}} {{maxX}} {{maxY}} - {{toggleFrameButton}}"
|
||||
AdvSceneSwitcher.condition.cursor.entry.line2="Cursor is currently at {{xPos}} x {{yPos}}"
|
||||
AdvSceneSwitcher.condition.scene="Scene"
|
||||
AdvSceneSwitcher.condition.scene.type.current="Current"
|
||||
AdvSceneSwitcher.condition.scene.type.previous="Previous"
|
||||
AdvSceneSwitcher.condition.scene.entry="{{sceneType}} scene is {{scenes}}"
|
||||
AdvSceneSwitcher.condition.scene.type.current="Current scene is"
|
||||
AdvSceneSwitcher.condition.scene.type.previous="Previous scene is"
|
||||
AdvSceneSwitcher.condition.scene.type.changed="Scene chagned"
|
||||
AdvSceneSwitcher.condition.scene.entry="{{sceneType}} {{scenes}}"
|
||||
AdvSceneSwitcher.condition.window="Window"
|
||||
AdvSceneSwitcher.condition.window.entry.line1="{{windows}} exist and ..."
|
||||
AdvSceneSwitcher.condition.window.entry.line2="... is {{fullscreen}} fullscreen {{maximized}} maximized {{focused}} focused {{windowFocusChanged}} foreground window changed"
|
||||
|
|
|
|||
|
|
@ -476,6 +476,9 @@ extern "C" void FreeSceneSwitcher()
|
|||
|
||||
void handleSceneChange()
|
||||
{
|
||||
switcher->lastSceneChangeTime =
|
||||
std::chrono::high_resolution_clock::now();
|
||||
|
||||
// Stop waiting if scene was changed
|
||||
if (switcher->sceneChangedDuringWait()) {
|
||||
switcher->cv.notify_one();
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
enum class SceneType {
|
||||
CURRENT,
|
||||
PREVIOUS,
|
||||
CHANGED,
|
||||
};
|
||||
|
||||
class MacroConditionScene : public MacroCondition {
|
||||
|
|
@ -26,6 +27,7 @@ public:
|
|||
SceneType _type;
|
||||
|
||||
private:
|
||||
std::chrono::high_resolution_clock::time_point _lastSceneChangeTime{};
|
||||
static bool _registered;
|
||||
static const std::string id;
|
||||
};
|
||||
|
|
@ -58,5 +60,6 @@ protected:
|
|||
std::shared_ptr<MacroConditionScene> _entryData;
|
||||
|
||||
private:
|
||||
void SetWidgetVisibility();
|
||||
bool _loading = true;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ struct SwitcherData {
|
|||
obs_source_t *waitScene = nullptr;
|
||||
OBSWeakSource currentScene = nullptr;
|
||||
OBSWeakSource previousScene = nullptr;
|
||||
std::chrono::high_resolution_clock::time_point lastSceneChangeTime{};
|
||||
OBSWeakSource lastRandomScene;
|
||||
SceneGroup *lastRandomSceneGroup;
|
||||
OBSWeakSource nonMatchingScene;
|
||||
|
|
|
|||
|
|
@ -13,18 +13,29 @@ bool MacroConditionScene::_registered = MacroConditionFactory::Register(
|
|||
static std::map<SceneType, std::string> sceneTypes = {
|
||||
{SceneType::CURRENT, "AdvSceneSwitcher.condition.scene.type.current"},
|
||||
{SceneType::PREVIOUS, "AdvSceneSwitcher.condition.scene.type.previous"},
|
||||
{SceneType::CHANGED, "AdvSceneSwitcher.condition.scene.type.changed"},
|
||||
};
|
||||
|
||||
bool MacroConditionScene::CheckCondition()
|
||||
{
|
||||
bool sceneMatch = false;
|
||||
if (_type == SceneType::CURRENT) {
|
||||
sceneMatch = switcher->currentScene == _scene.GetScene(false);
|
||||
} else {
|
||||
sceneMatch = switcher->previousScene == _scene.GetScene(false);
|
||||
bool sceneChanged = _lastSceneChangeTime !=
|
||||
switcher->lastSceneChangeTime;
|
||||
if (sceneChanged) {
|
||||
_lastSceneChangeTime = switcher->lastSceneChangeTime;
|
||||
}
|
||||
|
||||
return sceneMatch;
|
||||
switch (_type) {
|
||||
case SceneType::CURRENT:
|
||||
return switcher->currentScene == _scene.GetScene(false);
|
||||
case SceneType::PREVIOUS:
|
||||
return switcher->previousScene == _scene.GetScene(false);
|
||||
case SceneType::CHANGED:
|
||||
return sceneChanged;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MacroConditionScene::Save(obs_data_t *obj)
|
||||
|
|
@ -103,6 +114,12 @@ void MacroConditionSceneEdit::TypeChanged(int value)
|
|||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
_entryData->_type = static_cast<SceneType>(value);
|
||||
SetWidgetVisibility();
|
||||
}
|
||||
|
||||
void MacroConditionSceneEdit::SetWidgetVisibility()
|
||||
{
|
||||
_scenes->setVisible(_entryData->_type != SceneType::CHANGED);
|
||||
}
|
||||
|
||||
void MacroConditionSceneEdit::UpdateEntryData()
|
||||
|
|
@ -113,4 +130,5 @@ void MacroConditionSceneEdit::UpdateEntryData()
|
|||
|
||||
_scenes->SetScene(_entryData->_scene);
|
||||
_sceneType->setCurrentIndex(static_cast<int>(_entryData->_type));
|
||||
SetWidgetVisibility();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user