]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIAircraft.cxx
Interim windows build fix
[flightgear.git] / src / AIModel / AIAircraft.cxx
index f05a5891774686baaec485c2de71e62fdbe27c05..285c3fee80f6efe85c3288ac85ae12db8dec696a 100644 (file)
@@ -29,6 +29,7 @@
 #include <Airports/dynamics.hxx>
 #include <Airports/airport.hxx>
 #include <Main/util.hxx>
+#include <Traffic/Schedule.hxx>
 
 #include <simgear/structure/exception.hxx>
 
@@ -39,7 +40,9 @@
 // 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>
@@ -133,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
@@ -172,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;
@@ -414,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)) {
@@ -587,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()) {
@@ -599,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;