]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/YASim/PistonEngine.hpp
Bugfix: no automatic runway selection with --parkpos=
[flightgear.git] / src / FDM / YASim / PistonEngine.hpp
index acfc01baa3b60a3ab09c57d1d7667ba9670e36b8..2431c494785e082730093086747ede56952db482 100644 (file)
@@ -1,40 +1,64 @@
 #ifndef _PISTONENGINE_HPP
 #define _PISTONENGINE_HPP
 
+#include "Engine.hpp"
+
 namespace yasim {
 
-class PistonEngine {
+class PistonEngine : public Engine {
 public:
+    virtual PistonEngine* isPistonEngine() { return this; }
+
     // Initializes an engine from known "takeoff" parameters.
     PistonEngine(float power, float spd);
     void setTurboParams(float mul, float maxMP);
+    void setDisplacement(float d);
+    void setCompression(float c);
+    void setMinThrottle(float m);
+    void setWastegate(float norm) { _wastegate = norm; }
+    void setSupercharger(bool hasSuper) { _hasSuper = hasSuper; }
+    void setTurboLag(float lag) { _turboLag = lag; }
 
-    void setThrottle(float throttle);
-    void setMixture(float mixture);
+    bool isCranking();
+    float getMP();
+    float getEGT();
+    float getMaxPower(); // max sea-level power
+    float getBoost() { return _boostPressure; }
+    float getOilTemp() { return _oilTemp; }
 
-    float getPower();
-
-    // Calculates power output and fuel flow, based on a given
-    // throttle setting (0-1 corresponding to the fraction of
-    // "available" manifold pressure), mixture (fuel flux per rpm,
-    // 0-1, where 1 is "max rich", or a little bit more than needed
-    // for rated power at sea level)
-    void calc(float pressure, float temp, float speed,
-             float* powerOut, float* fuelFlowOut);
+    virtual void calc(float pressure, float temp, float speed);
+    virtual void stabilize();
+    virtual void integrate(float dt);
+    virtual float getTorque();
+    virtual float getFuelFlow();
 
 private:
-    float _P0;       // reference power setting
+    // Static configuration:
+    float _power0;   // reference power setting
     float _omega0;   //   "       engine speed
     float _rho0;     //   "       manifold air density
     float _f0;       // "ideal" fuel flow at P0/omega0
     float _mixCoeff; // fuel flow per omega at full mixture
+    float _turbo;    // (or super-)charger pressure multiplier
+    bool _hasSuper;  // true indicates gear-driven (not turbo)
+    float _turboLag; // turbo lag time in seconds
+    float _charge;   // current {turbo|super}charge multiplier
+    float _chargeTarget;  // eventual charge value
+    float _maxMP;    // static maximum pressure
+    float _wastegate;    // wastegate setting, [0:1]
+    float _displacement; // piston stroke volume
+    float _compression;  // compression ratio (>1)
+    float _minthrottle; // minimum throttle [0:1]
 
-    // Runtime settables:
-    float _throttle;
-    float _mixture;
-
-    float _turbo;
-    float _maxMP;
+    // Runtime state/output:
+    float _mp;
+    float _torque;
+    float _fuelFlow;
+    float _egt;
+    float _boostPressure;
+    float _oilTemp;
+    float _oilTempTarget;
+    float _dOilTempdt;
 };
 
 }; // namespace yasim