diff --git a/OSCCollar/ConsoleOutput.cs b/OSCCollar/ConsoleOutput.cs index 4521ca9..c01f077 100644 --- a/OSCCollar/ConsoleOutput.cs +++ b/OSCCollar/ConsoleOutput.cs @@ -5,69 +5,60 @@ namespace VRC_Console; public partial class OSCCollar { private const byte CoordinateSystemSize = 16; - private Task SetupConsoleOutput() + + private void PrintConsole() { - Layout layout = new Layout().SplitRows( - new Layout("Top"), - new Layout("Middle").SplitColumns( - new Layout("Config-Values"), - new Layout("Variable-Values"), - new Layout("Position") - ), - new Layout("Bottom")); - if(OperatingSystem.IsWindows()) - Console.WindowWidth += 20; - Table configTable = new Table(); - configTable.AddColumn("ConVar"); - configTable.AddColumn("Value"); - configTable.AddRow("IP", this._config.Ip); - configTable.AddRow("Send-Osc-Port", this._config.PortSend.ToString()); - configTable.AddRow("Receive-Osc-Port", _portReceive.ToString()); - configTable.AddRow("HTTP-Port", this.OscQueryService?.TcpPort.ToString() ?? ""); - configTable.AddRow("CalibrationX", $"{this._config.CalibrationX}"); - configTable.AddRow("CalibrationY", $"{this._config.CalibrationY}"); - configTable.AddRow(Resources.OSCCollar_ConsoleOutput_StretchDeadzone, $"{this._config.WalkStretchDeadzone}"); - configTable.AddRow(Resources.OSCCollar_ConsoleOutput_RunStretch, $"{this._config.RunStretch}"); - - Table variableTable = new Table(); - variableTable.AddColumn("OscVar"); - variableTable.AddColumn("Value"); - - layout["Top"].Update(new FigletText(FigletFont.Parse(Resources.alligatorFont), "OSC Collar").LeftJustified()); - layout["Config-Values"].Update(configTable); - layout["Variable-Values"].Update(variableTable); - layout["Position"].Update(new Panel(new Text(GetCoordinateSystem()))); - layout["Bottom"].Update(new Text($"{_lastNilMessageSent} AvatarId: {_avatarId} Runtime: {DateTime.Now.Subtract(_programStarted)}")); - - variableTable.AddRow("Status", ""); - variableTable.AddRow("GPS 1", ""); - variableTable.AddRow("GPS 2", ""); - variableTable.AddRow("GPS 3", ""); - variableTable.AddRow(Resources.OSCCollar_ConsoleOutput_PositionVector, ""); - variableTable.AddRow(Resources.OSCCollar_ConsoleOutput_LeashStretch, ""); - variableTable.AddRow(Resources.OSCCollar_ConsoleOutput_MovementVector, ""); - variableTable.AddRow("CalibrationX", ""); - variableTable.AddRow("CalibrationY", ""); - - return AnsiConsole.Live(layout).StartAsync(async displayContext => + Console.Clear(); + ValueTuple[] configValues = new[] { - while (true) - { - variableTable.Rows.Update(0, 1, new Text($"{(_allowMoving ? Resources.OSCCollar_ConsoleOutput_StatusEnabled : Resources.OSCCollar_ConsoleOutput_StatusDisabled)}")); - variableTable.Rows.Update(1, 1, new Text($"{_gps1.Distance:00.00000}")); - variableTable.Rows.Update(2, 1, new Text($"{_gps2.Distance:00.00000}")); - variableTable.Rows.Update(3, 1, new Text($"{_gps3.Distance:00.00000}")); - variableTable.Rows.Update(4, 1, new Text($"{_unitVectorLeash}")); - variableTable.Rows.Update(5, 1, new Text($"{_leashStretch:0.00000}")); - variableTable.Rows.Update(6, 1, new Text($"{_movementVector}")); - variableTable.Rows.Update(7, 1, new Text($"{GetCalibrationValues().Item1}")); - variableTable.Rows.Update(8, 1, new Text($"{GetCalibrationValues().Item2}")); - layout["Position"].Update(new Panel(new Text(GetCoordinateSystem()))); - layout["Bottom"].Update(new Text($"{_lastNilMessageSent} AvatarId: {_avatarId} Runtime: {DateTime.Now.Subtract(_programStarted)}")); - displayContext.Refresh(); - await Task.Delay(500); - } - }); + new ValueTuple("IP", this._config.Ip), + new ValueTuple("Send-Osc-Port", this._config.PortSend.ToString()), + new ValueTuple("Receive-Osc-Port", _portReceive.ToString()), + new ValueTuple("HTTP", this.OscQueryService?.TcpPort.ToString() ?? ""), + new ValueTuple("CalibrationX", $"{this._config.CalibrationX}"), + new ValueTuple("CalibrationY", $"{this._config.CalibrationY}"), + }; + + ValueTuple[] variableValues = new[] + { + new ValueTuple("Status", $"{(_allowMoving ? Resources.OSCCollar_ConsoleOutput_StatusEnabled : Resources.OSCCollar_ConsoleOutput_StatusDisabled)}"), + new ValueTuple("GPS 1", $"{_gps1.Distance:00.00000}"), + new ValueTuple("GPS 2", $"{_gps2.Distance:00.00000}"), + new ValueTuple("GPS 3", $"{_gps3.Distance:00.00000}"), + new ValueTuple("GPS 1", $"{_gps1.Distance:00.00000}"), + new ValueTuple(Resources.OSCCollar_ConsoleOutput_PositionVector, _unitVectorLeash.ToString()), + new ValueTuple(Resources.OSCCollar_ConsoleOutput_LeashStretch, _leashStretch.ToString()), + new ValueTuple(Resources.OSCCollar_ConsoleOutput_MovementVector, _movementVector.ToString()), + new ValueTuple("CalibrationX", $"{GetCalibrationValues().Item1}"), + new ValueTuple("CalibrationY", $"{GetCalibrationValues().Item2}") + }; + + Console.Write(GetCoordinateSystem()); + + int coordOffset = CoordinateSystemSize + 5; + + int valueOffset = configValues.MaxBy(item => item.Item1.Length).Item1.Length + 3; + for (int i = 0; i < configValues.Length; i++) + { + Console.SetCursorPosition(coordOffset, i); + Console.Write($"{configValues[i].Item1}:"); + Console.SetCursorPosition(coordOffset + valueOffset, i); + Console.Write(configValues[i].Item2); + } + ValueTuple x = configValues.MaxBy(item => item.Item1.Length + item.Item2.Length); + + int varOffset = coordOffset + x.Item1.Length + x.Item2.Length + 10; + valueOffset = variableValues.MaxBy(item => item.Item1.Length).Item1.Length + 3; + for (int i = 0; i < variableValues.Length; i++) + { + Console.SetCursorPosition(varOffset, i); + Console.Write($"{variableValues[i].Item1}:"); + Console.SetCursorPosition(varOffset + valueOffset, i); + Console.Write(variableValues[i].Item2); + } + + Console.SetCursorPosition(0, Console.WindowHeight - 2); + Console.Write($"{_lastNilMessageSent} AvatarId: {_avatarId} Runtime: {DateTime.Now.Subtract(_programStarted)}"); } private String GetCoordinateSystem() diff --git a/OSCCollar/OSCCollar.cs b/OSCCollar/OSCCollar.cs index 5214494..7a14e59 100644 --- a/OSCCollar/OSCCollar.cs +++ b/OSCCollar/OSCCollar.cs @@ -71,7 +71,6 @@ public partial class OSCCollar this._portReceive = Extensions.GetAvailableUdpPort(); this.SetupOSCServer(); this.SetupOSCQuery(); - this._consoleOutputTask = this.SetupConsoleOutput(); } private OSCCollar(string ip = "127.0.0.1", int portSend = 9000, double radius = 100, double calibrationX = 0, @@ -212,6 +211,7 @@ public partial class OSCCollar this._client.Send("/input/Vertical", 0f); this._client.Send("/input/Horizontal", 0f); this._lastNilMessageSent = DateTime.Now; + PrintConsole(); }else if (_allowMoving) { this._client.Send("/input/Vertical", Convert.ToSingle(_movementVector.Y));