RunOncePath("lib/navball").

// Fly level toward the current compass heading.
function HoldHorizon {
  parameter Kp is 0.02.
  parameter Ki is 0.04.
  parameter Kd is 0.0066.

  SAS off.

  local pitchPID is PidLoop(Kp, Ki, Kd).

  // local rollPID is PidLoop(Kp, Ki, Kd).
  // lock rollVec to VXCL(SHIP:FACING:FOREVECTOR, SHIP:FACING:TOPVECTOR).
  // lock upVec to VXCL(SHIP:FACING:FOREVECTOR, SHIP:UP:FOREVECTOR).

  local h is GetHeading().

  local p is 0.
  lock p to pitchPID:Update(TIME:SECONDS, SHIP:VERTICALSPEED).
  lock STEERING to Heading(h, p, 0).

  // until done {
  //   set SHIP:CONTROL:PITCH to pitchPID:Update(TIME:SECONDS, GetPitch(SHIP:SRFPROGRADE:FOREVECTOR)).
  //   set SHIP:CONTROL:ROLL to rollPID:Update(TIME:SECONDS, VAng(rollVec, upVec)).
  // }

  wait until done.
  set done to false.
  unlock STEERING.
  SAS on.
  // set SHIP:CONTROL:PITCH to 0.
  // set SHIP:CONTROL:ROLL to 0.
}