X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FControls%2Fcontrols.hxx;h=0cc5146c7ba81f641f0ce8e5152e64704675b7ef;hb=f5c90088237d3272d8ebf917f94eb0b0033d0306;hp=c90bcb304a144c33f3ef38ea2779db29459f5290;hpb=450de25cc7c231dae82ae22d641a631f2e0b4b8c;p=flightgear.git diff --git a/src/Controls/controls.hxx b/src/Controls/controls.hxx index c90bcb304..0cc5146c7 100644 --- a/src/Controls/controls.hxx +++ b/src/Controls/controls.hxx @@ -26,7 +26,6 @@ #include -#include #include
#include
@@ -57,15 +56,19 @@ public: private: double aileron; + double aileron_trim; double elevator; double elevator_trim; double rudder; + double rudder_trim; double flaps; double throttle[MAX_ENGINES]; double mixture[MAX_ENGINES]; double prop_advance[MAX_ENGINES]; double brake[MAX_WHEELS]; + int magnetos[MAX_ENGINES]; bool throttle_idle; + bool starter[MAX_ENGINES]; bool gear_down; SGPropertyNode * auto_coordination; @@ -74,7 +77,12 @@ private: if ( *x < min ) { *x = min; } if ( *x > max ) { *x = max; } } - + + inline void CLAMP(int *i, int min, int max ) { + if ( *i < min ) { *i = min; } + if ( *i > max ) { *i = max; } + } + public: FGControls(); @@ -84,16 +92,18 @@ public: void init (); void bind (); void unbind (); - void update (); + void update (int dt); // Reset function void reset_all(void); // Query functions inline double get_aileron() const { return aileron; } + inline double get_aileron_trim() const { return aileron_trim; } inline double get_elevator() const { return elevator; } inline double get_elevator_trim() const { return elevator_trim; } inline double get_rudder() const { return rudder; } + inline double get_rudder_trim() const { return rudder_trim; } inline double get_flaps() const { return flaps; } inline double get_throttle(int engine) const { return throttle[engine]; } inline double get_mixture(int engine) const { return mixture[engine]; } @@ -101,6 +111,8 @@ public: return prop_advance[engine]; } inline double get_brake(int wheel) const { return brake[wheel]; } + inline int get_magnetos(int engine) const { return magnetos[engine]; } + inline bool get_starter(int engine) const { return starter[engine]; } inline bool get_gear_down() const { return gear_down; } // Update functions @@ -124,6 +136,14 @@ public: set_rudder( aileron / 2.0 ); } } + inline void set_aileron_trim( double pos ) { + aileron_trim = pos; + CLAMP( &aileron_trim, -1.0, 1.0 ); + } + inline void move_aileron_trim( double amt ) { + aileron_trim += amt; + CLAMP( &aileron_trim, -1.0, 1.0 ); + } inline void set_elevator( double pos ) { elevator = pos; CLAMP( &elevator, -1.0, 1.0 ); @@ -148,17 +168,19 @@ public: rudder += amt; CLAMP( &rudder, -1.0, 1.0 ); } + inline void set_rudder_trim( double pos ) { + rudder_trim = pos; + CLAMP( &rudder_trim, -1.0, 1.0 ); + } + inline void move_rudder_trim( double amt ) { + rudder_trim += amt; + CLAMP( &rudder_trim, -1.0, 1.0 ); + } inline void set_flaps( double pos ) { - if ( flaps != pos ) { - globals->get_soundmgr()->play_once( "flaps" ); - } flaps = pos; CLAMP( &flaps, 0.0, 1.0 ); } inline void move_flaps( double amt ) { - if ( fabs(amt) > 0.0 ) { - globals->get_soundmgr()->play_once( "flaps" ); - } flaps += amt; CLAMP( &flaps, 0.0, 1.0 ); } @@ -240,6 +262,43 @@ public: } } } + inline void set_magnetos( int engine, int pos ) { + if ( engine == ALL_ENGINES ) { + for ( int i = 0; i < MAX_ENGINES; i++ ) { + magnetos[i] = pos; + CLAMP( &magnetos[i], 0, 3 ); + } + } else { + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + magnetos[engine] = pos; + CLAMP( &magnetos[engine], 0, 3 ); + } + } + } + inline void move_magnetos( int engine, int amt ) { + if ( engine == ALL_ENGINES ) { + for ( int i = 0; i < MAX_ENGINES; i++ ) { + magnetos[i] += amt; + CLAMP( &magnetos[i], 0, 3 ); + } + } else { + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + magnetos[engine] += amt; + CLAMP( &magnetos[engine], 0, 3 ); + } + } + } + inline void set_starter( int engine, bool flag ) { + if ( engine == ALL_ENGINES ) { + for ( int i = 0; i < MAX_ENGINES; i++ ) { + starter[i] = flag; + } + } else { + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + starter[engine] = flag; + } + } + } inline void set_brake( int wheel, double pos ) { if ( wheel == ALL_WHEELS ) { for ( int i = 0; i < MAX_WHEELS; i++ ) {