Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CVR support #111

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
122 changes: 76 additions & 46 deletions VRCFaceTracking/ArgsHandler.cs
Original file line number Diff line number Diff line change
@@ -1,47 +1,77 @@
using System;
using System.Text.RegularExpressions;

namespace VRCFaceTracking
{
public static class ArgsHandler
{
public static (int SendPort, string IP, int RecievePort) HandleArgs()
{
(int SendPort, string IP, int RecievePort) = (9000, "127.0.0.1", 9001);

foreach (var arg in Environment.GetCommandLineArgs())
{
if (arg.StartsWith("--osc="))
{
var oscConfig = arg.Remove(0, 6).Split(':');
if (oscConfig.Length < 3)
{
Console.WriteLine("Invalid OSC config: " + arg +"\nExpected format: --osc=<OutPort>:<IP>:<InPort>");
break;
}

if (!int.TryParse(oscConfig[0], out SendPort))
{
Console.WriteLine("Invalid OSC OutPort: " + oscConfig[0]);
break;
}

if (!new Regex("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$").IsMatch(oscConfig[1]))
{
Console.WriteLine("Invalid OSC IP: " + oscConfig[1]);
break;
}
IP = oscConfig[1];

if (!int.TryParse(oscConfig[2], out RecievePort))
{
Console.WriteLine("Invalid OSC InPort: " + oscConfig[2]);
break;
}
}
}

return (SendPort, IP, RecievePort);
}
}
using System;
using System.Text.RegularExpressions;

namespace VRCFaceTracking
{
public static class ArgsHandler
{

public static (int SendPort, string IP, int ReceivePort, string opMode) HandleArgs()
{
Logger.Msg("Loading Defaults");
(int SendPort, string IP, int ReceivePort, string opMode) = (9000, "127.0.0.1", 9001, "auto");

foreach (var arg in Environment.GetCommandLineArgs())
{
if ((arg.StartsWith("--help")) || (arg.StartsWith("--options")))
{
Logger.Msg("To set custom OSC port/IP config please use the following");
Logger.Msg("--osc=<OutPort>:<IP>:<InPort>");
Logger.Msg("To set operating mode please use the following");
Logger.Msg("--mode=vrc or --mode=cvr");
}
if (arg.StartsWith("--mode="))
{
opMode = arg.Remove(0, 7);
}
if (arg.StartsWith("--osc="))
{
Logger.Msg("Loading OSC config Args");
var oscConfig = arg.Remove(0, 6).Split(':');
if (oscConfig.Length < 3)
{
Logger.Error("Invalid OSC config: " + arg +"\nExpected format: --osc=<OutPort>:<IP>:<InPort>");
break;
}


int parsedIntSP;
if (int.TryParse(oscConfig[0], out parsedIntSP))
{
SendPort = parsedIntSP;
Logger.Msg("Loaded custom OSC OutPort value, " + SendPort);
}
else
{
Logger.Error("Malformed OSC OutPort value" + oscConfig[0] + ", please ensure you set a number");
}


if (!new Regex("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$").IsMatch(oscConfig[1]))
{
Logger.Error("Invalid OSC IP: " + oscConfig[1]);
break;
}
else
{
IP = oscConfig[1];
}

int parsedIntRP;
if (int.TryParse(oscConfig[2], out parsedIntRP))
{
ReceivePort = parsedIntRP;
Logger.Msg("Loaded custom OSC ReceivePort value, " + ReceivePort);
}
else
{
Logger.Error("Malformed OSC ReceivePort value " + oscConfig[2] + ", please ensure you set a number");
}

}
}

return (SendPort, IP, ReceivePort, opMode);
}
}
}
18 changes: 18 additions & 0 deletions VRCFaceTracking/CVR.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Microsoft.Win32;

namespace VRCFaceTracking
{
public static class CVR
{
public static readonly string CVRData = Path.Combine(Environment
.GetFolderPath(Environment.SpecialFolder.ApplicationData).Replace("Roaming", "LocalLow"), "Alpha Blend Interactive\\ChilloutVR");

public static readonly string CVROSCDirectory = Path.Combine(CVRData, "OSC");

public static bool IsCVRRunning() => Process.GetProcesses().Any(x => x.ProcessName == "ChilloutVR");
}
}
22 changes: 19 additions & 3 deletions VRCFaceTracking/ConfigParser.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Drawing.Text;
using System.IO;
using System.Linq;
using System.Text.Json;
Expand All @@ -8,7 +9,8 @@
namespace VRCFaceTracking
{
public static class ConfigParser
{
{
private static string _oscDir;
public class InputOutputDef
{
public string address { get; set; }
Expand All @@ -35,9 +37,23 @@ public class AvatarConfigSpec
public static Action OnConfigLoaded = () => { };

public static void ParseNewAvatar(string newId)
{
{
Logger.Msg("-------------------------------------------------");
Logger.Msg("avatar id = " + newId);
//check what mode we are in
if(Globals.opMode == "vrc")
{
Logger.Msg("Loading Avatar from VRChat");
_oscDir = VRChat.VRCOSCDirectory;
}
if (Globals.opMode == "cvr")
{
Logger.Msg("Loading Avatar from ChilloutVR");
_oscDir = CVR.CVROSCDirectory;
}

AvatarConfigSpec avatarConfig = null;
foreach (var userFolder in Directory.GetDirectories(VRChat.VRCOSCDirectory))
foreach (var userFolder in Directory.GetDirectories(_oscDir))
{
if (Directory.Exists(userFolder + "\\Avatars"))
foreach (var avatarFile in Directory.GetFiles(userFolder+"\\Avatars"))
Expand Down
Loading