From d7abe5725139774531c95ede0b1b82108f3fc447 Mon Sep 17 00:00:00 2001 From: rurre Date: Thu, 25 Aug 2022 15:43:00 +0300 Subject: [PATCH] Initial Commit --- .gitignore | 5 + OSCLeashNet.sln | 16 +++ OSCLeashNet/Config.cs | 55 +++++++++ OSCLeashNet/LeashParameters.cs | 19 +++ OSCLeashNet/OSCLeashNet.csproj | 15 +++ OSCLeashNet/Program.cs | 215 +++++++++++++++++++++++++++++++++ OSCLeashNet/VRChatOSCLeash.ico | Bin 0 -> 172091 bytes 7 files changed, 325 insertions(+) create mode 100644 .gitignore create mode 100644 OSCLeashNet.sln create mode 100644 OSCLeashNet/Config.cs create mode 100644 OSCLeashNet/LeashParameters.cs create mode 100644 OSCLeashNet/OSCLeashNet.csproj create mode 100644 OSCLeashNet/Program.cs create mode 100644 OSCLeashNet/VRChatOSCLeash.ico diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..97b7fd2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/.idea/ +/Temp/ +/.run/ +/OSCLeashNet/bin/ +/OSCLeashNet/obj/ \ No newline at end of file diff --git a/OSCLeashNet.sln b/OSCLeashNet.sln new file mode 100644 index 0000000..59e9cab --- /dev/null +++ b/OSCLeashNet.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OSCLeashNet", "OSCLeashNet\OSCLeashNet.csproj", "{B517BDB6-FEE9-4CAB-A94D-0544DBA441C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B517BDB6-FEE9-4CAB-A94D-0544DBA441C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B517BDB6-FEE9-4CAB-A94D-0544DBA441C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B517BDB6-FEE9-4CAB-A94D-0544DBA441C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B517BDB6-FEE9-4CAB-A94D-0544DBA441C3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/OSCLeashNet/Config.cs b/OSCLeashNet/Config.cs new file mode 100644 index 0000000..9ee326b --- /dev/null +++ b/OSCLeashNet/Config.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Encodings.Web; +using System.Text.Json; + +namespace OSCLeashNet +{ + [Serializable] + public class Config + { + static readonly string ConfigPath = $"{AppContext.BaseDirectory}config.json"; + public static Config Instance { get; } = LoadConfig(); + + public string Ip { get; set; } = "127.0.0.1"; + + public int ListeningPort { get; set; } = 9001; + public int SendingPort { get; set; } = 9000; + public float RunDeadzone { get; set; } = 0.70f; + public float WalkDeadzone { get; set; } = 0.15f; + public float ActiveDelay { get; set; } = 0.1f; + public float InactiveDelay { get; set; } = 0.15f; + public float InputSendDelay { get; set; } = 0.1f; + public bool Logging { get; set; } + + public Dictionary Parameters { get; set; } = new Dictionary() + { + { "Z_Positive", "Leash_Z+" }, + { "Z_Negative", "Leash_Z-" }, + { "X_Positive", "Leash_X+" }, + { "X_Negative", "Leash_X-" }, + { "PhysboneParameter", "Leash" }, + }; + + static Config LoadConfig() + { + var options = new JsonSerializerOptions() { WriteIndented = true, AllowTrailingCommas = true }; + Config? cfg = File.Exists(ConfigPath) ? JsonSerializer.Deserialize(File.ReadAllText(ConfigPath), options) : null; + if(cfg == null) + { + cfg = new Config(); + cfg.SaveConfig(); + } + + return cfg; + } + + void SaveConfig() + { + var options = new JsonSerializerOptions() { WriteIndented = true, AllowTrailingCommas = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; + string json = JsonSerializer.Serialize(this, options); + File.WriteAllText(ConfigPath, json); + } + } +} \ No newline at end of file diff --git a/OSCLeashNet/LeashParameters.cs b/OSCLeashNet/LeashParameters.cs new file mode 100644 index 0000000..9150a0b --- /dev/null +++ b/OSCLeashNet/LeashParameters.cs @@ -0,0 +1,19 @@ +namespace OSCLeashNet +{ + public class LeashParameters + { + public bool WasGrabbed = false; + public bool Grabbed = false; + public float Stretch = 0; + public float ZPositive = 0; + public float ZNegative = 0; + public float XPositive = 0; + public float XNegative = 0; + + public override string ToString() + { + return + $"Grabbed - {Grabbed} was {WasGrabbed} | Stretch - {Stretch} | ({ZPositive - ZNegative}, {XPositive - XNegative})"; + } + } +} \ No newline at end of file diff --git a/OSCLeashNet/OSCLeashNet.csproj b/OSCLeashNet/OSCLeashNet.csproj new file mode 100644 index 0000000..2f38c04 --- /dev/null +++ b/OSCLeashNet/OSCLeashNet.csproj @@ -0,0 +1,15 @@ + + + + Exe + netcoreapp3.1 + enable + VRChatOSCLeash.ico + Pumkin + + + + + + + diff --git a/OSCLeashNet/Program.cs b/OSCLeashNet/Program.cs new file mode 100644 index 0000000..a4541c7 --- /dev/null +++ b/OSCLeashNet/Program.cs @@ -0,0 +1,215 @@ +using System; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Threading; +using System.Threading.Tasks; +using BuildSoft.OscCore; + +namespace OSCLeashNet +{ + public static class Program + { + const string ParamPrefix = "/avatar/parameters/"; + const string InputPrefix = "/input/"; + + static readonly string ZPosAddress = $"{ParamPrefix}{Config.Instance.Parameters["Z_Positive"]}"; + static readonly string ZNegAddress = $"{ParamPrefix}{Config.Instance.Parameters["Z_Negative"]}"; + static readonly string XPosAddress = $"{ParamPrefix}{Config.Instance.Parameters["X_Positive"]}"; + static readonly string XNegAddress = $"{ParamPrefix}{Config.Instance.Parameters["X_Negative"]}"; + static readonly string GrabAddress = $"{ParamPrefix}{Config.Instance.Parameters["PhysboneParameter"]}_IsGrabbed"; + static readonly string StretchAddress = $"{ParamPrefix}{Config.Instance.Parameters["PhysboneParameter"]}_Stretch"; + + static readonly object LockObj = new object(); + static readonly LeashParameters Leash = new LeashParameters(); + + static readonly float RunDeadzone = Config.Instance.RunDeadzone; + static readonly float WalkDeadzone = Config.Instance.WalkDeadzone; + static readonly TimeSpan InactiveDelay = TimeSpan.FromSeconds(Config.Instance.InputSendDelay); + static readonly bool Logging = Config.Instance.Logging; + + static OscClient Client; + static OscServer Server; + + public static async Task Main() + { + Console.Title = "OSCLeashNet"; + Console.WriteLine("\x1b OSCLeash is Running! \x1b"); + Console.WriteLine(Config.Instance.Ip == IPAddress.Loopback.ToString() ? "IP: Localhost" : $"IP: {Config.Instance.Ip} | Not Localhost? Wack."); + Console.WriteLine("Listening on port: " + Config.Instance.ListeningPort); + Console.WriteLine("Sending to port: " + Config.Instance.SendingPort); + Console.WriteLine($"Run deadzone {MathF.Round(Config.Instance.RunDeadzone * 100, 3)}% of stretch"); + Console.WriteLine($"Walking deadzone {MathF.Round(Config.Instance.WalkDeadzone * 100, 3)}% of stretch"); + Console.WriteLine($"Delays of {Config.Instance.ActiveDelay * 1000}ms & {Config.Instance.InactiveDelay * 1000}ms"); + + Client = new OscClient(Config.Instance.Ip, Config.Instance.SendingPort); + + StartServer(); + await Task.Run(async () => + { + LeashOutput(0f, 0f, 0f); + TimeSpan delay = TimeSpan.FromSeconds(Config.Instance.ActiveDelay); + while(true) + { + LeashRun(); + await Task.Delay(delay); + } + }); + } + + static void StartServer() + { + if(IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners().Any(x => x.Port == Config.Instance.ListeningPort)) + { + Console.WriteLine("\x1b \x1b"); + Console.WriteLine($"\x1b Warning: An application is already running on port {Config.Instance.ListeningPort}! \x1b"); + Console.WriteLine("\x1b \x1b"); + Console.WriteLine("Press any key to Exit."); + + Console.ReadKey(true); + Environment.Exit(0); + } + + Server = new OscServer(Config.Instance.ListeningPort); + + Server.TryAddMethod(ZPosAddress, OnReceiveZPos); + Server.TryAddMethod(ZNegAddress, OnReceiveZNeg); + Server.TryAddMethod(XPosAddress, OnReceiveXPos); + Server.TryAddMethod(XNegAddress, OnReceiveXNeg); + Server.TryAddMethod(GrabAddress, OnReceiveGrab); + Server.TryAddMethod(StretchAddress, OnReceiveStretch); + + Server.Start(); + } + + static void LeashRun() + { + bool leashGrabbed, leashReleased; + float verticalOutput, horizontalOutput; + + lock(LockObj) + { + verticalOutput = (Leash.ZPositive - Leash.ZNegative) * Leash.Stretch; + horizontalOutput = (Leash.XPositive - Leash.XNegative) * Leash.Stretch; + + leashGrabbed = Leash.Grabbed; + + if(leashGrabbed) + Leash.WasGrabbed = true; + + leashReleased = Leash.Grabbed != Leash.WasGrabbed; + + if(leashReleased) + Leash.WasGrabbed = false; + } + + if(leashGrabbed) + { + if(Leash.Stretch > RunDeadzone) + LeashOutput(verticalOutput, horizontalOutput, 1f); + else if(Leash.Stretch > WalkDeadzone) + LeashOutput(verticalOutput, horizontalOutput, 0f); + else + LeashOutput(0f, 0f, 0f); + } + else if(leashReleased) + { + LeashOutput(0f, 0f, 0f); + Thread.Sleep(InactiveDelay); + LeashOutput(0f, 0f, 0f); + } + else + { + Thread.Sleep(InactiveDelay); + } + } + + static void LeashOutput(float vertical, float horizontal, float run) + { + Client.Send($"{InputPrefix}Vertical", vertical); + Client.Send($"{InputPrefix}Horizontal", horizontal); + Client.Send($"{InputPrefix}Run", run); + + if(Logging) + Console.WriteLine($"Sending: Vertical - {MathF.Round(vertical, 2)} | Horizontal = {MathF.Round(horizontal, 2)} | Run - {run}"); + } + + static void OnReceiveZPos(OscMessageValues msg) + { + try + { + lock(LockObj) + Leash.ZPositive = msg.ReadFloatElement(0); + } + catch(Exception ex) + { + Console.WriteLine($"Exception occured when trying to read float value on address {ZPosAddress}:\n{ex.Message}"); + } + } + + static void OnReceiveZNeg(OscMessageValues msg) + { + try + { + lock(LockObj) + Leash.ZNegative = msg.ReadFloatElement(0); + } + catch(Exception ex) + { + Console.WriteLine($"Exception occured when trying to read float value on address {ZNegAddress}:\n{ex.Message}"); + } + } + + static void OnReceiveXPos(OscMessageValues msg) + { + try + { + lock(LockObj) + Leash.XPositive = msg.ReadFloatElement(0); + } + catch(Exception ex) + { + Console.WriteLine($"Exception occured when trying to read float value on address {XPosAddress}:\n{ex.Message}"); + } + } + + static void OnReceiveXNeg(OscMessageValues msg) + { + try + { + lock(LockObj) + Leash.XNegative = msg.ReadFloatElement(0); + } + catch(Exception ex) + { + Console.WriteLine($"Exception occured when trying to read float value on address {XNegAddress}:\n{ex.Message}"); + } + } + + static void OnReceiveStretch(OscMessageValues msg) + { + try + { + lock(LockObj) + Leash.Stretch = msg.ReadFloatElement(0); + } + catch(Exception ex) + { + Console.WriteLine($"Exception occured when trying to read float value on address {StretchAddress}:\n{ex.Message}"); + } + } + + static void OnReceiveGrab(OscMessageValues msg) + { + try + { + lock(LockObj) + Leash.Grabbed = msg.ReadBooleanElement(0); + } + catch(Exception ex) + { + Console.WriteLine($"Exception occured when trying to read float value on address {GrabAddress}:\n{ex.Message}"); + } + } + } +} \ No newline at end of file diff --git a/OSCLeashNet/VRChatOSCLeash.ico b/OSCLeashNet/VRChatOSCLeash.ico new file mode 100644 index 0000000000000000000000000000000000000000..30c3d3e22944c47767f7443d6782261abc3b2cb8 GIT binary patch literal 172091 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