]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIAircraft.hxx
Make the vertical acceleration rate scale with vertical performance. The
[flightgear.git] / src / AIModel / AIAircraft.hxx
index 8cf2a40364c53be58b0085269e13dd9fb448d8d2..b50ea691f80914daff6937752f50ea251e23dbf2 100644 (file)
@@ -16,7 +16,7 @@
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 #ifndef _FG_AIAircraft_HXX
 #define _FG_AIAircraft_HXX
@@ -24,6 +24,9 @@
 #include "AIManager.hxx"
 #include "AIBase.hxx"
 
+#include <Traffic/SchedFlight.hxx>
+#include <Traffic/Schedule.hxx>
+
 #include <string>
 SG_USING_STD(string);
 
@@ -31,51 +34,97 @@ SG_USING_STD(string);
 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;
 
-       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();
+
+    virtual void readFromScenario(SGPropertyNode* scFileNode);
+
+    virtual bool init();
+    virtual void bind();
+    virtual void unbind();
+    virtual void update(double dt);
+
+    void setPerformance(const std::string& perfString);
+    void SetPerformance(const PERF_STRUCT *ps);
+    void setFlightPlan(const std::string& fp, bool repat = false);
+    void SetFlightPlan(FGAIFlightPlan *f);
+    FGAIFlightPlan* GetFlightPlan() const { return fp; };
+    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 setTACANChannelID(const string& );
+
+    void getGroundElev(double dt);
+    void doGroundAltitude();
+    void loadNextLeg  ();
+
+    void setAcType(const string& ac) { acType = ac; };
+    void setCompany(const string& comp) { company = comp;};
+
+    inline void SetTanker(bool setting) { isTanker = setting; };
+    virtual const char* getTypeString(void) const { return "aircraft"; }
 
-        enum aircraft_e {LIGHT=0, WW2_FIGHTER, JET_TRANSPORT, JET_FIGHTER};
-        static const PERF_STRUCT settings[];
-       
-       FGAIAircraft();
-       ~FGAIAircraft();
-       
-       bool init();
-        virtual void bind();
-        virtual void unbind();
-       void update(double dt);
-
-        void SetPerformance(const PERF_STRUCT *ps);
-        void AccelTo(double speed);
-        void PitchTo(double angle);
-        void RollTo(double angle);
-        void YawTo(double angle);
-        void ClimbTo(double altitude);
-        void TurnTo(double heading);
-       
 private:
+    FGAISchedule *trafficRef;
+
+    bool hdg_lock;
+    bool alt_lock;
+    double dt_count;
+    double dt_elev_count;
+    double headingChangeRate;
+    double groundTargetSpeed;
+    double groundOffset;
+    double dt;
 
-        bool hdg_lock;
-        bool alt_lock;
+    const PERF_STRUCT *performance;
+    bool use_perf_vs;
+    SGPropertyNode_ptr refuel_node;
+    bool isTanker;
 
-        double dt; 
+    void Run(double dt);
+    double sign(double x);
 
-        const PERF_STRUCT *performance;
+    string acType;
+    string company;
 
-       void Run(double dt);
-        double sign(double x); 
+    int spinCounter;
+    double prevSpeed;
+    double prev_dist_to_go;
+
+    bool _getGearDown() const;
+    bool reachedWaypoint;
+    string callsign;             // The callsign of this tanker.
+    string TACAN_channel_id;     // The TACAN channel of this tanker
+    bool contact;                // set if this tanker is within fuelling range
 };
 
+
 #endif  // _FG_AIAircraft_HXX