Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2009-10-24 14:08:10 +0000
committerStijn Buys <ingar@osirion.org>2009-10-24 14:08:10 +0000
commita1e67a1a6cf677a1eb937fc12954a06aa4a41c34 (patch)
tree30a2f7dd8eec87bc132d94d72472179a3fce8ac9 /src/client/input.cc
parentb9a954049a2bfda2be7368d868b6ac8b73c1bf57 (diff)
make joystick axes configurable
Diffstat (limited to 'src/client/input.cc')
-rw-r--r--src/client/input.cc84
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()