From b97673d8774a1fd7d9cc2bc86694149f95cbbeba Mon Sep 17 00:00:00 2001 From: curt Date: Wed, 20 Jun 2001 20:52:10 +0000 Subject: [PATCH] - added Alex Perry's patch to support more sophisticated hat switches for the view axes --- src/Main/fg_props.cxx | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Main/fg_props.cxx b/src/Main/fg_props.cxx index 8f8d42bfe..2a92e5982 100644 --- a/src/Main/fg_props.cxx +++ b/src/Main/fg_props.cxx @@ -62,32 +62,46 @@ static inline void _set_view_from_axes () { // Take no action when hat is centered - if (axisLong == 0 && axisLat == 0) + if ( ( axisLong < 0.01 ) && + ( axisLong > -0.01 ) && + ( axisLat < 0.01 ) && + ( axisLat > -0.01 ) + ) return; - double viewDir = 0; + double viewDir = 999; + /* Do all the quick and easy cases */ if (axisLong < 0) { // Longitudinal axis forward - if (axisLat < 0) + if (axisLat == axisLong) viewDir = 45; - else if (axisLat > 0) + else if (axisLat == - axisLong) viewDir = 315; - else + else if (axisLat == 0) viewDir = 0; } else if (axisLong > 0) { // Longitudinal axis backward - if (axisLat < 0) + if (axisLat == - axisLong) viewDir = 135; - else if (axisLat > 0) + else if (axisLat == axisLong) viewDir = 225; - else + else if (axisLat == 0) viewDir = 180; - } else { // Longitudinal axis neutral + } else if (axisLong = 0) { // Longitudinal axis neutral if (axisLat < 0) viewDir = 90; - else + else if (axisLat > 0) viewDir = 270; + else return; /* And assertion failure maybe? */ } + /* Do all the difficult cases */ + if ( viewDir > 900 ) + viewDir = SGD_RADIANS_TO_DEGREES * atan2 ( -axisLat, -axisLong ); + if ( viewDir < -1 ) viewDir += 360; + +// SG_LOG(SG_INPUT, SG_ALERT, "Joystick Lat=" << axisLat << " and Long=" +// << axisLong << " gave angle=" << viewDir ); + globals->get_current_view()->set_goal_view_offset(viewDir*SGD_DEGREES_TO_RADIANS); // globals->get_current_view()->set_view_offset(viewDir*SGD_DEGREES_TO_RADIANS); } -- 2.39.5