#include <Airports/dynamics.hxx>
#include <Airports/airport.hxx>
#include <Main/util.hxx>
+#include <Traffic/Schedule.hxx>
#include <simgear/structure/exception.hxx>
// 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>
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
// 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;
return vs;
}
+void FGAIAircraft::clearATCController()
+{
+ controller = 0;
+ prevController = 0;
+ towerController = 0;
+}
+
void FGAIAircraft::assertSpeed(double speed)
{
if ((speed < -50) || (speed > 1000)) {
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()) {
}
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;