X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIAircraft.hxx;h=d8cbe9d604498e18dabf5f8b24a31878dedef7bc;hb=37591d0ac9c316f107a3c38043edd3a7f89b4892;hp=7e65d0df51294732c4543a3dcff5c4461fc50f54;hpb=50415490e602bb0cb638e528b1ca1db16cf7a2f0;p=flightgear.git diff --git a/src/AIModel/AIAircraft.hxx b/src/AIModel/AIAircraft.hxx index 7e65d0df5..d8cbe9d60 100644 --- a/src/AIModel/AIAircraft.hxx +++ b/src/AIModel/AIAircraft.hxx @@ -53,6 +53,7 @@ public: void initializeFlightPlan(); FGAIFlightPlan* GetFlightPlan() const { return fp; }; void ProcessFlightPlan( double dt, time_t now ); + time_t checkForArrivalTime(string wptName); void AccelTo(double speed); void PitchTo(double angle); @@ -63,7 +64,9 @@ public: void getGroundElev(double dt); //TODO these 3 really need to be public? void doGroundAltitude(); - bool loadNextLeg (); + bool loadNextLeg (double dist=0); + void resetPositionFromFlightPlan(); + double getBearing(double crse); void setAcType(const std::string& ac) { acType = ac; }; void setCompany(const std::string& comp) { company = comp;}; @@ -73,6 +76,10 @@ public: void setTaxiClearanceRequest(bool arg) { needsTaxiClearance = arg; }; bool getTaxiClearanceRequest() { return needsTaxiClearance; }; FGAISchedule * getTrafficRef() { return trafficRef; }; + void setTrafficRef(FGAISchedule *ref) { trafficRef = ref; }; + void scheduleForATCTowerDepartureControl(); + + inline bool isScheduledForTakeoff() { return scheduledForTakeoff; }; virtual const char* getTypeString(void) const { return "aircraft"; } @@ -90,13 +97,19 @@ public: inline double altitudeAGL() const { return props->getFloatValue("position/altitude-agl-ft");}; inline double airspeed() const { return props->getFloatValue("velocities/airspeed-kt");}; std::string atGate(); + + void checkTcas(); + + FGATCController * getATCController() { return controller; }; protected: void Run(double dt); private: FGAISchedule *trafficRef; - FGATCController *controller, *prevController; + FGATCController *controller, + *prevController, + *towerController; // Only needed to make a pre-announcement bool hdg_lock; bool alt_lock; @@ -104,6 +117,8 @@ private: double dt_elev_count; double headingChangeRate; double headingError; + double minBearing; + double speedFraction; double groundTargetSpeed; double groundOffset; double dt; @@ -116,12 +131,13 @@ private: //subclasses to override specific behaviour bool fpExecutable(time_t now); void handleFirstWaypoint(void); - bool leadPointReached(FGAIFlightPlan::waypoint* curr); - bool handleAirportEndPoints(FGAIFlightPlan::waypoint* prev, time_t now); + bool leadPointReached(FGAIWaypoint* curr); + bool handleAirportEndPoints(FGAIWaypoint* prev, time_t now); + bool reachedEndOfCruise(double&); bool aiTrafficVisible(void); - void controlHeading(FGAIFlightPlan::waypoint* curr); - void controlSpeed(FGAIFlightPlan::waypoint* curr, - FGAIFlightPlan::waypoint* next); + void controlHeading(FGAIWaypoint* curr); + void controlSpeed(FGAIWaypoint* curr, + FGAIWaypoint* next); void updatePrimaryTargetValues(bool& flightplanActive, bool& aiOutOfSight); @@ -134,6 +150,9 @@ private: void updateActualState(); void handleATCRequests(); void checkVisibility(); + inline bool isStationary() { return ((fabs(speed)<=0.0001)&&(fabs(tgt_speed)<=0.0001));} + inline bool needGroundElevation() { if (!isStationary()) _needsGroundElevation=true;return _needsGroundElevation;} + double sign(double x); @@ -153,6 +172,8 @@ private: bool reachedWaypoint; bool needsTaxiClearance; + bool _needsGroundElevation; + bool scheduledForTakeoff; time_t timeElapsed; PerformanceData* _performance; // the performance data for this aircraft