diff options
author | Stijn Buys <ingar@osirion.org> | 2009-10-24 14:08:10 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2009-10-24 14:08:10 +0000 |
commit | a1e67a1a6cf677a1eb937fc12954a06aa4a41c34 (patch) | |
tree | 30a2f7dd8eec87bc132d94d72472179a3fce8ac9 /src/client/input.cc | |
parent | b9a954049a2bfda2be7368d868b6ac8b73c1bf57 (diff) |
make joystick axes configurable
Diffstat (limited to 'src/client/input.cc')
-rw-r--r-- | src/client/input.cc | 84 |
1 files changed, 51 insertions, 33 deletions
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() |