]> git.mxchange.org Git - flightgear.git/commitdiff
Fixes for first/last legs on a route
authorJames Turner <zakalawe@mac.com>
Fri, 18 Dec 2015 03:22:14 +0000 (19:22 -0800)
committerJames Turner <zakalawe@mac.com>
Fri, 18 Dec 2015 03:22:14 +0000 (19:22 -0800)
- fixes total route distance calculation

src/Navaids/routePath.cxx

index d22043c2fb920738e41f2ab27d2403bcc9e0382b..403dbde028c22ac07704583b5f95ea6a10c7e27c 100644 (file)
@@ -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<RunwayWaypt*>(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