]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIAircraft.cxx
Interim windows build fix
[flightgear.git] / src / AIModel / AIAircraft.cxx
index 509fa5f6ace4d4d9b2fd6ebe1976cc6207912eec..285c3fee80f6efe85c3288ac85ae12db8dec696a 100644 (file)
 #include <Airports/dynamics.hxx>
 #include <Airports/airport.hxx>
 #include <Main/util.hxx>
+#include <Traffic/Schedule.hxx>
 
 #include <simgear/structure/exception.hxx>
 
 #include <string>
-#include <math.h>
-#include <time.h>
-
-#ifdef _MSC_VER
-#  include <float.h>
-#  define finite _finite
-#elif defined(__sun) || defined(sgi)
-#  include <ieeefp.h>
-#endif
+#include <cmath>
+#include <ctime>
 
+// defined in AIShip.cxx
+extern double fgIsFinite(double x);
 
+#include "AIManager.hxx"
 #include "AIAircraft.hxx"
+#include "AIFlightPlan.hxx"
 #include "performancedata.hxx"
 #include "performancedb.hxx"
 #include <signal.h>
@@ -138,6 +136,12 @@ void FGAIAircraft::update(double dt) {
     Transform();
 }
 
+void FGAIAircraft::unbind()
+{
+    FGAIBase::unbind();
+    clearATCController();
+}
+
 void FGAIAircraft::setPerformance(const std::string& acType, const std::string& acclass)
 {
   static PerformanceDB perfdb; //TODO make it a global service
@@ -177,18 +181,12 @@ void FGAIAircraft::setPerformance(const std::string& acType, const std::string&
     // AI manager. In this particular case, the AIAircraft is used to shadow the user's aircraft's behavior in the AI world.
     // Since we perhaps don't want a radar entry of our own aircraft, the following conditional should probably be adequate
     // enough
-     if (manager)
+     if (manager){
         UpdateRadar(manager);
-     checkVisibility();
+       invisible = !manager->isVisible(pos);
+     }
   }
 
-void FGAIAircraft::checkVisibility() 
-{
-  double visibility_meters = fgGetDouble("/environment/visibility-m");
-  invisible = (SGGeodesy::distanceM(globals->get_view_position(), pos) > visibility_meters);
-}
-
-
 
 void FGAIAircraft::AccelTo(double speed) {
     tgt_speed = speed;
@@ -419,6 +417,13 @@ double FGAIAircraft::calcVerticalSpeed(double vert_ft, double dist_m, double spe
     return vs;
 }
 
+void FGAIAircraft::clearATCController()
+{
+    controller = 0;
+    prevController = 0;
+    towerController = 0;
+}
+
 void FGAIAircraft::assertSpeed(double speed)
 {
     if ((speed < -50) || (speed > 1000)) {
@@ -592,8 +597,8 @@ void FGAIAircraft::announcePositionToController() {
             controller = trafficRef->getDepartureAirport()->getDynamics()->getStartupController();
         break;
     case 2:              // Taxiing to runway
-        if (trafficRef->getDepartureAirport()->getDynamics()->getGroundNetwork()->exists())
-            controller = trafficRef->getDepartureAirport()->getDynamics()->getGroundNetwork();
+        if (trafficRef->getDepartureAirport()->getDynamics()->getGroundController()->exists())
+            controller = trafficRef->getDepartureAirport()->getDynamics()->getGroundController();
         break;
     case 3:              //Take off tower controller
         if (trafficRef->getDepartureAirport()->getDynamics()) {
@@ -604,13 +609,13 @@ void FGAIAircraft::announcePositionToController() {
         }
         break;
     case 6:
-         if (trafficRef->getDepartureAirport()->getDynamics()) {
+         if (trafficRef->getArrivalAirport()->getDynamics()) {
              controller = trafficRef->getArrivalAirport()->getDynamics()->getApproachController();
           }
           break;
     case 8:              // Taxiing for parking
-        if (trafficRef->getArrivalAirport()->getDynamics()->getGroundNetwork()->exists())
-            controller = trafficRef->getArrivalAirport()->getDynamics()->getGroundNetwork();
+        if (trafficRef->getArrivalAirport()->getDynamics()->getGroundController()->exists())
+            controller = trafficRef->getArrivalAirport()->getDynamics()->getGroundController();
         break;
     default:
         controller = 0;
@@ -945,7 +950,7 @@ void FGAIAircraft::controlHeading(FGAIWaypoint* curr) {
         SG_NORMALIZE_RANGE(calc_bearing, 0.0, 360.0);
     }
 
-    if (finite(calc_bearing)) {
+    if (fgIsFinite(calc_bearing)) {
         double hdg_error = calc_bearing - tgt_heading;
         if (fabs(hdg_error) > 0.01) {
             TurnTo( calc_bearing );