1 /* 2 * OpenBOR - http://www.LavaLit.com 3 * ----------------------------------------------------------------------- 4 * All rights reserved, see LICENSE in OpenBOR root for details. 5 * 6 * Copyright (c) 2004 - 2011 OpenBOR Team 7 */ 8 9 #ifndef CONTROL_H 10 #define CONTROL_H 11 12 // Generic control stuff (keyboard+joystick). 13 #if ANDROID || DARWIN || SDL2 14 #include "SDL_keycode.h" 15 #else 16 #include <SDL_keysym.h> 17 #endif 18 #include "joysticks.h" 19 20 #ifdef OPENDINGUX 21 #define CONTROL_ESC OPENDINGUX_BUTTON_SELECT 22 #define CONTROL_DEFAULT1_START OPENDINGUX_BUTTON_START 23 #define CONTROL_DEFAULT1_UP OPENDINGUX_BUTTON_UP 24 #define CONTROL_DEFAULT1_DOWN OPENDINGUX_BUTTON_DOWN 25 #define CONTROL_DEFAULT1_LEFT OPENDINGUX_BUTTON_LEFT 26 #define CONTROL_DEFAULT1_RIGHT OPENDINGUX_BUTTON_RIGHT 27 #define CONTROL_DEFAULT1_FIRE1 OPENDINGUX_BUTTON_A 28 #define CONTROL_DEFAULT1_FIRE2 OPENDINGUX_BUTTON_Y 29 #define CONTROL_DEFAULT1_FIRE3 OPENDINGUX_BUTTON_R 30 #define CONTROL_DEFAULT1_FIRE4 OPENDINGUX_BUTTON_L 31 #define CONTROL_DEFAULT1_FIRE5 OPENDINGUX_BUTTON_B 32 #define CONTROL_DEFAULT1_FIRE6 OPENDINGUX_BUTTON_X 33 #define CONTROL_DEFAULT1_SCREENSHOT SDLK_F12 34 #elif GP2X 35 #define CONTROL_ESC (JOY_LIST_FIRST + 15) 36 #define CONTROL_DEFAULT1_UP (JOY_LIST_FIRST + 1) 37 #define CONTROL_DEFAULT1_RIGHT (JOY_LIST_FIRST + 2) 38 #define CONTROL_DEFAULT1_DOWN (JOY_LIST_FIRST + 3) 39 #define CONTROL_DEFAULT1_LEFT (JOY_LIST_FIRST + 4) 40 #define CONTROL_DEFAULT1_FIRE1 (JOY_LIST_FIRST + 5) 41 #define CONTROL_DEFAULT1_FIRE2 (JOY_LIST_FIRST + 6) 42 #define CONTROL_DEFAULT1_FIRE3 (JOY_LIST_FIRST + 7) 43 #define CONTROL_DEFAULT1_FIRE4 (JOY_LIST_FIRST + 8) 44 #define CONTROL_DEFAULT1_FIRE5 (JOY_LIST_FIRST + 9) 45 #define CONTROL_DEFAULT1_FIRE6 (JOY_LIST_FIRST + 10) 46 #define CONTROL_DEFAULT1_START (JOY_LIST_FIRST + 11) 47 #define CONTROL_DEFAULT1_SCREENSHOT (JOY_LIST_FIRST + 12) 48 #else 49 #ifdef SDL2 50 #define CONTROL_ESC SDL_SCANCODE_ESCAPE 51 #define CONTROL_DEFAULT1_START SDL_SCANCODE_RETURN 52 #define CONTROL_DEFAULT1_UP SDL_SCANCODE_UP 53 #define CONTROL_DEFAULT1_DOWN SDL_SCANCODE_DOWN 54 #define CONTROL_DEFAULT1_LEFT SDL_SCANCODE_LEFT 55 #define CONTROL_DEFAULT1_RIGHT SDL_SCANCODE_RIGHT 56 #define CONTROL_DEFAULT1_FIRE1 SDL_SCANCODE_A 57 #define CONTROL_DEFAULT1_FIRE2 SDL_SCANCODE_S 58 #define CONTROL_DEFAULT1_FIRE3 SDL_SCANCODE_Z 59 #define CONTROL_DEFAULT1_FIRE4 SDL_SCANCODE_X 60 #define CONTROL_DEFAULT1_FIRE5 SDL_SCANCODE_D 61 #define CONTROL_DEFAULT1_FIRE6 SDL_SCANCODE_F 62 #define CONTROL_DEFAULT1_SCREENSHOT SDL_SCANCODE_F12 63 #else 64 #define CONTROL_ESC SDLK_ESCAPE 65 #define CONTROL_DEFAULT1_START SDLK_RETURN 66 #define CONTROL_DEFAULT1_UP SDLK_UP 67 #define CONTROL_DEFAULT1_DOWN SDLK_DOWN 68 #define CONTROL_DEFAULT1_LEFT SDLK_LEFT 69 #define CONTROL_DEFAULT1_RIGHT SDLK_RIGHT 70 #define CONTROL_DEFAULT1_FIRE1 SDLK_a 71 #define CONTROL_DEFAULT1_FIRE2 SDLK_s 72 #define CONTROL_DEFAULT1_FIRE3 SDLK_z 73 #define CONTROL_DEFAULT1_FIRE4 SDLK_x 74 #define CONTROL_DEFAULT1_FIRE5 SDLK_d 75 #define CONTROL_DEFAULT1_FIRE6 SDLK_f 76 #define CONTROL_DEFAULT1_SCREENSHOT SDLK_F12 77 #endif 78 #endif 79 80 #define CONTROL_DEFAULT2_UP ((JOY_LIST_FIRST + 1) + JOY_MAX_INPUTS) 81 #define CONTROL_DEFAULT2_RIGHT ((JOY_LIST_FIRST + 2) + JOY_MAX_INPUTS) 82 #define CONTROL_DEFAULT2_DOWN ((JOY_LIST_FIRST + 3) + JOY_MAX_INPUTS) 83 #define CONTROL_DEFAULT2_LEFT ((JOY_LIST_FIRST + 4) + JOY_MAX_INPUTS) 84 #define CONTROL_DEFAULT2_FIRE1 ((JOY_LIST_FIRST + 5) + JOY_MAX_INPUTS) 85 #define CONTROL_DEFAULT2_FIRE2 ((JOY_LIST_FIRST + 6) + JOY_MAX_INPUTS) 86 #define CONTROL_DEFAULT2_FIRE3 ((JOY_LIST_FIRST + 7) + JOY_MAX_INPUTS) 87 #define CONTROL_DEFAULT2_FIRE4 ((JOY_LIST_FIRST + 8) + JOY_MAX_INPUTS) 88 #define CONTROL_DEFAULT2_FIRE5 ((JOY_LIST_FIRST + 9) + JOY_MAX_INPUTS) 89 #define CONTROL_DEFAULT2_FIRE6 ((JOY_LIST_FIRST + 10) + JOY_MAX_INPUTS) 90 #define CONTROL_DEFAULT2_START ((JOY_LIST_FIRST + 11) + JOY_MAX_INPUTS) 91 #define CONTROL_DEFAULT2_SCREENSHOT ((JOY_LIST_FIRST + 12) + JOY_MAX_INPUTS) 92 93 #define CONTROL_DEFAULT3_UP ((JOY_LIST_FIRST + 1) + (JOY_MAX_INPUTS * 2)) 94 #define CONTROL_DEFAULT3_RIGHT ((JOY_LIST_FIRST + 2) + (JOY_MAX_INPUTS * 2)) 95 #define CONTROL_DEFAULT3_DOWN ((JOY_LIST_FIRST + 3) + (JOY_MAX_INPUTS * 2)) 96 #define CONTROL_DEFAULT3_LEFT ((JOY_LIST_FIRST + 4) + (JOY_MAX_INPUTS * 2)) 97 #define CONTROL_DEFAULT3_FIRE1 ((JOY_LIST_FIRST + 5) + (JOY_MAX_INPUTS * 2)) 98 #define CONTROL_DEFAULT3_FIRE2 ((JOY_LIST_FIRST + 6) + (JOY_MAX_INPUTS * 2)) 99 #define CONTROL_DEFAULT3_FIRE3 ((JOY_LIST_FIRST + 7) + (JOY_MAX_INPUTS * 2)) 100 #define CONTROL_DEFAULT3_FIRE4 ((JOY_LIST_FIRST + 8) + (JOY_MAX_INPUTS * 2)) 101 #define CONTROL_DEFAULT3_FIRE5 ((JOY_LIST_FIRST + 9) + (JOY_MAX_INPUTS * 2)) 102 #define CONTROL_DEFAULT3_FIRE6 ((JOY_LIST_FIRST + 10) + (JOY_MAX_INPUTS * 2)) 103 #define CONTROL_DEFAULT3_START ((JOY_LIST_FIRST + 11) + (JOY_MAX_INPUTS * 2)) 104 #define CONTROL_DEFAULT3_SCREENSHOT ((JOY_LIST_FIRST + 12) + (JOY_MAX_INPUTS * 2)) 105 106 #define CONTROL_DEFAULT4_UP ((JOY_LIST_FIRST + 1) + (JOY_MAX_INPUTS * 3)) 107 #define CONTROL_DEFAULT4_RIGHT ((JOY_LIST_FIRST + 2) + (JOY_MAX_INPUTS * 3)) 108 #define CONTROL_DEFAULT4_DOWN ((JOY_LIST_FIRST + 3) + (JOY_MAX_INPUTS * 3)) 109 #define CONTROL_DEFAULT4_LEFT ((JOY_LIST_FIRST + 4) + (JOY_MAX_INPUTS * 3)) 110 #define CONTROL_DEFAULT4_FIRE1 ((JOY_LIST_FIRST + 5) + (JOY_MAX_INPUTS * 3)) 111 #define CONTROL_DEFAULT4_FIRE2 ((JOY_LIST_FIRST + 6) + (JOY_MAX_INPUTS * 3)) 112 #define CONTROL_DEFAULT4_FIRE3 ((JOY_LIST_FIRST + 7) + (JOY_MAX_INPUTS * 3)) 113 #define CONTROL_DEFAULT4_FIRE4 ((JOY_LIST_FIRST + 8) + (JOY_MAX_INPUTS * 3)) 114 #define CONTROL_DEFAULT4_FIRE5 ((JOY_LIST_FIRST + 9) + (JOY_MAX_INPUTS * 3)) 115 #define CONTROL_DEFAULT4_FIRE6 ((JOY_LIST_FIRST + 10) + (JOY_MAX_INPUTS * 3)) 116 #define CONTROL_DEFAULT4_START ((JOY_LIST_FIRST + 11) + (JOY_MAX_INPUTS * 3)) 117 #define CONTROL_DEFAULT4_SCREENSHOT ((JOY_LIST_FIRST + 12) + (JOY_MAX_INPUTS * 3)) 118 119 #define JOYBUTTON(index, btn) (1 + i * JOY_MAX_INPUTS + btn) 120 #define JOYAXIS(index, axis, dir) (JOYBUTTON(index, joysticks[index].NumButtons) + 2 * axis + dir) 121 122 #ifdef SDL2 123 #define SDLK_FIRST SDL_SCANCODE_UNKNOWN 124 #define SDLK_LAST SDL_NUM_SCANCODES 125 #define SDL_GetKeyState SDL_GetKeyboardState 126 #define SDL_JoystickName(x) SDL_JoystickName(joystick[x]) 127 #endif 128 129 130 typedef struct{ 131 int settings[JOY_MAX_INPUTS]; 132 u32 keyflags, newkeyflags; 133 int kb_break; 134 }s_playercontrols; 135 136 void control_exit(); 137 void control_init(int joy_enable); 138 int control_usejoy(int enable); 139 int control_getjoyenabled(); 140 141 void control_setkey(s_playercontrols * pcontrols, unsigned int flag, int key); 142 int control_scankey(); 143 144 char *control_getkeyname(unsigned int keycode); 145 void control_update(s_playercontrols ** playercontrols, int numplayers); 146 void control_rumble(int port, int msec); 147 int keyboard_getlastkey(); 148 149 #endif 150 151