#define _PROPENGINE_HPP
#include "Thruster.hpp"
+#include "Engine.hpp"
namespace yasim {
class Propeller;
-class PistonEngine;
class PropEngine : public Thruster {
public:
- PropEngine(Propeller* prop, PistonEngine* eng, float moment);
+ PropEngine(Propeller* prop, Engine* eng, float moment);
virtual ~PropEngine();
-
- virtual Thruster* clone();
+
+ void setEngine(Engine* eng) { delete _eng; _eng = eng; }
+
+ void setMagnetos(int magnetos);
+ void setAdvance(float advance);
+ void setPropPitch(float proppitch);
+ void setVariableProp(float min, float max);
+ void setPropFeather(int state);
+ void setGearRatio(float ratio) { _gearRatio = ratio; }
+ void setContraPair(bool contra) { _contra = contra; }
+
+ virtual PropEngine* getPropEngine() { return this; }
+ virtual Engine* getEngine() { return _eng; }
+ virtual Propeller* getPropeller() { return _prop; }
// Dynamic output
+ virtual bool isRunning();
+ virtual bool isCranking();
virtual void getThrust(float* out);
virtual void getTorque(float* out);
virtual void getGyro(float* out);
virtual float getFuelFlow();
// Runtime instructions
+ virtual void init();
virtual void integrate(float dt);
+ virtual void stabilize();
float getOmega();
+ void setOmega (float omega);
private:
float _moment;
Propeller* _prop;
- PistonEngine* _eng;
+ Engine* _eng;
+
+ bool _variable;
+ bool _contra; // contra-rotating propeller pair
+ int _magnetos; // 0=off, 1=right, 2=left, 3=both
+ float _gearRatio;
+ float _advance; // control input, 0-1
+ float _maxOmega;
+ float _minOmega;
float _omega; // RPM, in radians/sec
float _thrust[3];