X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIAircraft.hxx;h=dec7a86a41c48ade05b7026d775614bd49fbbd5a;hb=afcdbd3158503773644aa07dd86cd92d67946bd4;hp=ea99462d8b5ff1b7984338f0501366e7f352acd4;hpb=12f694f06d9f2ffabb66959bb3f055074cee9473;p=flightgear.git diff --git a/src/AIModel/AIAircraft.hxx b/src/AIModel/AIAircraft.hxx index ea99462d8..dec7a86a4 100644 --- a/src/AIModel/AIAircraft.hxx +++ b/src/AIModel/AIAircraft.hxx @@ -42,11 +42,10 @@ public: // virtual bool init(bool search_in_AI_path=false); virtual void bind(); - virtual void unbind(); virtual void update(double dt); - 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); @@ -69,6 +68,8 @@ public: double getBearing(double crse); void setAcType(const std::string& ac) { acType = ac; }; + std::string getAcType() const { return acType; } + void setCompany(const std::string& comp) { company = comp;}; void announcePositionToController(); //TODO have to be public? @@ -76,6 +77,12 @@ public: void setTaxiClearanceRequest(bool arg) { needsTaxiClearance = arg; }; bool getTaxiClearanceRequest() { return needsTaxiClearance; }; FGAISchedule * getTrafficRef() { return trafficRef; }; + void setTrafficRef(FGAISchedule *ref) { trafficRef = ref; }; + void resetTakeOffStatus() { takeOffStatus = 0;}; + void setTakeOffStatus(int status) { takeOffStatus = status; }; + void scheduleForATCTowerDepartureControl(int state); + + //inline bool isScheduledForTakeoff() { return scheduledForTakeoff; }; virtual const char* getTypeString(void) const { return "aircraft"; } @@ -94,14 +101,21 @@ public: inline double airspeed() const { return props->getFloatValue("velocities/airspeed-kt");}; 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; }; 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; @@ -123,18 +137,17 @@ 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); void updateSecondaryTargetValues(); - void updatePosition(); void updateHeading(); void updateBankAngleTarget(); void updateVerticalSpeedTarget(); @@ -144,6 +157,7 @@ private: 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); @@ -164,9 +178,12 @@ private: 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); };