#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);
void initializeFlightPlan();
FGAIFlightPlan* GetFlightPlan() const { return fp; };
void ProcessFlightPlan( double dt, time_t now );
- time_t checkForArrivalTime(const string& wptName);
+ time_t checkForArrivalTime(const std::string& wptName);
void AccelTo(double speed);
void PitchTo(double angle);
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;}
const char * _getTransponderCode() const;
- bool reachedWaypoint;
bool needsTaxiClearance;
bool _needsGroundElevation;
int takeOffStatus; // 1 = joined departure cue; 2 = Passed DepartureHold waypoint; handover control to tower; 0 = any other state.