From 5c08fdb8e3163c8179b05bd988d6d21ad2dc7210 Mon Sep 17 00:00:00 2001 From: Milo Date: Thu, 22 Jan 2026 06:58:55 +1100 Subject: [PATCH 1/4] rpc works hah --- .vscode/settings.json | 2 +- Assets/Loader.cs | 142 +++++++++++++++++++++++++++++ Assets/Plugins.meta | 8 ++ Assets/Plugins/DiscordRPC.dll | Bin 0 -> 92672 bytes Assets/Plugins/DiscordRPC.dll.meta | 2 + HNode-DiscordRPC.slnx | 15 +++ 6 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 Assets/Plugins.meta create mode 100644 Assets/Plugins/DiscordRPC.dll create mode 100644 Assets/Plugins/DiscordRPC.dll.meta create mode 100644 HNode-DiscordRPC.slnx diff --git a/.vscode/settings.json b/.vscode/settings.json index 61cc2f7..0e3f170 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -66,5 +66,5 @@ "explorer.fileNesting.patterns": { "*.sln": "*.csproj" }, - "dotnet.defaultSolution": "HNode.slnx" + "dotnet.defaultSolution": "HNode-DiscordRPC.slnx" } \ No newline at end of file diff --git a/Assets/Loader.cs b/Assets/Loader.cs index d935b5f..90f2939 100644 --- a/Assets/Loader.cs +++ b/Assets/Loader.cs @@ -12,6 +12,9 @@ using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; using static TextureWriter; +using DiscordRPC; +using DiscordRPC.Logging; +using UTime = UnityEngine.Time; // idk?? public class Loader : MonoBehaviour { @@ -31,8 +34,114 @@ public class Loader : MonoBehaviour ISerializer ymlserializer; public UIController uiController; + [Header("Discord RPC")] + [SerializeField] private string applicationId = "1463611148346589247"; + + private static DiscordRpcClient client; + private static bool ready; + private static DateTime sessionStartUtc; + private static string lastPresenceKey; + private static float nextPresenceAllowedTime = 0f; + private static bool presenceNeedsRefresh; + private string lastExportersSig; + + // mmm mmm + public void SetPresence(string deets, string state, string largeImage, string largeImageText = null, string smallImageKey = null, string smallImageText = null) + { + if (client == null || !ready) return; + var presence = new RichPresence + { + Details = deets, + State = state, + Assets = new Assets + { + LargeImageKey = largeImage, + LargeImageText = largeImageText, + SmallImageKey = smallImageKey, + SmallImageText = smallImageText + }, + Timestamps = new Timestamps { Start = sessionStartUtc } + }; + client.SetPresence(presence); + } + private static void PushPresence( // kill me later or smth + string details, + string state, + string largeImage, + string largeText = null, + string smallImage = null, + string smallText = null, + bool force = false) + { + if (client == null || !ready) return; + if (!force && UTime.realtimeSinceStartup < nextPresenceAllowedTime) return; + var key = $"{details}|{state}|{largeImage}|{largeText}|{smallImage}|{smallText}"; + if (!force && key == lastPresenceKey) return; + + nextPresenceAllowedTime = UTime.realtimeSinceStartup + 1.0f; + lastPresenceKey = key; + + var presence = new RichPresence + { + Details = details, + State = state, + Assets = new Assets + { + LargeImageKey = largeImage, + LargeImageText = largeText, + SmallImageKey = smallImage, + SmallImageText = smallText + }, + Timestamps = new Timestamps { Start = sessionStartUtc } + }; + + client.SetPresence(presence); + } + private static string BuildStateLine() // yes yes i know making this a static method is stupid i am aware + { + var serializer = showconf?.Serializer != null ? showconf.Serializer.GetType().Name : "None"; + var uni = showconf != null ? showconf.TranscodeUniverseCount : 0; + var genCount = showconf?.Generators?.Count ?? 0; + var expCount = showconf?.Exporters?.Count ?? 0; + return $"{serializer}"; + } + private static string ExportersSignature() + { + if (showconf?.Exporters == null) return ""; + return string.Join("|", showconf.Exporters.Select(e => e?.GetType().FullName ?? "null")); + } + + + private void OnApplicationQuit() + { + Shutdown(); + } + + private void OnDestroy() + { + Shutdown(); + } + + private void Shutdown() + { + if (client == null) return; + + try + { + client.ClearPresence(); + client.Dispose(); + } + catch { /* uhhh idk?? */ } + finally + { + client = null; + ready = false; + } + } + void Start() { + sessionStartUtc = DateTime.UtcNow; spoutReceiver = FindObjectOfType(); spoutSender = FindObjectOfType(); artNetReceiver = FindObjectOfType(); @@ -71,6 +180,19 @@ void Start() ymlserializer = SetupBuilder().Build(); ymldeserializer = SetupBuilder().Build(); + client = new DiscordRpcClient("1463611148346589247") + { + Logger = new ConsoleLogger() { Level = LogLevel.Warning } + }; + client.OnReady += async (sender, e) => + { + ready = true; + SetPresence("Show Configuration Loaded", "Ready", "hnode"); + Debug.Log("Discord RPC Ready"); + await System.Threading.Tasks.Task.Delay(2000); + presenceNeedsRefresh = true; + }; + client.Initialize(); SetupDynamicUI(); } @@ -81,6 +203,20 @@ void Update() interfaceList.UpdateInterface(showconf.Generators.OfType>().ToList()); interfaceList.UpdateInterface(showconf.Exporters.OfType>().ToList()); } + var sig = ExportersSignature(); + if (presenceNeedsRefresh) + { + presenceNeedsRefresh = false; + PushPresence("Editing show", BuildStateLine(), "hnode", "HNode", force: true); + } + if (sig != lastExportersSig) + { + lastExportersSig = sig; + var hasMidi = showconf?.Exporters?.Any(e => e.GetType().Name == "MIDIDMX") ?? false; + var outputMIDI = hasMidi ? " • Sending Through MIDIDMX" : ""; + PushPresence("Editing show", BuildStateLine() + outputMIDI, "hnode", "Furality Grid Node", force: true); + } + client?.Invoke(); } private T SetupBuilder() where T : BuilderSkeleton, new() @@ -160,6 +296,7 @@ public void SaveShowConfiguration() public void LoadShowConfiguration() { + presenceNeedsRefresh = true; //open a file dialog var extensions = new[] { new ExtensionFilter("Show Configurations", "shwcfg"), @@ -184,6 +321,7 @@ public void LoadShowConfiguration() UnloadShowConf(); showconf = ymldeserializer.Deserialize(content); + PushPresence("Loading show", "Parsing configuration…", "hnode", "HNode", force: true); //invalidate the dropdowns and toggles uiController.InvalidateUIState(); @@ -191,6 +329,7 @@ public void LoadShowConfiguration() //start coroutine //this is stupid dumb shit but this YML library is being weird and this fixes the issue StartCoroutine(DeferredLoad(content)); + PushPresence("Show loaded", BuildStateLine(), "hnode", "HNode", force: true); } public static void UnloadShowConf() @@ -251,6 +390,9 @@ public static void LoadShowConf() artNetReceiver.ChangePort(showconf.ArtNetPort); artNetReceiver.ChangeIPAddress(showconf.ArtNetAddress); + var spout = string.IsNullOrWhiteSpace(showconf.SpoutInputName) ? "No Spout input" : $"Spout: {showconf.SpoutInputName}"; + var artnet = $"ArtNet: {showconf.ArtNetPort}"; + PushPresence("Sending DMX", $"{BuildStateLine()} • {spout}", "hnode", "HNode", smallImage: "artnet", smallText: artnet); SetFramerate(showconf.TargetFramerate); diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..4df8a2d --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb83417095ee4d14c8f9e05069154843 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DiscordRPC.dll b/Assets/Plugins/DiscordRPC.dll new file mode 100644 index 0000000000000000000000000000000000000000..4efbf2bc51e6d0e69ce4bf8fe48b8e12f5558e94 GIT binary patch literal 92672 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 + + + + + + + + + + + + + + From d106e58bcccd6691feccbdcae023138f4c568c57 Mon Sep 17 00:00:00 2001 From: Milo Date: Sun, 22 Mar 2026 02:47:36 +1100 Subject: [PATCH 2/4] wtf is that file bro --- git | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 git diff --git a/git b/git deleted file mode 100644 index e69de29..0000000 From 9d386a4a0fd1674bac2c42696f9e5f0ab8f1102c Mon Sep 17 00:00:00 2001 From: Milo Date: Sun, 22 Mar 2026 02:48:15 +1100 Subject: [PATCH 3/4] wtf is that file bro 2 --- HNode-DiscordRPC.slnx | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 HNode-DiscordRPC.slnx diff --git a/HNode-DiscordRPC.slnx b/HNode-DiscordRPC.slnx deleted file mode 100644 index 076d638..0000000 --- a/HNode-DiscordRPC.slnx +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - From 28e85a7655329f0728249b287e31a1b6e28e7506 Mon Sep 17 00:00:00 2001 From: Milo Ashwolf Date: Sun, 22 Mar 2026 03:04:00 +1100 Subject: [PATCH 4/4] fix default solution going to my old repo --- .vscode/settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0e3f170..e8ea055 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -66,5 +66,5 @@ "explorer.fileNesting.patterns": { "*.sln": "*.csproj" }, - "dotnet.defaultSolution": "HNode-DiscordRPC.slnx" -} \ No newline at end of file + "dotnet.defaultSolution": "HNode.slnx" +}