|
|
1.1 ! root 1: /* ! 2: * UAE - The Un*x Amiga Emulator ! 3: * ! 4: * Joystick emulation for Linux and BSD. They share too much code to ! 5: * split this file. ! 6: * ! 7: * Copyright 1997 Bernd Schmidt ! 8: * Copyright 1998 Krister Walfridsson ! 9: */ ! 10: ! 11: #include "sysconfig.h" ! 12: #include "sysdeps.h" ! 13: ! 14: #include "config.h" ! 15: #include "options.h" ! 16: #include "memory.h" ! 17: #include "custom.h" ! 18: #include "joystick.h" ! 19: #include "SDL.h" ! 20: ! 21: int nr_joysticks; ! 22: ! 23: static SDL_Joystick *joy0, *joy1; ! 24: ! 25: struct joy_range ! 26: { ! 27: int minx, maxx, miny, maxy; ! 28: } range0, range1; ! 29: ! 30: void read_joystick(int nr, unsigned int *dir, int *button) ! 31: { ! 32: int x_axis, y_axis; ! 33: int left = 0, right = 0, top = 0, bot = 0; ! 34: int len, i, num; ! 35: SDL_Joystick *joy = nr == 0 ? joy0 : joy1; ! 36: struct joy_range *r = nr == 0 ? &range0 : &range1; ! 37: ! 38: *dir = 0; ! 39: *button = 0; ! 40: if (nr >= nr_joysticks) ! 41: return; ! 42: ! 43: SDL_JoystickUpdate (); ! 44: ! 45: x_axis = SDL_JoystickGetAxis (joy, 0); ! 46: y_axis = SDL_JoystickGetAxis (joy, 1); ! 47: ! 48: if (x_axis < r->minx) r->minx = x_axis; ! 49: if (y_axis < r->miny) r->miny = y_axis; ! 50: if (x_axis > r->maxx) r->maxx = x_axis; ! 51: if (y_axis > r->maxy) r->maxy = y_axis; ! 52: ! 53: if (x_axis < (r->minx + (r->maxx - r->minx)/3)) ! 54: left = 1; ! 55: else if (x_axis > (r->minx + 2*(r->maxx - r->minx)/3)) ! 56: right = 1; ! 57: ! 58: if (y_axis < (r->miny + (r->maxy - r->miny)/3)) ! 59: top = 1; ! 60: else if (y_axis > (r->miny + 2*(r->maxy - r->miny)/3)) ! 61: bot = 1; ! 62: ! 63: if (left) top = !top; ! 64: if (right) bot = !bot; ! 65: *dir = bot | (right << 1) | (top << 8) | (left << 9); ! 66: num = SDL_JoystickNumButtons (joy); ! 67: if (num > 16) ! 68: num = 16; ! 69: for (i = 0; i < num; i++) ! 70: *button |= (SDL_JoystickGetButton (joy, i) & 1) << i; ! 71: } ! 72: ! 73: void init_joystick(void) ! 74: { ! 75: int i; ! 76: nr_joysticks = SDL_NumJoysticks (); ! 77: if (nr_joysticks > 0) ! 78: joy0 = SDL_JoystickOpen (0); ! 79: if (nr_joysticks > 1) ! 80: joy1 = SDL_JoystickOpen (1); ! 81: range0.minx = INT_MAX; ! 82: range0.maxx = INT_MIN; ! 83: range0.miny = INT_MAX; ! 84: range0.maxy = INT_MIN; ! 85: range1.minx = INT_MAX; ! 86: range1.maxx = INT_MIN; ! 87: range1.miny = INT_MAX; ! 88: range1.maxy = INT_MIN; ! 89: } ! 90: ! 91: void close_joystick(void) ! 92: { ! 93: if (nr_joysticks > 0) ! 94: SDL_JoystickClose (joy0); ! 95: if (nr_joysticks > 1) ! 96: SDL_JoystickClose (joy1); ! 97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.