Add more scripting signals / procedures

This commit is contained in:
WarmUpTill 2025-03-17 20:52:06 +01:00 committed by WarmUpTill
parent 23b461828b
commit 5a2cb0bd68
3 changed files with 76 additions and 0 deletions

View File

@ -108,6 +108,24 @@ static const std::string setTempVarValueDeclString =
tempVarIdParam.data() + ", in string " + valueParam.data() +
", in int " + GetInstanceIdParamName().data() + ")";
/* Plugin status */
static constexpr std::string_view stopSignalName = "advss_plugin_stopped";
static constexpr std::string_view startSignalName = "advss_plugin_started";
static constexpr std::string_view getRunningStatusFuncName =
"advss_plugin_running";
static constexpr std::string_view resetIntervalSignalName =
"advss_interval_reset";
static const std::string stopSignalDeclString =
std::string("void ") + stopSignalName.data() + "()";
static const std::string startSignalDeclString =
std::string("void ") + startSignalName.data() + "()";
static const std::string resetIntervalDeclString =
std::string("void ") + resetIntervalSignalName.data() + "()";
static const std::string getRunningStatusDeclString =
std::string("bool ") + getRunningStatusFuncName.data() + "()";
static bool setup();
static bool setupDone = setup();
@ -134,6 +152,25 @@ static bool setup()
&ScriptHandler::DeregisterAllTempVars, nullptr);
proc_handler_add(ph, setTempVarValueDeclString.c_str(),
&ScriptHandler::SetTempVarValue, nullptr);
proc_handler_add(ph, getRunningStatusDeclString.c_str(),
&ScriptHandler::GetRunningStatus, nullptr);
auto sh = obs_get_signal_handler();
signal_handler_add(sh, stopSignalDeclString.c_str());
signal_handler_add(sh, startSignalDeclString.c_str());
signal_handler_add(sh, resetIntervalDeclString.c_str());
static constexpr auto triggerSignal = [](const std::string_view &name) {
auto sh = obs_get_signal_handler();
struct calldata data;
calldata_init(&data);
signal_handler_signal(sh, name.data(), &data);
calldata_free(&data);
};
AddIntervalResetStep([]() { triggerSignal(resetIntervalSignalName); });
AddStartStep([]() { triggerSignal(startSignalName); });
AddStopStep([]() { triggerSignal(stopSignalName); });
return true;
}
@ -476,6 +513,11 @@ void ScriptHandler::SetVariableValue(void *, calldata_t *data)
RETURN_SUCCESS();
}
void ScriptHandler::GetRunningStatus(void *ctx, calldata_t *data)
{
calldata_set_bool(data, "is_running", PluginIsRunning());
}
void ScriptHandler::RegisterTempVar(void *, calldata_t *data)
{
const char *variableId;

View File

@ -32,6 +32,7 @@ public:
static void DeregisterAllTempVars(void *ctx, calldata_t *data);
static void SetTempVarValue(void *ctx, calldata_t *data);
static void SetVariableValue(void *ctx, calldata_t *data);
static void GetRunningStatus(void *ctx, calldata_t *data);
static bool ActionIdIsValid(const std::string &id);
static bool ConditionIdIsValid(const std::string &id);

View File

@ -148,6 +148,39 @@ def script_load(settings):
],
)
# Other signals and procedures, which might be useful
def plugin_stop_handler(data):
obs.script_log(obs.LOG_INFO, "Hello from stop handler!")
get_running_status()
def plugin_start_handler(data):
obs.script_log(obs.LOG_INFO, "Hello from start handler!")
get_running_status()
def get_running_status():
proc_handler = obs.obs_get_proc_handler()
data = obs.calldata_create()
obs.proc_handler_call(proc_handler, "advss_plugin_running", data)
success = obs.calldata_bool(data, "is_running")
obs.script_log(
obs.LOG_INFO, f"The advanced scene switcher is currently running: {success}"
)
obs.calldata_destroy(data)
def interval_reset_handler(data):
obs.script_log(obs.LOG_INFO, "Hello from reset handler!")
signal_handler = obs.obs_get_signal_handler()
obs.signal_handler_connect(
signal_handler, "advss_plugin_stopped", plugin_stop_handler
)
obs.signal_handler_connect(
signal_handler, "advss_plugin_started", plugin_start_handler
)
obs.signal_handler_connect(
signal_handler, "advss_interval_reset", interval_reset_handler
)
def script_unload():
# Deregistering is useful if you plan on reloading the script files