diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/input.cc | 60 | ||||
| -rw-r--r-- | src/client/joystick.cc | 5 | ||||
| -rw-r--r-- | src/client/joystick.h | 2 | 
3 files changed, 60 insertions, 7 deletions
| diff --git a/src/client/input.cc b/src/client/input.cc index 6778e9c..2f6fb27 100644 --- a/src/client/input.cc +++ b/src/client/input.cc @@ -66,6 +66,8 @@ float mouse_control_override_time = 0;  bool mouse_control_override = false;  bool mouse_control = false; +bool joystick_control = false; +  const float thruster_offset = 0.05f;  const float mouse_timeout = 0.200f; // 200 ms mouse timout @@ -533,6 +535,42 @@ void key_released(Key *key)  	}  } +void axis_event(int axis, int value) +{ +	// value is in range -32768 to 32767 +	switch(axis) { +		case 0: // direction +			if (value >= 0) { +				local_direction = (float) value / 32767.0f; +			} else { +				local_direction = (float) value / 32768.0f; +			} + +			local_direction	*= -1; +			break; + +		case 1: // pitch +			if (value >= 0) { +				local_pitch = (float) value / 32767.0f; +			} else { +				local_pitch = (float) value / 32768.0f; +			} + +			break; + +		case 2: // roll +			if (value >= 0) { +				local_roll = (float) value / 32767.0f; +			} else { +				local_roll = (float) value / 32768.0f; +			} + +			local_roll	*= -1; +			break; +	} + +} +  void reset()  {  	local_direction = 0.0f; @@ -586,9 +624,9 @@ void frame(float seconds)  		render::reset();	  	} -	/* -- detect joystick changes --------------------- */ +	/* -- detect joystick stat changes ---------------- */  	Joystick::frame(); - +	joystick_control = Joystick::is_enabled();  	/* -- poll SDL keyboard events -------------------- */  	SDL_Event event; @@ -632,6 +670,10 @@ void frame(float seconds)  				pressed = false;  				break; +			case SDL_JOYAXISMOTION: +				axis_event((int) event.jaxis.axis, (int) event.jaxis.value); +				break; +  			case SDL_KEYDOWN:  				keyboard_modifiers = event.key.keysym.mod;  				key = keyboard->press(event.key.keysym.sym); @@ -700,10 +742,13 @@ void frame(float seconds)  	mouse_deadzone = false;  	if (core::application()->connected() && core::localcontrol()) { - -		mouse_control = !console()->visible() && ((input_mousecontrol->value() > 0)  -		|| (mouse_control_override && (mouse_control_override_time + mouse_timeout < core::application()->time()))); -		//core::localcontrol()->set_autolevel(!mouse_control); +		mouse_control = !console()->visible() && ((input_mousecontrol->value() > 0) || (mouse_control_override && (mouse_control_override_time + mouse_timeout < core::application()->time()))); +		 +		if (mouse_control && joystick_control && ((render::Camera::mode() == render::Camera::Track) || (render::Camera::mode() == render::Camera::Cockpit))) { +			if (!(mouse_control_override && (mouse_control_override_time + mouse_timeout < core::application()->time()))) { +				mouse_control = false; +			} +		}  		if (mouse_control) {  			// the mouse will not react if it is in the deadzone @@ -735,6 +780,7 @@ void frame(float seconds)  			}  			if ((render::Camera::mode() == render::Camera::Track) || (render::Camera::mode() == render::Camera::Cockpit)) { +				  				local_direction = mouse_direction * math::absf(mouse_direction);  				local_pitch = mouse_pitch * math::absf(mouse_pitch); @@ -745,7 +791,7 @@ void frame(float seconds)  			}  		} -		 +  		math::clamp(local_direction, -1.0f,  1.0f);  		math::clamp(local_pitch, -1.0f,  1.0f);  		math::clamp(local_roll, -1.0f,  1.0f); diff --git a/src/client/joystick.cc b/src/client/joystick.cc index cf2270f..5f09280 100644 --- a/src/client/joystick.cc +++ b/src/client/joystick.cc @@ -56,6 +56,11 @@ void Joystick::shutdown()  	SDL_QuitSubSystem(SDL_INIT_JOYSTICK);  } +bool Joystick::is_enabled() +{ +	return (current_joystick != 0); +} +  void Joystick::frame()  {  	if (current_joystick_number != (int) input_joystick->value()) diff --git a/src/client/joystick.h b/src/client/joystick.h index e21a60c..9404cb3 100644 --- a/src/client/joystick.h +++ b/src/client/joystick.h @@ -18,6 +18,8 @@ public:  	static void shutdown();  	static void frame(); + +	static bool is_enabled();  };  } | 
