/// <summary>
 /// Circularize around Moon
 /// - currently only onRails is implemented
 /// </summary>
 private void CircularizeAroundMoon()
 {
     // check ship is on segment where it near Moon
     if (onRails)
     {
         KeplerSequence keplerSeq = spaceship.GetComponent <KeplerSequence>();
         OrbitUniversal orbitU    = keplerSeq.GetCurrentOrbit();
         if (orbitU.centerNbody == moonBody)
         {
             // in orbit around the moon - do circularization
             OrbitData     orbitData       = new OrbitData(orbitU);
             OrbitTransfer circularizeXfer = new CircularizeXfer(orbitData);
             keplerSeq.RemoveFutureSegments();
             keplerSeq.AddManeuvers(circularizeXfer.GetManeuvers());
         }
     }
     else
     {
         // assume we're in orbit around the moon
         OrbitData orbitData = new OrbitData();
         orbitData.SetOrbitForVelocity(spaceship, moonBody);
         OrbitTransfer circularizeXfer = new CircularizeXfer(orbitData);
         ge.AddManeuvers(circularizeXfer.GetManeuvers());
     }
 }
 // Update is called once per frame
 void Update()
 {
     if (Input.GetKeyUp(KeyCode.C))
     {
         OrbitData currentOrbit = new OrbitData();
         currentOrbit.SetOrbitForVelocity(shipNbody, centerNbody);
         // circularize the orbit
         OrbitTransfer t = new CircularizeXfer(currentOrbit);
         // If this is a ship with a Kepler sequence take the maneuvers and add them as KeplerSequence elements
         // This allows the transfer to be time-reversible if the whole scene is on rails.
         if (keplerSeq != null)
         {
             keplerSeq.AddManeuvers(t.GetManeuvers());
         }
         else
         {
             // Nbody evolution (or plain onRails w/o KeplerSequence) use maneuvers
             GravityEngine.Instance().AddManeuver(t.GetManeuvers()[0]);
         }
     }
     else if (Input.GetKeyDown(KeyCode.R))
     {
         // return orbit to GravityEngine control (go Off-Rails)
         if (keplerSeq != null)
         {
             keplerSeq.AppendReturnToGE(GravityEngine.Instance().GetPhysicalTime(), shipNbody);
         }
     }
     else if (Input.GetKeyDown(KeyCode.W))
     {
         // return orbit to GravityEngine control (go Off-Rails)
         GravityEngine.Instance().ApplyImpulse(shipNbody, Vector3.up);
     }
 }