From a1e67a1a6cf677a1eb937fc12954a06aa4a41c34 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 24 Oct 2009 14:08:10 +0000 Subject: make joystick axes configurable --- src/client/input.cc | 84 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 33 deletions(-) (limited to 'src/client/input.cc') diff --git a/src/client/input.cc b/src/client/input.cc index 790af91..87fa0b0 100644 --- a/src/client/input.cc +++ b/src/client/input.cc @@ -591,47 +591,65 @@ 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; - } + float axis_direction = 0; + if (Joystick::input_axisdirection) { + axis_direction = truncf(Joystick::input_axisdirection->value()); + } - local_direction *= -1; - break; + float axis_pitch = 0; + if (Joystick::input_axispitch) { + axis_pitch = truncf(Joystick::input_axispitch->value()); + } - case 1: // pitch - if (value >= 0) { - local_pitch = (float) value / 32767.0f; - } else { - local_pitch = (float) value / 32768.0f; - } + float axis_roll = 0; + if (Joystick::input_axisroll) { + axis_roll = truncf(Joystick::input_axisroll->value()); + } + + float axis_throttle = 0; + if (Joystick::input_axisthrottle) { + axis_throttle = (int) truncf(Joystick::input_axisthrottle->value()); + } + // value is in range -32768 to 32767 + if (axis + 1 == math::absf(axis_direction)) { + + if (value >= 0) { + local_direction = (float) value / 32767.0f; + } else { + local_direction = (float) value / 32768.0f; + } - break; + local_direction *= math::sgnf(axis_direction) * -1.0f; - case 2: // roll - if (value >= 0) { - local_roll = (float) value / 32767.0f; - } else { - local_roll = (float) value / 32768.0f; - } + } else if (axis + 1 == math::absf(axis_pitch)) { + + if (value >= 0) { + local_pitch = (float) value / 32767.0f; + } else { + local_pitch = (float) value / 32768.0f; + } + local_pitch *= math::sgnf(axis_pitch); - local_roll *= -1; - break; + } else if (axis + 1 == math::absf(axis_roll)) { + + if (value >= 0) { + local_roll = (float) value / 32767.0f; + } else { + local_roll = (float) value / 32768.0f; + } + local_roll *= math::sgnf(axis_roll) * -1.0f; - case 3: // throttle - if (value >= 0) { - local_thrust = (float) value / 32767.0f; - } else { - local_thrust = (float) value / 32768.0f; - } + } else if (axis + 1 == math::absf(axis_throttle)) { + + if (value >= 0) { + local_thrust = (float) value / 32767.0f; + } else { + local_thrust = (float) value / 32768.0f; + } - local_thrust = -0.5f * local_thrust + 0.5f; + local_thrust = -0.5f * local_thrust + 0.5f; + local_thrust *= math::sgnf(axis_throttle); } - } void reset() -- cgit v1.2.3