private AutopilotMode? locked_dir = null; public void Update() { locked_dir = AutopilotMode.Prograde; //TODO Remove var l_locked_dir = locked_dir; if (l_locked_dir is null) return; locked_dir = null; if (!in_valid_game_state) return; if (!menu_open) return; var vessel = GameManager.Instance.Game.ViewController.GetActiveSimVessel(true); var autopilot = vessel.Autopilot; if (l_locked_dir != autopilot.AutopilotMode) return; locked_dir = l_locked_dir; var telemetry = (TelemetryComponent)autopilot.GetType().GetField("_telemetry", BindingFlags.Instance|BindingFlags.NonPublic).GetValue(autopilot); var curr_forward = vessel.transform.up; //TODO Why not forward??? var targ_forward = telemetry.OrbitMovementPrograde; Logger.LogDebug($"Vector diff sqr mag={(curr_forward - targ_forward).sqrMagnitude}"); if ((curr_forward - targ_forward).sqrMagnitude==0) return; //TODO <0.01 var rotation = Rotation.FromTo(curr_forward, targ_forward); Logger.LogDebug($"Rotating from forward={vessel.transform.forward.vector} up={vessel.transform.up.vector}"); Logger.LogDebug($"Towards prograde={telemetry.OrbitMovementPrograde.vector}"); Logger.LogDebug($"Using rotation={rotation.localRotation}"); vessel.transform.UpdateRotation(rotation); Logger.LogDebug($"To final rotation forward={vessel.transform.forward.vector} up={vessel.transform.up.vector}"); //autopilot.SetMode(l_locked_dir.Value); }