Kramax.FlightPlan.UpdateData C# (CSharp) Méthode

UpdateData() private méthode

private UpdateData ( George george, Vessel vessel, VesselData vdata ) : void
george George
vessel Vessel
vdata VesselData
Résultat void
        private void UpdateData(George george, Vessel vessel, VesselData vdata)
        {
            planet = vessel.mainBody;

            // var mypos = vessel.findWorldCenterOfMass();
            double mylat = vessel.latitude;
            double mylon = vessel.longitude;
            double myalt = vessel.altitude;

            position.lat = mylat;
            position.lon = mylon;
            position.alt = myalt;
            position.SetFlag(WPFlag.Current);

            if (prev == null || next == null)
                return;

            double prev_dXt = courseStatus.dXt;
            double prev_distance = courseStatus.currentDistance;

            CrossTrackError(planet,
                            prev.lat, prev.lon,
                            next.lat, next.lon,
                            mylat, mylon,
                            courseStatus);

            // track if this course has ever been valid to avoid sequencing over things entirely
            // without user being aware. Not fraction is clamped 0 to 1 so do not use that.
            if (!courseStatus.beenValid && (0 < courseStatus.fraction && courseStatus.fraction < 1))
            {
                Deb.Log("UpdateData: marking course to {0} with dist {1} as valid", next, courseStatus.distanceTraveled);
                courseStatus.beenValid = true;
            }

            double timestamp = Planetarium.GetUniversalTime();
            double delta_time = timestamp - courseStatus.timestamp;
            courseStatus.timestamp = timestamp;

            // who knows if the sign will be right here; fixme
            // heading is not stable if craft is wallowing
            // courseStatus.vXt = vessel.srfSpeed * Math.Sin(ToRadians(vdata.heading-courseStatus.currentBearing));
            double delta_dXt = courseStatus.dXt - prev_dXt;
            double delta_distance = prev_distance - courseStatus.currentDistance;

            if (delta_time > 0 && !Double.IsNaN(delta_dXt) && !Double.IsNaN(delta_distance))
            {
                courseStatus.vXt = delta_dXt / delta_time;
                courseStatus.vC = delta_distance / delta_time;
            }
            else
            {
                courseStatus.vXt = Double.NaN;
                courseStatus.vC = Double.NaN;
            }

            // Deb.Log("FP: delta_t={2}, dXt={0}, vXt={1}", courseStatus.dXt, courseStatus.vXt, delta_time);
            // Deb.Log("Along track velocity: {0}", courseStatus.vC);

            if (next.HasFlag(WPFlag.Vertical))
            {
                if (prev.HasFlag(WPFlag.Vertical))
                {
                    UpdateCourseVertical(planet, prev.alt, next.alt, myalt, courseStatus);
                }
                else
                {
                    courseStatus.dVt = myalt - next.alt;
                    courseStatus.currentAltitude = next.alt;
                }
            }
            else
            {
                courseStatus.dVt = Double.NaN;
                courseStatus.currentAltitude = Double.NaN;
            }
        }