X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FUFO.hxx;h=d22832f70d56f25f12eb88ad692566b58eb8ab02;hb=bb2b03c7e392e107aeaf7dbc4eecc59064b28512;hp=32947ab19026c8aaf5dd3d665fa3654df1a55013;hpb=d05121ef4689d2b50b3fe1848cbb0d1f5a1db877;p=flightgear.git diff --git a/src/FDM/UFO.hxx b/src/FDM/UFO.hxx index 32947ab19..d22832f70 100644 --- a/src/FDM/UFO.hxx +++ b/src/FDM/UFO.hxx @@ -17,27 +17,52 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // #ifndef _UFO_HXX #define _UFO_HXX - #include "flight.hxx" class FGUFO: public FGInterface { - double Throttle; - double Aileron; - double Elevator; - double Rudder; +private: + + class lowpass { + private: + static double _dt; + double _coeff; + double _last; + bool _initialized; + public: + lowpass(double coeff) : _coeff(coeff), _initialized(false) {} + static inline void set_delta(double dt) { _dt = dt; } + double filter(double value) { + if (!_initialized) { + _initialized = true; + return _last = value; + } + double c = _dt / (_coeff + _dt); + return _last = value * c + _last * (1.0 - c); + } + }; + + lowpass *Throttle; + lowpass *Aileron; + lowpass *Elevator; + lowpass *Rudder; + lowpass *Aileron_Trim; + lowpass *Elevator_Trim; + lowpass *Rudder_Trim; + SGPropertyNode_ptr Speed_Max; + public: FGUFO( double dt ); ~FGUFO(); - // reset flight params to a specific position + // reset flight params to a specific position void init(); // update position based on inputs, positions, velocities, etc.