X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FUFO.cxx;h=60727faf3034b57620b11418bd45e309f6962cf6;hb=1e3f0f0050cd4860b8bf2b6ecb59ba040f8b934f;hp=48e77c48768b49136ed40399d13d748f7776e9f3;hpb=56db994994a891acd491da24b4b36420b4e54a88;p=flightgear.git diff --git a/src/FDM/UFO.cxx b/src/FDM/UFO.cxx index 48e77c487..60727faf3 100644 --- a/src/FDM/UFO.cxx +++ b/src/FDM/UFO.cxx @@ -3,7 +3,7 @@ // Written by Curtis Olson, started October 1999. // Slightly modified from MagicCarpet.cxx by Jonathan Polley, April 2002 // -// Copyright (C) 1999-2002 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 1999-2002 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -21,11 +21,15 @@ // +#ifdef HAVE_CONFIG_H +# include +#endif + #include #include #include -#include +#include #include
#include
@@ -34,11 +38,13 @@ const double throttle_damp = 0.2; const double aileron_damp = 0.05; const double elevator_damp = 0.05; +const double rudder_damp = 0.4; FGUFO::FGUFO( double dt ) : Throttle(0.0), Aileron(0.0), - Elevator(0.0) + Elevator(0.0), + Rudder(0.0) { // set_delta_t( dt ); } @@ -66,7 +72,9 @@ void FGUFO::update( double dt ) { // read the throttle double th = globals->get_controls()->get_throttle( 0 ); - if (globals->get_controls()->get_brake(0)) { + if ( globals->get_controls()->get_brake_left() > 0.0 + || globals->get_controls()->get_brake_right() > 0.0 ) + { th = -th; } Throttle = th * throttle_damp + Throttle * (1 - throttle_damp); @@ -76,6 +84,8 @@ void FGUFO::update( double dt ) { + Aileron * (1 - aileron_damp); Elevator = globals->get_controls()->get_elevator() * elevator_damp + Elevator * (1 - elevator_damp); + Rudder = globals->get_controls()->get_rudder() * rudder_damp + + Rudder * (1 - rudder_damp); // the velocity of the aircraft double velocity = Throttle * 2000; // meters/sec @@ -154,6 +164,7 @@ void FGUFO::update( double dt ) { // angle of turn double turn_rate = sin(roll) * SGD_PI_4; // radians/sec double turn = turn_rate * time_step; + double yaw = fabs(Rudder) < .2 ? 0.0 : Rudder / (25 + fabs(speed) * .1); // update (lon/lat) position double lat2, lon2, az2; @@ -177,13 +188,14 @@ void FGUFO::update( double dt ) { // update euler angles _set_Euler_Angles( roll, pitch, - fmod(get_Psi() + turn, SGD_2PI) ); + fmod(get_Psi() + turn + yaw, SGD_2PI) ); _set_Euler_Rates(0,0,0); _set_Geocentric_Position( lat_geoc, get_Longitude(), sl_radius + get_Altitude() + climb ); // cout << "sea level radius (ft) = " << sl_radius << endl; // cout << "(setto) sea level radius (ft) = " << get_Sea_level_radius() << endl; + _update_ground_elev_at_pos(); _set_Sea_level_radius( sl_radius * SG_METER_TO_FEET); _set_Altitude( get_Altitude() + climb ); }