private void updateVesselData() { var vessel = this.currentVessel; bool hasNextNode = false; var nextNodeTime = Vessel.GetNextManeuverTime(vessel, out hasNextNode); // some stuff doesn't need to be updated if it's not changing var shouldUpdate = vessel.isActiveVessel || vessel.loaded || !this.vesselData.Id.Equals(vessel.id); var vesselData = new VesselData { Id = vessel.id, OrbitData = OrbitData.FromOrbit(vessel.orbit), Resources = shouldUpdate ? updateVesselResourceData(vessel) : this.vesselData.Resources, CrewData = shouldUpdate ? this.updateVesselCrewData(vessel) : this.vesselData.CrewData, MET = Converters.Duration(Math.Abs(vessel.missionTime)), HasNextNode = hasNextNode, NextNodeIn = "T " + KSPUtil.PrintTime(Planetarium.GetUniversalTime() - nextNodeTime, 3, true), NextNodeTime = KSPUtil.PrintDateCompact(nextNodeTime, true, true), Situation = Vessel.GetSituationString(vessel), }; this.vesselData = vesselData; }
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 }); }