#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 unbind();
virtual void update(double dt);
+ virtual void unbind();
- void setPerformance(const std::string& perfString);
- void setPerformance(PerformanceData *ps);
+ void setPerformance(const std::string& acType, const std::string& perfString);
+ // void setPerformance(PerformanceData *ps);
void setFlightPlan(const std::string& fp, bool repat = false);
void SetFlightPlan(FGAIFlightPlan *f);
void initializeFlightPlan();
FGAIFlightPlan* GetFlightPlan() const { return fp; };
void ProcessFlightPlan( double dt, time_t now );
- time_t checkForArrivalTime(string wptName);
+ time_t checkForArrivalTime(const std::string& wptName);
void AccelTo(double speed);
void PitchTo(double angle);
double getBearing(double crse);
void setAcType(const std::string& ac) { acType = ac; };
+ const std::string& getAcType() const { return acType; }
+
void setCompany(const std::string& comp) { company = comp;};
void announcePositionToController(); //TODO have to be public?
- void processATC(FGATCInstruction instruction);
+ void processATC(const FGATCInstruction& instruction);
void setTaxiClearanceRequest(bool arg) { needsTaxiClearance = arg; };
bool getTaxiClearanceRequest() { return needsTaxiClearance; };
FGAISchedule * getTrafficRef() { return trafficRef; };
virtual const char* getTypeString(void) const { return "aircraft"; }
- std::string GetTransponderCode() { return transponderCode; };
+ const std::string& GetTransponderCode() { return transponderCode; };
void SetTransponderCode(const std::string& tc) { transponderCode = tc;};
// included as performance data needs them, who else?
inline double getVerticalSpeed() const { return vs; };
inline double altitudeAGL() const { return props->getFloatValue("position/altitude-agl-ft");};
inline double airspeed() const { return props->getFloatValue("velocities/airspeed-kt");};
- std::string atGate();
+ const std::string& atGate();
int getTakeOffStatus() { return takeOffStatus; };
void checkTcas();
+ double calcVerticalSpeed(double vert_ft, double dist_m, double speed, double error);
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 updatePosition();
- void updateHeading();
+ void updateSecondaryTargetValues(double dt);
+ void updateHeading(double dt);
void updateBankAngleTarget();
- void updateVerticalSpeedTarget();
+ void updateVerticalSpeedTarget(double dt);
void updatePitchAngleTarget();
- void updateActualState();
- void handleATCRequests();
- void checkVisibility();
+ void updateActualState(double dt);
+ void updateModelProperties(double dt);
+ 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;}
bool holdPos;
- bool _getGearDown() const;
-
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.
time_t timeElapsed;
PerformanceData* _performance; // the performance data for this aircraft
+
+ void assertSpeed(double speed);
+
+ struct
+ {
+ double remainingLength;
+ std::string startWptName;
+ std::string finalWptName;
+ } trackCache;
};