X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fjoystick.c;h=0c61c57ad056bd75e16c4ec828504ce257e4a673;hp=92eec0e352e9f13e84115756556f818d1b0fe2eb;hb=b641818c787e48bbf03ce2a0cd5b542c4c21e523;hpb=abe44529b439ad39b4d8dbf19cbd67c9b9844279 diff --git a/src/libgame/joystick.c b/src/libgame/joystick.c index 92eec0e3..0c61c57a 100644 --- a/src/libgame/joystick.c +++ b/src/libgame/joystick.c @@ -4,7 +4,7 @@ // (c) 1995-2014 by Artsoft Entertainment // Holger Schemel // info@artsoft.org -// http://www.artsoft.org/ +// https://www.artsoft.org/ // ---------------------------------------------------------------------------- // joystick.c // ============================================================================ @@ -17,14 +17,14 @@ #include "misc.h" -/* ========================================================================= */ -/* platform independent joystick functions */ -/* ========================================================================= */ +// ============================================================================ +// platform independent joystick functions +// ============================================================================ #define TRANSLATE_JOYSYMBOL_TO_JOYNAME 0 #define TRANSLATE_JOYNAME_TO_JOYSYMBOL 1 -void translate_joyname(int *joysymbol, char **name, int mode) +static void translate_joyname(int *joysymbol, char **name, int mode) { static struct { @@ -119,6 +119,39 @@ char *getDeviceNameFromJoystickNr(int joystick_nr) joystick_device_name[joystick_nr] : ""); } +char *getFormattedJoystickName(const char *name_raw) +{ + static char name[MAX_JOYSTICK_NAME_LEN + 1]; + boolean name_skip_space = TRUE; + int i, j; + + if (name_raw == NULL) + name_raw = "(unknown joystick)"; + + // copy joystick name, cutting leading and multiple spaces + for (i = 0, j = 0; i < strlen(name_raw) && i < MAX_JOYSTICK_NAME_LEN; i++) + { + if (name_raw[i] != ' ') + { + name[j++] = name_raw[i]; + name_skip_space = FALSE; + } + else if (!name_skip_space) + { + name[j++] = name_raw[i]; + name_skip_space = TRUE; + } + } + + // cut trailing space + if (j > 0 && name[j - 1] == ' ') + j--; + + name[j] = '\0'; + + return name; +} + static int JoystickPositionPercent(int center, int border, int actual) { int range, position; @@ -140,7 +173,7 @@ static int JoystickPositionPercent(int center, int border, int actual) return percent; } -void CheckJoystickData() +void CheckJoystickData(void) { int i; int distance = 100; @@ -159,21 +192,24 @@ void CheckJoystickData() } } -int Joystick(int player_nr) +int JoystickExt(int player_nr, boolean use_as_joystick_nr) { - int joystick_fd = joystick.fd[player_nr]; + int joystick_nr = joystick.nr[player_nr]; int js_x, js_y; boolean js_b1, js_b2; int left, right, up, down; int result = JOY_NO_ACTION; + if (use_as_joystick_nr) + joystick_nr = player_nr; + if (joystick.status != JOYSTICK_ACTIVATED) return JOY_NO_ACTION; - if (joystick_fd < 0 || !setup.input[player_nr].use_joystick) + if (joystick_nr < 0) return JOY_NO_ACTION; - if (!ReadJoystick(joystick_fd, &js_x, &js_y, &js_b1, &js_b2)) + if (!ReadJoystick(joystick_nr, &js_x, &js_y, &js_b1, &js_b2)) { Error(ERR_WARN, "cannot read joystick device '%s'", setup.input[player_nr].joy.device_name); @@ -208,10 +244,15 @@ int Joystick(int player_nr) return result; } -int JoystickButton(int player_nr) +int Joystick(int player_nr) +{ + return JoystickExt(player_nr, FALSE); +} + +static int JoystickButtonExt(int player_nr, boolean use_as_joystick_nr) { static int last_joy_button[MAX_PLAYERS] = { 0, 0, 0, 0 }; - int joy_button = (Joystick(player_nr) & JOY_BUTTON); + int joy_button = (JoystickExt(player_nr, use_as_joystick_nr) & JOY_BUTTON); int result; if (joy_button) @@ -233,25 +274,30 @@ int JoystickButton(int player_nr) return result; } -int AnyJoystick() +int JoystickButton(int player_nr) +{ + return JoystickButtonExt(player_nr, FALSE); +} + +int AnyJoystick(void) { int i; int result = 0; for (i = 0; i < MAX_PLAYERS; i++) - result |= Joystick(i); + result |= JoystickExt(i, TRUE); return result; } -int AnyJoystickButton() +int AnyJoystickButton(void) { int i; int result = JOY_BUTTON_NOT_PRESSED; for (i = 0; i < MAX_PLAYERS; i++) { - result = JoystickButton(i); + result = JoystickButtonExt(i, TRUE); if (result != JOY_BUTTON_NOT_PRESSED) break; } @@ -259,7 +305,7 @@ int AnyJoystickButton() return result; } -void DeactivateJoystick() +void DeactivateJoystick(void) { /* Temporarily deactivate joystick. This is needed for calibration screens, where the player has to select a joystick device that @@ -272,9 +318,9 @@ void DeactivateJoystick() joystick.status &= ~JOYSTICK_ACTIVE; } -void ActivateJoystick() +void ActivateJoystick(void) { - /* reactivate temporarily deactivated joystick */ + // reactivate temporarily deactivated joystick if (joystick.status & JOYSTICK_AVAILABLE) joystick.status |= JOYSTICK_ACTIVE;