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;
}
}