]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/YASim/Airplane.hpp
Add support for a turbo prop condition lever.
[flightgear.git] / src / FDM / YASim / Airplane.hpp
index f44d496fc7e629e50fb5e9b336652f80f63194c1..9131fa683cd5a784a5669b1abc3d9fbdedb5b1af 100644 (file)
@@ -4,6 +4,7 @@
 #include "ControlMap.hpp"
 #include "Model.hpp"
 #include "Wing.hpp"
+#include "Rotor.hpp"
 #include "Vector.hpp"
 
 namespace yasim {
@@ -17,6 +18,7 @@ public:
     ~Airplane();
 
     void iterate(float dt);
+    void calcFuelWeights();
 
     ControlMap* getControlMap();
     Model* getModel();
@@ -32,6 +34,10 @@ 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);
     int addTank(float* pos, float cap, float fuelDensity);
@@ -42,21 +48,28 @@ public:
     int addWeight(float* pos, float size);
     void setWeight(int handle, float mass);
 
-    void setApproach(float speed, float altitude);
-    void setApproach(float speed, float altitude, float aoa); 
-    void setCruise(float speed, float altitude);
+    void setApproach(float speed, float altitude, float aoa, float fuel);
+    void setCruise(float speed, float altitude, float fuel);
 
     void setElevatorControl(int control);
     void addApproachControl(int control, float val);
     void addCruiseControl(int control, float val);
 
+    void addSolutionWeight(bool approach, int idx, float wgt);
+
     int numGear();
     Gear* getGear(int g);
 
+    int numThrusters() { return _thrusters.size(); }
+    Thruster* getThruster(int n) {
+        return ((ThrustRec*)_thrusters.get(n))->thruster; }
+    
     int numTanks();
     void setFuelFraction(float frac); // 0-1, total amount of fuel
     float getFuel(int tank); // in kg!
+    float setFuel(int tank, float fuel); // in kg!
     float getFuelDensity(int tank); // kg/m^3
+    float getTankCapacity(int tank);
 
     void compile(); // generate point masses & such, then solve
     void initEngines();
@@ -80,13 +93,16 @@ private:
                       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; };
 
     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);
     float compileFuselage(Fuselage* f);
     void compileGear(GearRec* gr);
     void applyDragFactor(float factor);
@@ -96,6 +112,7 @@ private:
     void compileContactPoints();
     float normFactor(float f);
     void updateGearState();
+    void setupWeights(bool isApproach);
 
     Model _model;
     ControlMap _controls;
@@ -117,12 +134,17 @@ private:
     Vector _weights;
     Vector _surfs; // NON-wing Surfaces
 
+    Vector _rotors;
+
+    Vector _solveWeights;
+
     Vector _cruiseControls;
     State _cruiseState;
     float _cruiseP;
     float _cruiseT;
     float _cruiseSpeed;
     float _cruiseWeight;
+    float _cruiseFuel;
 
     Vector _approachControls;
     State _approachState;
@@ -131,6 +153,7 @@ private:
     float _approachSpeed;
     float _approachAoA;
     float _approachWeight;
+    float _approachFuel;
 
     int _solutionIterations;
     float _dragFactor;