#ifndef _FG_AIAircraft_HXX
#define _FG_AIAircraft_HXX
-#include "AIManager.hxx"
#include "AIBase.hxx"
-#include <Traffic/SchedFlight.hxx>
-#include <Traffic/Schedule.hxx>
-#include <ATC/trafficcontrol.hxx>
-
#include <string>
class PerformanceData;
+class FGAISchedule;
+class FGAIFlightPlan;
+class FGATCController;
+class FGATCInstruction;
+class FGAIWaypoint;
class FGAIAircraft : public FGAIBase {
// virtual bool init(bool search_in_AI_path=false);
virtual void bind();
virtual void update(double dt);
+ virtual void unbind();
void setPerformance(const std::string& acType, const std::string& perfString);
// void setPerformance(PerformanceData *ps);
FGATCController * getATCController() { return controller; };
+ void clearATCController();
protected:
void Run(double dt);
private:
FGAISchedule *trafficRef;
- FGATCController *controller,
+ FGATCController *controller,
*prevController,
*towerController; // Only needed to make a pre-announcement
double speedFraction;
double groundTargetSpeed;
double groundOffset;
- double dt;
bool use_perf_vs;
SGPropertyNode_ptr refuel_node;
void controlSpeed(FGAIWaypoint* curr,
FGAIWaypoint* next);
- void updatePrimaryTargetValues(bool& flightplanActive, bool& aiOutOfSight);
+ void updatePrimaryTargetValues(double dt, bool& flightplanActive, bool& aiOutOfSight);
- void updateSecondaryTargetValues();
- void updateHeading();
+ void updateSecondaryTargetValues(double dt);
+ void updateHeading(double dt);
void updateBankAngleTarget();
- void updateVerticalSpeedTarget();
+ void updateVerticalSpeedTarget(double dt);
void updatePitchAngleTarget();
- void updateActualState();
+ void updateActualState(double dt);
void updateModelProperties(double dt);
- void handleATCRequests();
- void checkVisibility();
+ void handleATCRequests(double dt);
inline bool isStationary() { return ((fabs(speed)<=0.0001)&&(fabs(tgt_speed)<=0.0001));}
inline bool needGroundElevation() { if (!isStationary()) _needsGroundElevation=true;return _needsGroundElevation;}