_performance = 0; //TODO initialize to JET_TRANSPORT from PerformanceDB
dt = 0;
takeOffStatus = 0;
+
+ trackCache.remainingLength = 0;
}
FGAIWaypoint* curr = 0;
curr = fp->getCurrentWaypoint();
- double tracklength = fp->checkTrackLength(wptName);
+ // don't recalculate tracklength unless the start/stop waypoint has changed
+ if (curr &&
+ ((curr->getName() != trackCache.startWptName)||
+ (wptName != trackCache.finalWptName)))
+ {
+ trackCache.remainingLength = fp->checkTrackLength(wptName);
+ trackCache.startWptName = curr->getName();
+ trackCache.finalWptName = wptName;
+ }
+ double tracklength = trackCache.remainingLength;
if (tracklength > 0.1) {
tracklength += fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr);
} else {
PerformanceData* _performance; // the performance data for this aircraft
void assertSpeed(double speed);
+
+ struct
+ {
+ double remainingLength;
+ std::string startWptName;
+ std::string finalWptName;
+ } trackCache;
};