public void Main(string argument, UpdateType updateSource) { subsystemManager.UpdateTime(); if (commandLine.TryParse(argument)) { subsystemManager.Command(commandLine.Argument(0), commandLine.Argument(1), commandLine.ArgumentCount > 2 ? commandLine.Argument(2) : null); } else { subsystemManager.Update(updateSource); Echo(subsystemManager.GetStatus()); } }
public void Main(string argument, UpdateType updateSource) { subsystemManager.UpdateTime(); if (argument == "descend") { Mode = 1; lockMatrix = Drive.Controller.WorldMatrix; } else if (argument == "ascend") { Mode = 2; lockMatrix = Drive.Controller.WorldMatrix; } else if (argument == "stop") { Mode = 0; lockMatrix = MatrixD.Zero; Drive.Clear(); } else if (commandLine.TryParse(argument)) { subsystemManager.Command(commandLine.Argument(0), commandLine.Argument(1), commandLine.ArgumentCount > 2 ? commandLine.Argument(2) : null); } else { try { subsystemManager.Update(updateSource); runs++; if (runs % 5 == 0) { OutputBuilder.Clear(); OutputBuilder.Append($"STATUS: ").AppendLine(Mode == 0 ? "STOP" : (Mode == 1 ? "DESC" : "ASCE")); foreach (var screen in Displays) { screen.ContentType = ContentType.TEXT_AND_IMAGE; screen.WriteText(OutputBuilder.ToString()); } var destination = new Waypoint(); if (Mode == 0) { Drive.Clear(); } else if (Mode == 1) { destination.MaxSpeed = DescendSpeed; var gravdir = Cockpit.GetNaturalGravity(); if (gravdir == Vector3D.Zero) { gravdir.Normalize(); destination.Position = gravdir * 10 + Cockpit.GetPosition(); var flatForward = Cockpit.WorldMatrix.Forward - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, gravdir); flatForward.Normalize(); var flatLeft = Cockpit.WorldMatrix.Left - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, gravdir); flatLeft.Normalize(); destination.Direction = flatForward * TrigHelpers.FastCos(0.02 * RotateSpeed) + flatLeft * TrigHelpers.FastSin(0.02 * RotateSpeed); } else { destination.Position = lockMatrix.Down * 10 + Cockpit.GetPosition(); destination.DirectionUp = lockMatrix.Up; var flatForward = Cockpit.WorldMatrix.Forward - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, lockMatrix.Down); flatForward.Normalize(); var flatLeft = Cockpit.WorldMatrix.Left - VectorHelpers.VectorProjection(Cockpit.WorldMatrix.Forward, lockMatrix.Down); flatLeft.Normalize(); destination.Direction = flatForward * TrigHelpers.FastCos(0.02 * RotateSpeed) + flatLeft * TrigHelpers.FastSin(0.02 * RotateSpeed); } } else if (Mode == 2) { destination.MaxSpeed = AscendSpeed; if (Drive.Controller == Cockpit) { var gravdir = Cockpit.GetNaturalGravity(); gravdir.Normalize(); destination.Position = -gravdir * 10 + Cockpit.GetPosition(); } else { destination.Position = lockMatrix.Down * 10 + Cockpit.GetPosition(); destination.Direction = lockMatrix.Forward; } } Drive.Move(destination.Position); Drive.Turn(destination.Direction); Drive.Spin(destination.DirectionUp); Drive.SetMaxSpeed(destination.MaxSpeed); } } catch (Exception e) { Me.GetSurface(0).WriteText(e.Message); Me.GetSurface(0).WriteText("\n", true); Me.GetSurface(0).WriteText(e.StackTrace); Me.GetSurface(0).WriteText("\n", true); Me.GetSurface(0).WriteText(e.ToString()); } var s = subsystemManager.GetStatus(); if (!string.IsNullOrEmpty(s)) { Echo(s); } else { Echo(((int)subsystemManager.OutputMode).ToString()); } } }