//
// 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.
//
#include <simgear/math/point3d.hxx>
#include <simgear/math/polar3d.hxx>
-#include <Controls/controls.hxx>
+#include <Aircraft/controls.hxx>
#include <Main/globals.hxx>
#include <Main/fg_props.hxx>
const double throttle_damp = 0.2;
const double aileron_damp = 0.05;
const double elevator_damp = 0.05;
+const double elevator_trim_damp = 0.05;
const double rudder_damp = 0.4;
FGUFO::FGUFO( double dt )
: Throttle(0.0),
Aileron(0.0),
Elevator(0.0),
- Rudder(0.0)
+ Elevator_Trim(0.0),
+ Rudder(0.0),
+ Speed_Max(fgGetNode("/engines/engine/speed-max-mps", true))
{
// set_delta_t( dt );
}
// for each subsequent iteration through the EOM
void FGUFO::init() {
common_init();
+ if (Speed_Max->getDoubleValue() < 0.01)
+ Speed_Max->setDoubleValue(2000.0);
}
// read the throttle
double th = globals->get_controls()->get_throttle( 0 );
- if ( globals->get_controls()->get_brake_left() > 0.0
- || globals->get_controls()->get_brake_right() > 0.0 )
+ if ( globals->get_controls()->get_brake_left() > 0.5
+ || globals->get_controls()->get_brake_right() > 0.5 )
{
th = -th;
}
+ Aileron * (1 - aileron_damp);
Elevator = globals->get_controls()->get_elevator() * elevator_damp
+ Elevator * (1 - elevator_damp);
+ Elevator_Trim = globals->get_controls()->get_elevator_trim()
+ * elevator_trim_damp
+ + Elevator_Trim * (1 - elevator_trim_damp);
Rudder = globals->get_controls()->get_rudder() * rudder_damp
+ Rudder * (1 - rudder_damp);
// the velocity of the aircraft
- double velocity = Throttle * 2000; // meters/sec
+ double velocity = Throttle * Speed_Max->getDoubleValue(); // meters/sec
double old_pitch = get_Theta();
double pitch_rate = SGD_PI_4; // assume I will be pitching up
- double target_pitch = -Elevator * SGD_PI_2;
+ double target_pitch = (-Elevator - Elevator_Trim) * SGD_PI_2;
// if I am pitching down
if (old_pitch > target_pitch)
_update_ground_elev_at_pos();
_set_Sea_level_radius( sl_radius * SG_METER_TO_FEET);
_set_Altitude( get_Altitude() + climb );
+ _set_Altitude_AGL( get_Altitude() - get_Runway_altitude() );
}