private static void TrackRigidbody(OrbitDriver driver, CelestialBody refBody, double fdtOffset, ref double updateUT) { updateUT = Planetarium.GetUniversalTime(); if (driver.vessel != null) { driver.pos = (driver.vessel.CoMD - driver.referenceBody.position).xzy; } if (driver.vessel != null && driver.vessel.rootPart != null && driver.vessel.rootPart.rb != null) // && !driver.vessel.rootPart.rb.isKinematic { updateUT += fdtOffset; driver.vel = driver.vessel.velocityD.xzy + driver.orbit.GetRotFrameVelAtPos(driver.referenceBody, driver.pos); } else if (driver.updateMode == OrbitDriver.UpdateMode.IDLE) { driver.vel = driver.orbit.GetRotFrameVel(driver.referenceBody); } if (refBody != driver.referenceBody) { if (driver.vessel != null) { driver.pos = (driver.vessel.CoMD - refBody.position).xzy; } driver.vel = driver.vel + (driver.referenceBody.GetFrameVel() - refBody.GetFrameVel()); } driver.lastTrackUT = updateUT; //Do not call UpdateFromStateVectors as that would update the orbit data BASED on the current vessel position //driver.orbit.UpdateFromStateVectors(driver.pos, driver.vel, refBody, updateUT); //driver.pos.Swizzle(); //driver.vel.Swizzle(); }