X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIAircraft.hxx;h=26ceb51207bbdf630c2592950a58a635a6ddc409;hb=b4fbde72b275dc75e8ecf7b44261aba642e5da0f;hp=035b44bc724667e150436149b7a953daf56aaa34;hpb=ba8ed137cfd05f3112592ee2c87be08d4a2123c7;p=flightgear.git diff --git a/src/AIModel/AIAircraft.hxx b/src/AIModel/AIAircraft.hxx index 035b44bc7..26ceb5120 100644 --- a/src/AIModel/AIAircraft.hxx +++ b/src/AIModel/AIAircraft.hxx @@ -26,37 +26,15 @@ #include #include +#include #include -SG_USING_STD(string); +class PerformanceData; class FGAIAircraft : public FGAIBase { -private: - typedef struct { - double accel; - double decel; - double climb_rate; - double descent_rate; - double takeoff_speed; - double climb_speed; - double cruise_speed; - double descent_speed; - double land_speed; - } PERF_STRUCT; - public: - enum aircraft_e { - LIGHT = 0, - WW2_FIGHTER, - JET_TRANSPORT, - JET_FIGHTER, - TANKER, - UFO - }; - static const PERF_STRUCT settings[]; - FGAIAircraft(FGAISchedule *ref=0); ~FGAIAircraft(); @@ -68,32 +46,55 @@ public: virtual void update(double dt); void setPerformance(const std::string& perfString); - void SetPerformance(const PERF_STRUCT *ps); + 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); + void AccelTo(double speed); void PitchTo(double angle); void RollTo(double angle); void YawTo(double angle); void ClimbTo(double altitude); void TurnTo(double heading); - void ProcessFlightPlan( double dt, time_t now ); - void setCallSign(const string& ); - - void getGroundElev(double dt); + + void getGroundElev(double dt); //TODO these 3 really need to be public? void doGroundAltitude(); - void loadNextLeg (); + bool loadNextLeg (double dist=0); + void resetPositionFromFlightPlan(); + double getBearing(double crse); - void setAcType(const string& ac) { acType = ac; }; - void setCompany(const string& comp) { company = comp;}; + void setAcType(const std::string& ac) { acType = ac; }; + void setCompany(const std::string& comp) { company = comp;}; - void announcePositionToController(); + void announcePositionToController(); //TODO have to be public? void processATC(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; }; + void SetTransponderCode(const std::string& tc) { transponderCode = tc;}; + + // included as performance data needs them, who else? + inline PerformanceData* getPerformance() { return _performance; }; + inline bool onGround() const { return no_roll; }; + inline double getSpeed() const { return speed; }; + inline double getRoll() const { return roll; }; + inline double getPitch() const { return pitch; }; + inline double getAltitude() const { return altitude_ft; }; + 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(); + + protected: void Run(double dt); @@ -106,36 +107,46 @@ private: double dt_count; double dt_elev_count; double headingChangeRate; + double headingError; + double minBearing; + double speedFraction; double groundTargetSpeed; double groundOffset; double dt; - const PERF_STRUCT *performance; bool use_perf_vs; SGPropertyNode_ptr refuel_node; // helpers for Run + //TODO sort out which ones are better protected virtuals to allow + //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 reachedEndOfCruise(double&); bool aiTrafficVisible(void); void controlHeading(FGAIFlightPlan::waypoint* curr); void controlSpeed(FGAIFlightPlan::waypoint* curr, - FGAIFlightPlan::waypoint* next); - bool updateTargetValues(); - void adjustSpeed(double tgt_speed); + FGAIFlightPlan::waypoint* next); + + void updatePrimaryTargetValues(bool& flightplanActive, bool& aiOutOfSight); + + void updateSecondaryTargetValues(); void updatePosition(); void updateHeading(); - void updateBankAngles(); - void updateAltitudes(); - void updateVerticalSpeed(); - void matchPitchAngle(); - + void updateBankAngleTarget(); + void updateVerticalSpeedTarget(); + void updatePitchAngleTarget(); + void updateActualState(); + void handleATCRequests(); + void checkVisibility(); + double sign(double x); - string acType; - string company; + std::string acType; + std::string company; + std::string transponderCode; int spinCounter; double prevSpeed; @@ -144,8 +155,14 @@ private: bool holdPos; bool _getGearDown() const; + + const char * _getTransponderCode() const; + bool reachedWaypoint; - string callsign; // The callsign of this tanker. + bool needsTaxiClearance; + time_t timeElapsed; + + PerformanceData* _performance; // the performance data for this aircraft };