Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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