1 2 // Copyright Michael D. Parker 2018. 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 module bindbc.sdl.bind.sdlgamecontroller; 8 9 import bindbc.sdl.config; 10 11 import bindbc.sdl.bind.sdljoystick, 12 bindbc.sdl.bind.sdlrwops; 13 import bindbc.sdl.bind.sdlstdinc : SDL_bool; 14 15 struct SDL_GameController; 16 17 enum SDL_GameControllerBindType { 18 SDL_CONTROLLER_BINDTYPE_NONE = 0, 19 SDL_CONTROLLER_BINDTYPE_BUTTON, 20 SDL_CONTROLLER_BINDTYPE_AXIS, 21 SDL_CONTROLLER_BINDTYPE_HAT, 22 } 23 mixin(expandEnum!SDL_GameControllerBindType); 24 25 struct SDL_GameControllerButtonBind { 26 SDL_GameControllerBindType bindType; 27 union value { 28 int button; 29 int axis; 30 struct hat { 31 int hat; 32 int hat_mask; 33 } 34 } 35 alias button = value.button; 36 alias axis = value.axis; 37 alias hat = value.hat; 38 } 39 40 enum SDL_GameControllerAxis { 41 SDL_CONTROLLER_AXIS_INVALID = -1, 42 SDL_CONTROLLER_AXIS_LEFTX, 43 SDL_CONTROLLER_AXIS_LEFTY, 44 SDL_CONTROLLER_AXIS_RIGHTX, 45 SDL_CONTROLLER_AXIS_RIGHTY, 46 SDL_CONTROLLER_AXIS_TRIGGERLEFT, 47 SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 48 SDL_CONTROLLER_AXIS_MAX 49 } 50 mixin(expandEnum!SDL_GameControllerAxis); 51 52 enum SDL_GameControllerButton { 53 SDL_CONTROLLER_BUTTON_INVALID = -1, 54 SDL_CONTROLLER_BUTTON_A, 55 SDL_CONTROLLER_BUTTON_B, 56 SDL_CONTROLLER_BUTTON_X, 57 SDL_CONTROLLER_BUTTON_Y, 58 SDL_CONTROLLER_BUTTON_BACK, 59 SDL_CONTROLLER_BUTTON_GUIDE, 60 SDL_CONTROLLER_BUTTON_START, 61 SDL_CONTROLLER_BUTTON_LEFTSTICK, 62 SDL_CONTROLLER_BUTTON_RIGHTSTICK, 63 SDL_CONTROLLER_BUTTON_LEFTSHOULDER, 64 SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, 65 SDL_CONTROLLER_BUTTON_DPAD_UP, 66 SDL_CONTROLLER_BUTTON_DPAD_DOWN, 67 SDL_CONTROLLER_BUTTON_DPAD_LEFT, 68 SDL_CONTROLLER_BUTTON_DPAD_RIGHT, 69 SDL_CONTROLLER_BUTTON_MAX 70 } 71 mixin(expandEnum!SDL_GameControllerButton); 72 73 static if(sdlSupport >= SDLSupport.sdl202) { 74 @nogc nothrow 75 int SDL_GameControllerAddMappingsFromFile(const(char)* file) { 76 pragma(inline, true); 77 return SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file,"rb"),1); 78 } 79 } 80 81 version(BindSDL_Static) { 82 extern(C) @nogc nothrow { 83 int SDL_GameControllerAddMapping(const(char)*); 84 char* SDL_GameControllerMappingForGUID(SDL_JoystickGUID); 85 char* SDL_GameControllerMapping(SDL_GameController*); 86 SDL_bool SDL_IsGameController(int); 87 const(char)* SDL_GameControllerNameForIndex(int); 88 SDL_GameController* SDL_GameControllerOpen(int); 89 const(char)* SDL_GameControllerName(SDL_GameController*); 90 SDL_bool SDL_GameControllerGetAttached(SDL_GameController*); 91 SDL_Joystick* SDL_GameControllerGetJoystick(SDL_GameController*); 92 int SDL_GameControllerEventState(int); 93 void SDL_GameControllerUpdate(); 94 SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const(char)*); 95 const(char)* SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis); 96 SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController*,SDL_GameControllerAxis); 97 short SDL_GameControllerGetAxis(SDL_GameController*,SDL_GameControllerAxis); 98 SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const(char*)); 99 const(char)* SDL_GameControllerGetStringForButton(SDL_GameControllerButton); 100 SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController*,SDL_GameControllerButton); 101 ubyte SDL_GameControllerGetButton(SDL_GameController*,SDL_GameControllerButton); 102 void SDL_GameControllerClose(SDL_GameController*); 103 104 static if(sdlSupport >= SDLSupport.sdl202) { 105 int SDL_GameControllerAddMappingsFromRW(SDL_RWops*,int); 106 } 107 static if(sdlSupport >= SDLSupport.sdl204) { 108 SDL_GameController* SDL_GameControllerFromInstanceID(SDL_JoystickID); 109 } 110 static if(sdlSupport >= SDLSupport.sdl206) { 111 ushort SDL_GameControllerGetProduct(SDL_GameController*); 112 ushort SDL_GameControllerGetProductVersion(SDL_GameController*); 113 ushort SDL_GameControllerGetVendor(SDL_GameController*); 114 char* SDL_GameControllerMappingForIndex(int); 115 int SDL_GameControllerNumMappings(); 116 } 117 static if(sdlSupport >= SDLSupport.sdl209) { 118 char* SDL_GameControllerMappingForDeviceIndex(int); 119 int SDL_GameControllerRumble(SDL_GameController*,ushort,ushort,uint); 120 } 121 } 122 } 123 else { 124 extern(C) @nogc nothrow { 125 alias pSDL_GameControllerAddMapping = int function(const(char)*); 126 alias pSDL_GameControllerMappingForGUID = char* function(SDL_JoystickGUID); 127 alias pSDL_GameControllerMapping = char* function(SDL_GameController*); 128 alias pSDL_IsGameController = SDL_bool function(int); 129 alias pSDL_GameControllerNameForIndex = const(char)* function(int); 130 alias pSDL_GameControllerOpen = SDL_GameController* function(int); 131 alias pSDL_GameControllerName = const(char)* function(SDL_GameController*); 132 alias pSDL_GameControllerGetAttached = SDL_bool function(SDL_GameController*); 133 alias pSDL_GameControllerGetJoystick = SDL_Joystick* function(SDL_GameController*); 134 alias pSDL_GameControllerEventState = int function(int); 135 alias pSDL_GameControllerUpdate = void function(); 136 alias pSDL_GameControllerGetAxisFromString = SDL_GameControllerAxis function(const(char)*); 137 alias pSDL_GameControllerGetStringForAxis = const(char)* function(SDL_GameControllerAxis); 138 alias pSDL_GameControllerGetBindForAxis = SDL_GameControllerButtonBind function(SDL_GameController*,SDL_GameControllerAxis); 139 alias pSDL_GameControllerGetAxis = short function(SDL_GameController*,SDL_GameControllerAxis); 140 alias pSDL_GameControllerGetButtonFromString = SDL_GameControllerButton function(const(char*)); 141 alias pSDL_GameControllerGetStringForButton = const(char)* function(SDL_GameControllerButton); 142 alias pSDL_GameControllerGetBindForButton = SDL_GameControllerButtonBind function(SDL_GameController*,SDL_GameControllerButton); 143 alias pSDL_GameControllerGetButton = ubyte function(SDL_GameController*,SDL_GameControllerButton); 144 alias pSDL_GameControllerClose = void function(SDL_GameController*); 145 } 146 147 __gshared { 148 pSDL_GameControllerAddMapping SDL_GameControllerAddMapping; 149 pSDL_GameControllerMappingForGUID SDL_GameControllerMappingForGUID; 150 pSDL_GameControllerMapping SDL_GameControllerMapping; 151 pSDL_IsGameController SDL_IsGameController; 152 pSDL_GameControllerNameForIndex SDL_GameControllerNameForIndex; 153 pSDL_GameControllerOpen SDL_GameControllerOpen; 154 pSDL_GameControllerName SDL_GameControllerName; 155 pSDL_GameControllerGetAttached SDL_GameControllerGetAttached; 156 pSDL_GameControllerGetJoystick SDL_GameControllerGetJoystick; 157 pSDL_GameControllerEventState SDL_GameControllerEventState; 158 pSDL_GameControllerUpdate SDL_GameControllerUpdate; 159 pSDL_GameControllerGetAxisFromString SDL_GameControllerGetAxisFromString; 160 pSDL_GameControllerGetStringForAxis SDL_GameControllerGetStringForAxis; 161 pSDL_GameControllerGetBindForAxis SDL_GameControllerGetBindForAxis; 162 pSDL_GameControllerGetAxis SDL_GameControllerGetAxis; 163 pSDL_GameControllerGetButtonFromString SDL_GameControllerGetButtonFromString; 164 pSDL_GameControllerGetStringForButton SDL_GameControllerGetStringForButton; 165 pSDL_GameControllerGetBindForButton SDL_GameControllerGetBindForButton; 166 pSDL_GameControllerGetButton SDL_GameControllerGetButton; 167 pSDL_GameControllerClose SDL_GameControllerClose; 168 } 169 170 static if(sdlSupport >= SDLSupport.sdl202) { 171 extern(C) @nogc nothrow { 172 alias pSDL_GameControllerAddMappingsFromRW = int function(SDL_RWops*,int); 173 } 174 175 __gshared { 176 pSDL_GameControllerAddMappingsFromRW SDL_GameControllerAddMappingsFromRW; 177 } 178 } 179 180 static if(sdlSupport >= SDLSupport.sdl204) { 181 extern(C) @nogc nothrow { 182 alias pSDL_GameControllerFromInstanceID = SDL_GameController* function(SDL_JoystickID); 183 } 184 185 __gshared { 186 pSDL_GameControllerFromInstanceID SDL_GameControllerFromInstanceID; 187 } 188 } 189 190 static if(sdlSupport >= SDLSupport.sdl206) { 191 extern(C) @nogc nothrow { 192 alias pSDL_GameControllerGetProduct = ushort function(SDL_GameController*); 193 alias pSDL_GameControllerGetProductVersion = ushort function(SDL_GameController*); 194 alias pSDL_GameControllerGetVendor = ushort function(SDL_GameController*); 195 alias pSDL_GameControllerMappingForIndex = char* function(int); 196 alias pSDL_GameControllerNumMappings = int function(); 197 } 198 199 __gshared { 200 pSDL_GameControllerGetProduct SDL_GameControllerGetProduct; 201 pSDL_GameControllerGetProductVersion SDL_GameControllerGetProductVersion; 202 pSDL_GameControllerGetVendor SDL_GameControllerGetVendor; 203 pSDL_GameControllerMappingForIndex SDL_GameControllerMappingForIndex; 204 pSDL_GameControllerNumMappings SDL_GameControllerNumMappings; 205 } 206 } 207 208 static if(sdlSupport >= SDLSupport.sdl209) { 209 extern(C) @nogc nothrow { 210 alias pSDL_GameControllerMappingForDeviceIndex = char* function(int); 211 alias pSDL_GameControllerRumble = int function(SDL_GameController*,ushort,ushort,uint); 212 } 213 214 __gshared { 215 pSDL_GameControllerMappingForDeviceIndex SDL_GameControllerMappingForDeviceIndex; 216 pSDL_GameControllerRumble SDL_GameControllerRumble; 217 } 218 } 219 }