public static OrbitData FromOrbit(Orbit orbit) { return(new OrbitData { SOI = orbit.referenceBody.bodyName, AP = Converters.Distance(Math.Max(0, orbit.ApA)), PE = Converters.Distance(Math.Max(0, orbit.PeA)), timeToAP = Converters.Duration(Math.Max(0, orbit.timeToAp)), timeToPE = Converters.Duration(Math.Max(0, orbit.timeToPe)), INC = orbit.inclination.ToString("F3") + "°", Period = Converters.Duration(Math.Max(0, orbit.period), 4), IsSOIChange = orbit.patchEndTransition == Orbit.PatchTransitionType.ESCAPE || orbit.patchEndTransition == Orbit.PatchTransitionType.ENCOUNTER, SOIChangeTime = Converters.Duration(orbit.UTsoi - Planetarium.GetUniversalTime()), SOIChangeDate = KSPUtil.PrintDateCompact(orbit.UTsoi, true, true) }); }
private List <DisplayItem> getPhysicalData(CelestialBody body) { var radius = DisplayItem.Create("Radius: ", (body.Radius / 1000d).ToString("N0") + "km"); var mass = DisplayItem.Create("Mass: ", body.Mass.ToString("0.###E+0") + "kg"); var gm = DisplayItem.Create("GM: ", body.gravParameter.ToString("0.###E+0")); var gravity = DisplayItem.Create("Surface Gravity: ", body.GeeASL.ToString("0.####") + "g"); var escape = 2d * body.gravParameter / body.Radius; escape = Math.Sqrt(escape); var escapeVelocity = DisplayItem.Create("Escape Velocity: ", escape.ToString("0.0") + "m/s"); double alt = body.atmosphere ? body.atmosphereDepth + 20000 : 15000; var orbitVelocity = Math.Sqrt(body.gravParameter / (body.Radius + alt)); var standardOrbitVelocity = DisplayItem.Create("Std Orbit Velocity: ", orbitVelocity.ToString("0.0") + "m/s @ " + Converters.Distance(alt)); var rotationalPeriod = DisplayItem.Create("Rotational Period: ", Converters.Duration(body.rotationPeriod)); var tidalLocked = DisplayItem.Create("Tidally Locked: ", body.tidallyLocked ? "Yes" : "No"); var soiSize = DisplayItem.Create("SOI Size: ", (body.sphereOfInfluence / 1000d).ToString("N0") + "km"); return(new List <DisplayItem> { radius, mass, gm, gravity, standardOrbitVelocity, escapeVelocity, rotationalPeriod, tidalLocked, soiSize }); }