mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2026-02-05 06:22:21 +08:00
work in progress for LuaScriptEngine, to support OBS websocket api
This commit is contained in:
@@ -1,16 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
using BepInEx;
|
||||
using BepInEx.Logging;
|
||||
using HarmonyLib;
|
||||
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLua;
|
||||
using OBSWebsocketDotNet;
|
||||
|
||||
namespace LuaScriptEngine;
|
||||
|
||||
[BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)]
|
||||
public class LuaScriptEngine : BaseUnityPlugin
|
||||
{
|
||||
private readonly OBSWebsocket _obs = new();
|
||||
private readonly Dictionary<string, string> _scheduledText = [];
|
||||
|
||||
private class Timer(LuaFunction func, long startInterval, long repeatInterval = 0L)
|
||||
{
|
||||
public bool Check(long gameTick)
|
||||
@@ -101,6 +108,49 @@ public class LuaScriptEngine : BaseUnityPlugin
|
||||
{
|
||||
Timers.Remove(timer);
|
||||
};
|
||||
LuaState["obs_connect"] = void (string server, string password) =>
|
||||
{
|
||||
_obs.Connected += (sender, e) =>
|
||||
{
|
||||
Logger.LogDebug("Connected to OBS");
|
||||
foreach (var (sourceName, text) in _scheduledText)
|
||||
{
|
||||
_obs.SetInputSettings(sourceName,
|
||||
new JObject {
|
||||
{"text", text}
|
||||
});
|
||||
}
|
||||
_scheduledText.Clear();
|
||||
};
|
||||
_obs.Disconnected += (sender, e) =>
|
||||
{
|
||||
Logger.LogDebug("Disconnected from OBS");
|
||||
_obs.ConnectAsync(server, password);
|
||||
};
|
||||
_obs.ConnectAsync(server, password);
|
||||
};
|
||||
LuaState["obs_set_source_text"] = void (string sourceName, string text) =>
|
||||
{
|
||||
if (_obs.IsConnected)
|
||||
{
|
||||
try
|
||||
{
|
||||
_obs.SetInputSettings(sourceName, new JObject {
|
||||
{"text", text}
|
||||
});
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.LogError($"Error setting source text: {e}");
|
||||
_obs.Disconnect();
|
||||
_scheduledText[sourceName] = text;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_scheduledText[sourceName] = text;
|
||||
}
|
||||
};
|
||||
var assemblyPath = System.IO.Path.Combine(
|
||||
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)!,
|
||||
"scripts"
|
||||
|
||||
Reference in New Issue
Block a user