]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIAircraft.cxx
fix a pointer reference.
[flightgear.git] / src / AIModel / AIAircraft.cxx
index 6559bbcbd7ffee1c014d01c772b3feec8e7822c5..3f7b476d4e52b844f1409fa253a4950a57f2ae93 100644 (file)
@@ -79,11 +79,12 @@ FGAIAircraft::FGAIAircraft(FGAISchedule *ref) : FGAIBase(otAircraft) {
     alt_lock = false;
     roll = 0;
     headingChangeRate = 0.0;
+    headingError = 0;
 
     holdPos = false;
 
     _performance = 0; //TODO initialize to JET_TRANSPORT from PerformanceDB
-    
+    dt = 0;
 }
 
 
@@ -167,19 +168,9 @@ void FGAIAircraft::setPerformance(const std::string& acclass) {
 
 void FGAIAircraft::checkVisibility() 
 {
-     double visibility_meters = fgGetDouble("/environment/visibility-m");
-
-     FGViewer* vw = globals->get_current_view();
-     double course, distance;
-
-     SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
-     SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0);
-     view.CourseAndDistance(current, &course, &distance);
-     if (distance > visibility_meters) {
-         invisible = true;
-      } else {
-         invisible = false;
-      }
+  double visibility_meters = fgGetDouble("/environment/visibility-m");
+  FGViewer* vw = globals->get_current_view();
+  invisible = (SGGeodesy::distanceM(vw->getPosition(), pos) > visibility_meters);
 }
 
 
@@ -287,8 +278,8 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
         }
 
         //TODO let the fp handle this (loading of next leg)
-        fp->IncrementWaypoint((bool) trafficRef);
-        if (!(fp->getNextWaypoint()) && trafficRef)
+        fp->IncrementWaypoint( trafficRef != 0 );
+        if (!(fp->getNextWaypoint()) && trafficRef != 0)
             if (!loadNextLeg()) {
                 setDie(true);
                 return;
@@ -409,14 +400,9 @@ void FGAIAircraft::getGroundElev(double dt) {
     // Only do the proper hitlist stuff if we are within visible range of the viewer.
     if (!invisible) {
         double visibility_meters = fgGetDouble("/environment/visibility-m");
-
         FGViewer* vw = globals->get_current_view();
-        double course, distance;
-
-        SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
-        SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0);
-        view.CourseAndDistance(current, &course, &distance);
-        if (distance > visibility_meters) {
+        
+        if (SGGeodesy::distanceM(vw->getPosition(), pos) > visibility_meters) {
             return;
         }
 
@@ -427,7 +413,7 @@ void FGAIAircraft::getGroundElev(double dt) {
         }
 
         double alt;
-        if (globals->get_scenery()->get_elevation_m(SGGeod::fromGeodM(pos, 20000), alt, 0))
+        if (getGroundElevationM(SGGeod::fromGeodM(pos, 20000), alt, 0))
             tgt_altitude_ft = alt * SG_METER_TO_FEET;
     }
 }
@@ -659,16 +645,10 @@ bool FGAIAircraft::leadPointReached(FGAIFlightPlan::waypoint* curr) {
 
 
 bool FGAIAircraft::aiTrafficVisible() {
-    double userLatitude  = fgGetDouble("/position/latitude-deg");
-    double userLongitude = fgGetDouble("/position/longitude-deg");
-    double course, distance;
-
-    SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
-    SGWayPoint user (userLongitude, userLatitude, 0);
-
-    user.CourseAndDistance(current, &course, &distance);
-
-    return ((distance * SG_METER_TO_NM) <= TRAFFICTOAIDISTTODIE);
+  SGGeod userPos(SGGeod::fromDeg(fgGetDouble("/position/longitude-deg"), 
+    fgGetDouble("/position/latitude-deg")));
+  
+  return (SGGeodesy::distanceNm(userPos, pos) <= TRAFFICTOAIDISTTODIE);
 }