From: James Turner Date: Fri, 18 Dec 2015 03:22:14 +0000 (-0800) Subject: Fixes for first/last legs on a route X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=b431696e9b7fcf656a2bcd29ff19018eb37d113b;p=flightgear.git Fixes for first/last legs on a route - fixes total route distance calculation --- diff --git a/src/Navaids/routePath.cxx b/src/Navaids/routePath.cxx index d22043c2f..403dbde02 100644 --- a/src/Navaids/routePath.cxx +++ b/src/Navaids/routePath.cxx @@ -238,6 +238,7 @@ public: turnEntryAngle(0.0), turnExitAngle(0.0), turnRadius(0.0), + legCourseTrue(0.0), pathDistanceM(0.0), turnPathDistanceM(0.0), overflightCompensationAngle(0.0), @@ -384,13 +385,14 @@ public: } } else { // happens for first leg - legCourseValid = true; if (isRunway) { + legCourseValid = true; FGRunway* rwy = static_cast(wpt.get())->runway(); turnExitAngle = next.legCourseTrue - rwy->headingDeg(); legCourseTrue = rwy->headingDeg(); flyOver = true; } else { + // don't set legCourseValid turnExitAngle = 0.0; } } @@ -988,6 +990,7 @@ void RoutePath::commonInit() } else { // final waypt, fix up some data d->waypoints[i].turnExitPos = d->waypoints[i].pos; + d->waypoints[i].turnEntryPos = d->waypoints[i].pos; } // now turn is computed, can resolve distances @@ -1197,9 +1200,15 @@ double RoutePath::distanceForVia(Via* via, int index) const double RoutePath::trackForIndex(int index) const { + if (d->waypoints[index].skipped) return trackForIndex(index - 1); - return d->waypoints[index].legCourseTrue; + + const WayptData& wd(d->waypoints[index]); + if (!wd.legCourseValid) + return 0.0; + + return wd.legCourseTrue; } double RoutePath::distanceForIndex(int index) const