]> git.mxchange.org Git - flightgear.git/blob - src/FDM/YASim/Thruster.hpp
Use the density values from the environment subsystem, to properly handle
[flightgear.git] / src / FDM / YASim / Thruster.hpp
1 #ifndef _THRUSTER_HPP
2 #define _THRUSTER_HPP
3
4 namespace yasim {
5
6 class Jet;
7 class PropEngine;
8 class Propeller;
9 class PistonEngine;
10
11 class Thruster {
12 public:
13     Thruster();
14     virtual ~Thruster();
15
16     // Typing info, these are the possible sub-type (or sub-parts)
17     // that a thruster might have.  Any might return null.  A little
18     // clumsy, but much simpler than an RTTI-based implementation.
19     virtual Jet* getJet() { return 0; }
20     virtual PropEngine* getPropEngine() { return 0; }
21     virtual Propeller* getPropeller() { return 0; }
22     virtual PistonEngine* getPistonEngine() { return 0; }
23     
24     // Static data
25     void getPosition(float* out);
26     void setPosition(float* pos);
27     void getDirection(float* out);
28     void setDirection(float* dir);
29
30     // Controls
31     void setThrottle(float throttle);
32     void setMixture(float mixture);
33     void setStarter(bool starter);
34
35     // Dynamic output
36     virtual bool isRunning()=0;
37     virtual bool isCranking()=0;
38     virtual void getThrust(float* out)=0;
39     virtual void getTorque(float* out)=0;
40     virtual void getGyro(float* out)=0;
41     virtual float getFuelFlow()=0;
42
43     // Runtime instructions
44     void setWind(float* wind);
45     void setAir(float pressure, float temp, float density);
46     virtual void init() {}
47     virtual void integrate(float dt)=0;
48     virtual void stabilize()=0;
49
50 protected:
51     float _pos[3];
52     float _dir[3];
53     float _throttle;
54     float _mixture;
55     bool _starter; // true=engaged, false=disengaged
56
57     float _wind[3];
58     float _pressure;
59     float _temp;
60     float _rho;
61 };
62
63 }; // namespace yasim
64 #endif // _THRUSTER_HPP
65