]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/YASim/Airplane.hpp
Port over remaining Point3D usage to the more type and unit safe SG* classes.
[flightgear.git] / src / FDM / YASim / Airplane.hpp
index 9131fa683cd5a784a5669b1abc3d9fbdedb5b1af..913eb49edcc3126c379e4887164302eda52e5b4f 100644 (file)
 namespace yasim {
 
 class Gear;
+class Hook;
+class Launchbar;
 class Thruster;
+class Hitch;
 
 class Airplane {
 public:
@@ -34,22 +37,22 @@ public:
     void setTail(Wing* tail);
     void addVStab(Wing* vstab);
 
-    void addRotor(Rotor* Rotor);
-    int getNumRotors() {return _rotors.size();}
-    Rotor* getRotor(int i) {return (Rotor*)_rotors.get(i);}
-
     void addFuselage(float* front, float* back, float width,
-                     float taper=1, float mid=0.5);
+                     float taper=1, float mid=0.5,
+                     float cx=1, float cy=1, float cz=1, float idrag=1);
     int addTank(float* pos, float cap, float fuelDensity);
     void addGear(Gear* g);
+    void addHook(Hook* h);
+    void addLaunchbar(Launchbar* l);
     void addThruster(Thruster* t, float mass, float* cg);
     void addBallast(float* pos, float mass);
+    void addHitch(Hitch* h);
 
     int addWeight(float* pos, float size);
     void setWeight(int handle, float mass);
 
-    void setApproach(float speed, float altitude, float aoa, float fuel);
-    void setCruise(float speed, float altitude, float fuel);
+    void setApproach(float speed, float altitude, float aoa, float fuel, float gla);
+    void setCruise(float speed, float altitude, float fuel, float gla);
 
     void setElevatorControl(int control);
     void addApproachControl(int control, float val);
@@ -59,6 +62,11 @@ public:
 
     int numGear();
     Gear* getGear(int g);
+    Hook* getHook();
+    int numHitches() { return _hitches.size(); }
+    Hitch* getHitch(int h);
+    Rotorgear* getRotorgear();
+    Launchbar* getLaunchbar();
 
     int numThrusters() { return _thrusters.size(); }
     Thruster* getThruster(int n) {
@@ -82,27 +90,29 @@ public:
     float getCruiseAoA();
     float getTailIncidence();
     float getApproachElevator() { return _approachElevator.val; }
-    char* getFailureMsg();
+    const char* getFailureMsg();
+
+    static void setupState(float aoa, float speed, float gla, State* s); // utility
 
 private:
     struct Tank { float pos[3]; float cap; float fill;
                  float density; int handle; };
-    struct Fuselage { float front[3], back[3], width, taper, mid; };
+    struct Fuselage { float front[3], back[3], width, taper, mid, _cx, _cy, _cz, _idrag; };
     struct GearRec { Gear* gear; Surface* surf; float wgt; };
     struct ThrustRec { Thruster* thruster;
                       int handle; float cg[3]; float mass; };
     struct Control { int control; float val; };
     struct WeightRec { int handle; Surface* surf; };
     struct SolveWeight { bool approach; int idx; float wgt; };
+    struct ContactRec { Gear* gear; float p[3]; };
 
     void runCruise();
     void runApproach();
-    void setupState(float aoa, float speed, State* s);
     void solveGear();
     void solve();
     void solveHelicopter();
     float compileWing(Wing* w);
-    float compileRotor(Rotor* w);
+    void compileRotorgear();
     float compileFuselage(Fuselage* f);
     void compileGear(GearRec* gr);
     void applyDragFactor(float factor);
@@ -133,8 +143,7 @@ private:
     Vector _contacts; // non-gear ground contact points
     Vector _weights;
     Vector _surfs; // NON-wing Surfaces
-
-    Vector _rotors;
+    Vector _hitches; //for airtow and winch
 
     Vector _solveWeights;
 
@@ -145,6 +154,7 @@ private:
     float _cruiseSpeed;
     float _cruiseWeight;
     float _cruiseFuel;
+    float _cruiseGlideAngle;
 
     Vector _approachControls;
     State _approachState;
@@ -154,6 +164,7 @@ private:
     float _approachAoA;
     float _approachWeight;
     float _approachFuel;
+    float _approachGlideAngle;
 
     int _solutionIterations;
     float _dragFactor;
@@ -161,7 +172,7 @@ private:
     float _cruiseAoA;
     float _tailIncidence;
     Control _approachElevator;
-    char* _failureMsg;
+    const char* _failureMsg;
 };
 
 }; // namespace yasim