1 2 // Copyright 2018 - 2022 Michael D. Parker 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 bindbc.sdl.bind.sdlsensor; 14 import bindbc.sdl.bind.sdlstdinc : SDL_bool; 15 16 struct SDL_GameController; 17 18 static if(sdlSupport >= SDLSupport.sdl2016) { 19 enum SDL_GameControllerType { 20 SDL_CONTROLLER_TYPE_UNKNOWN = 0, 21 SDL_CONTROLLER_TYPE_XBOX360, 22 SDL_CONTROLLER_TYPE_XBOXONE, 23 SDL_CONTROLLER_TYPE_PS3, 24 SDL_CONTROLLER_TYPE_PS4, 25 SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, 26 SDL_CONTROLLER_TYPE_VIRTUAL, 27 SDL_CONTROLLER_TYPE_PS5, 28 SDL_CONTROLLER_TYPE_AMAZON_LUNA, 29 SDL_CONTROLLER_TYPE_GOOGLE_STADIA 30 } 31 mixin(expandEnum!SDL_GameControllerType); 32 } 33 else static if(sdlSupport >= SDLSupport.sdl2014) { 34 enum SDL_GameControllerType { 35 SDL_CONTROLLER_TYPE_UNKNOWN = 0, 36 SDL_CONTROLLER_TYPE_XBOX360, 37 SDL_CONTROLLER_TYPE_XBOXONE, 38 SDL_CONTROLLER_TYPE_PS3, 39 SDL_CONTROLLER_TYPE_PS4, 40 SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, 41 SDL_CONTROLLER_TYPE_VIRTUAL, 42 SDL_CONTROLLER_TYPE_PS5 43 } 44 mixin(expandEnum!SDL_GameControllerType); 45 } 46 else static if(sdlSupport >= SDLSupport.sdl2012) { 47 enum SDL_GameControllerType { 48 SDL_CONTROLLER_TYPE_UNKNOWN = 0, 49 SDL_CONTROLLER_TYPE_XBOX360, 50 SDL_CONTROLLER_TYPE_XBOXONE, 51 SDL_CONTROLLER_TYPE_PS3, 52 SDL_CONTROLLER_TYPE_PS4, 53 SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, 54 } 55 mixin(expandEnum!SDL_GameControllerType); 56 } 57 58 enum SDL_GameControllerBindType { 59 SDL_CONTROLLER_BINDTYPE_NONE = 0, 60 SDL_CONTROLLER_BINDTYPE_BUTTON, 61 SDL_CONTROLLER_BINDTYPE_AXIS, 62 SDL_CONTROLLER_BINDTYPE_HAT, 63 } 64 mixin(expandEnum!SDL_GameControllerBindType); 65 66 struct SDL_GameControllerButtonBind { 67 SDL_GameControllerBindType bindType; 68 union value { 69 int button; 70 int axis; 71 struct hat { 72 int hat; 73 int hat_mask; 74 } 75 } 76 alias button = value.button; 77 alias axis = value.axis; 78 alias hat = value.hat; 79 } 80 81 enum SDL_GameControllerAxis { 82 SDL_CONTROLLER_AXIS_INVALID = -1, 83 SDL_CONTROLLER_AXIS_LEFTX, 84 SDL_CONTROLLER_AXIS_LEFTY, 85 SDL_CONTROLLER_AXIS_RIGHTX, 86 SDL_CONTROLLER_AXIS_RIGHTY, 87 SDL_CONTROLLER_AXIS_TRIGGERLEFT, 88 SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 89 SDL_CONTROLLER_AXIS_MAX 90 } 91 mixin(expandEnum!SDL_GameControllerAxis); 92 93 static if(sdlSupport >= SDLSupport.sdl2014) { 94 enum SDL_GameControllerButton { 95 SDL_CONTROLLER_BUTTON_INVALID = -1, 96 SDL_CONTROLLER_BUTTON_A, 97 SDL_CONTROLLER_BUTTON_B, 98 SDL_CONTROLLER_BUTTON_X, 99 SDL_CONTROLLER_BUTTON_Y, 100 SDL_CONTROLLER_BUTTON_BACK, 101 SDL_CONTROLLER_BUTTON_GUIDE, 102 SDL_CONTROLLER_BUTTON_START, 103 SDL_CONTROLLER_BUTTON_LEFTSTICK, 104 SDL_CONTROLLER_BUTTON_RIGHTSTICK, 105 SDL_CONTROLLER_BUTTON_LEFTSHOULDER, 106 SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, 107 SDL_CONTROLLER_BUTTON_DPAD_UP, 108 SDL_CONTROLLER_BUTTON_DPAD_DOWN, 109 SDL_CONTROLLER_BUTTON_DPAD_LEFT, 110 SDL_CONTROLLER_BUTTON_DPAD_RIGHT, 111 SDL_CONTROLLER_BUTTON_MISC1, 112 SDL_CONTROLLER_BUTTON_PADDLE1, 113 SDL_CONTROLLER_BUTTON_PADDLE2, 114 SDL_CONTROLLER_BUTTON_PADDLE3, 115 SDL_CONTROLLER_BUTTON_PADDLE4, 116 SDL_CONTROLLER_BUTTON_TOUCHPAD, 117 SDL_CONTROLLER_BUTTON_MAX, 118 } 119 } 120 else { 121 enum SDL_GameControllerButton { 122 SDL_CONTROLLER_BUTTON_INVALID = -1, 123 SDL_CONTROLLER_BUTTON_A, 124 SDL_CONTROLLER_BUTTON_B, 125 SDL_CONTROLLER_BUTTON_X, 126 SDL_CONTROLLER_BUTTON_Y, 127 SDL_CONTROLLER_BUTTON_BACK, 128 SDL_CONTROLLER_BUTTON_GUIDE, 129 SDL_CONTROLLER_BUTTON_START, 130 SDL_CONTROLLER_BUTTON_LEFTSTICK, 131 SDL_CONTROLLER_BUTTON_RIGHTSTICK, 132 SDL_CONTROLLER_BUTTON_LEFTSHOULDER, 133 SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, 134 SDL_CONTROLLER_BUTTON_DPAD_UP, 135 SDL_CONTROLLER_BUTTON_DPAD_DOWN, 136 SDL_CONTROLLER_BUTTON_DPAD_LEFT, 137 SDL_CONTROLLER_BUTTON_DPAD_RIGHT, 138 SDL_CONTROLLER_BUTTON_MAX, 139 } 140 } 141 mixin(expandEnum!SDL_GameControllerButton); 142 143 static if(sdlSupport >= SDLSupport.sdl202) { 144 @nogc nothrow 145 int SDL_GameControllerAddMappingsFromFile(const(char)* file) { 146 pragma(inline, true); 147 return SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file,"rb"),1); 148 } 149 } 150 151 static if(staticBinding) { 152 extern(C) @nogc nothrow { 153 int SDL_GameControllerAddMapping(const(char)* mappingString); 154 char* SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid); 155 char* SDL_GameControllerMapping(SDL_GameController* gamecontroller); 156 SDL_bool SDL_IsGameController(int joystick_index); 157 const(char)* SDL_GameControllerNameForIndex(int joystick_index); 158 SDL_GameController* SDL_GameControllerOpen(int joystick_index); 159 const(char)* SDL_GameControllerName(SDL_GameController* gamecontroller); 160 SDL_bool SDL_GameControllerGetAttached(SDL_GameController* gamecontroller); 161 SDL_Joystick* SDL_GameControllerGetJoystick(SDL_GameController* gamecontroller); 162 int SDL_GameControllerEventState(int state); 163 void SDL_GameControllerUpdate(); 164 SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const(char)* pchString); 165 const(char)* SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); 166 SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 167 short SDL_GameControllerGetAxis(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 168 SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const(char*) pchString); 169 const(char)* SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); 170 SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 171 ubyte SDL_GameControllerGetButton(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 172 void SDL_GameControllerClose(SDL_GameController* gamecontroller); 173 174 static if(sdlSupport >= SDLSupport.sdl202) { 175 int SDL_GameControllerAddMappingsFromRW(SDL_RWops* rw, int freerw); 176 } 177 static if(sdlSupport >= SDLSupport.sdl204) { 178 SDL_GameController* SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); 179 } 180 static if(sdlSupport >= SDLSupport.sdl206) { 181 ushort SDL_GameControllerGetProduct(SDL_GameController* gamecontroller); 182 ushort SDL_GameControllerGetProductVersion(SDL_GameController* gamecontroller); 183 ushort SDL_GameControllerGetVendor(SDL_GameController* gamecontroller); 184 char* SDL_GameControllerMappingForIndex(int mapping_index); 185 int SDL_GameControllerNumMappings(); 186 } 187 static if(sdlSupport >= SDLSupport.sdl209) { 188 char* SDL_GameControllerMappingForDeviceIndex(int joystick_index); 189 int SDL_GameControllerRumble(SDL_GameController* gamecontroller, ushort low_frequency_rumble, ushort high_frequency_rumble, uint duration_ms); 190 } 191 static if(sdlSupport >= SDLSupport.sdl2010) { 192 int SDL_GameControllerGetPlayerIndex(SDL_GameController* gamecontroller); 193 } 194 static if(sdlSupport >= SDLSupport.sdl2012) { 195 SDL_GameControllerType SDL_GameControllerTypeForIndex(int joystick_index); 196 SDL_GameController* SDL_GameControllerFromPlayerIndex(int player_index); 197 SDL_GameControllerType SDL_GameControllerGetType(SDL_GameController* gamecontroller); 198 void SDL_GameControllerSetPlayerIndex(SDL_GameController* gamecontroller, int player_index); 199 } 200 static if(sdlSupport >= SDLSupport.sdl2014) { 201 SDL_bool SDL_GameControllerHasAxis(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 202 SDL_bool SDL_GameControllerHasButton(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 203 int SDL_GameControllerGetNumTouchpads(SDL_GameController* gamecontroller); 204 int SDL_GameControllerGetNumTouchpadFingers (SDL_GameController* gamecontroller, int touchpad); 205 int SDL_GameControllerGetTouchpadFinger(SDL_GameController* gamecontroller, int touchpad, int finger, ubyte* state, float* x, float* y, float* pressure); 206 SDL_bool SDL_GameControllerHasSensor(SDL_GameController* gamecontroller, SDL_SensorType type); 207 int SDL_GameControllerSetSensorEnabled(SDL_GameController* gamecontroller, SDL_SensorType type, SDL_bool enabled); 208 SDL_bool SDL_GameControllerIsSensorEnabled(SDL_GameController* gamecontroller, SDL_SensorType type); 209 int SDL_GameControllerGetSensorData(SDL_GameController* gamecontroller, SDL_SensorType type, float* data, int num_values); 210 int SDL_GameControllerRumbleTriggers(SDL_GameController* gamecontroller, ushort left_rumble, ushort right_rumble, uint duration_ms); 211 SDL_bool SDL_GameControllerHasLED(SDL_GameController* gamecontroller); 212 int SDL_GameControllerSetLED(SDL_GameController* gamecontroller, ubyte red, ubyte green, ubyte blue); 213 } 214 static if(sdlSupport >= SDLSupport.sdl2016) { 215 int SDL_GameControllerSendEffect(SDL_GameController* gamecontroller, const(void)* data, int size); 216 float SDL_GameControllerGetSensorDataRate(SDL_GameController* gamecontroller, SDL_SensorType type); 217 } 218 static if(sdlSupport >= SDLSupport.sdl2018) { 219 SDL_bool SDL_GameControllerHasRumble(SDL_GameController* gamecontroller); 220 SDL_bool SDL_GameControllerHasRumbleTriggers(SDL_GameController* gamecontroller); 221 const(char)* SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 222 const(char)* SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 223 } 224 } 225 } 226 else { 227 extern(C) @nogc nothrow { 228 alias pSDL_GameControllerAddMapping = int function(const(char)* mappingString); 229 alias pSDL_GameControllerMappingForGUID = char* function(SDL_JoystickGUID guid); 230 alias pSDL_GameControllerMapping = char* function(SDL_GameController* gamecontroller); 231 alias pSDL_IsGameController = SDL_bool function(int joystick_index); 232 alias pSDL_GameControllerNameForIndex = const(char)* function(int joystick_index); 233 alias pSDL_GameControllerOpen = SDL_GameController* function(int joystick_index); 234 alias pSDL_GameControllerName = const(char)* function(SDL_GameController* gamecontroller); 235 alias pSDL_GameControllerGetAttached = SDL_bool function(SDL_GameController* gamecontroller); 236 alias pSDL_GameControllerGetJoystick = SDL_Joystick* function(SDL_GameController* gamecontroller); 237 alias pSDL_GameControllerEventState = int function(int state); 238 alias pSDL_GameControllerUpdate = void function(); 239 alias pSDL_GameControllerGetAxisFromString = SDL_GameControllerAxis function(const(char)* pchString); 240 alias pSDL_GameControllerGetStringForAxis = const(char)* function(SDL_GameControllerAxis axis); 241 alias pSDL_GameControllerGetBindForAxis = SDL_GameControllerButtonBind function(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 242 alias pSDL_GameControllerGetAxis = short function(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 243 alias pSDL_GameControllerGetButtonFromString = SDL_GameControllerButton function(const(char*) pchString); 244 alias pSDL_GameControllerGetStringForButton = const(char)* function(SDL_GameControllerButton button); 245 alias pSDL_GameControllerGetBindForButton = SDL_GameControllerButtonBind function(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 246 alias pSDL_GameControllerGetButton = ubyte function(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 247 alias pSDL_GameControllerClose = void function(SDL_GameController* gamecontroller); 248 } 249 __gshared { 250 pSDL_GameControllerAddMapping SDL_GameControllerAddMapping; 251 pSDL_GameControllerMappingForGUID SDL_GameControllerMappingForGUID; 252 pSDL_GameControllerMapping SDL_GameControllerMapping; 253 pSDL_IsGameController SDL_IsGameController; 254 pSDL_GameControllerNameForIndex SDL_GameControllerNameForIndex; 255 pSDL_GameControllerOpen SDL_GameControllerOpen; 256 pSDL_GameControllerName SDL_GameControllerName; 257 pSDL_GameControllerGetAttached SDL_GameControllerGetAttached; 258 pSDL_GameControllerGetJoystick SDL_GameControllerGetJoystick; 259 pSDL_GameControllerEventState SDL_GameControllerEventState; 260 pSDL_GameControllerUpdate SDL_GameControllerUpdate; 261 pSDL_GameControllerGetAxisFromString SDL_GameControllerGetAxisFromString; 262 pSDL_GameControllerGetStringForAxis SDL_GameControllerGetStringForAxis; 263 pSDL_GameControllerGetBindForAxis SDL_GameControllerGetBindForAxis; 264 pSDL_GameControllerGetAxis SDL_GameControllerGetAxis; 265 pSDL_GameControllerGetButtonFromString SDL_GameControllerGetButtonFromString; 266 pSDL_GameControllerGetStringForButton SDL_GameControllerGetStringForButton; 267 pSDL_GameControllerGetBindForButton SDL_GameControllerGetBindForButton; 268 pSDL_GameControllerGetButton SDL_GameControllerGetButton; 269 pSDL_GameControllerClose SDL_GameControllerClose; 270 } 271 static if(sdlSupport >= SDLSupport.sdl202) { 272 extern(C) @nogc nothrow { 273 alias pSDL_GameControllerAddMappingsFromRW = int function(SDL_RWops* rw, int freerw); 274 } 275 276 __gshared { 277 pSDL_GameControllerAddMappingsFromRW SDL_GameControllerAddMappingsFromRW; 278 } 279 } 280 static if(sdlSupport >= SDLSupport.sdl204) { 281 extern(C) @nogc nothrow { 282 alias pSDL_GameControllerFromInstanceID = SDL_GameController* function(SDL_JoystickID joyid); 283 } 284 285 __gshared { 286 pSDL_GameControllerFromInstanceID SDL_GameControllerFromInstanceID; 287 } 288 } 289 static if(sdlSupport >= SDLSupport.sdl206) { 290 extern(C) @nogc nothrow { 291 alias pSDL_GameControllerGetProduct = ushort function(SDL_GameController* gamecontroller); 292 alias pSDL_GameControllerGetProductVersion = ushort function(SDL_GameController* gamecontroller); 293 alias pSDL_GameControllerGetVendor = ushort function(SDL_GameController* gamecontroller); 294 alias pSDL_GameControllerMappingForIndex = char* function(int mapping_index); 295 alias pSDL_GameControllerNumMappings = int function(); 296 } 297 298 __gshared { 299 pSDL_GameControllerGetProduct SDL_GameControllerGetProduct; 300 pSDL_GameControllerGetProductVersion SDL_GameControllerGetProductVersion; 301 pSDL_GameControllerGetVendor SDL_GameControllerGetVendor; 302 pSDL_GameControllerMappingForIndex SDL_GameControllerMappingForIndex; 303 pSDL_GameControllerNumMappings SDL_GameControllerNumMappings; 304 } 305 } 306 static if(sdlSupport >= SDLSupport.sdl209) { 307 extern(C) @nogc nothrow { 308 alias pSDL_GameControllerMappingForDeviceIndex = char* function(int joystick_index); 309 alias pSDL_GameControllerRumble = int function(SDL_GameController* gamecontroller, ushort low_frequency_rumble, ushort high_frequency_rumble, uint duration_ms); 310 } 311 312 __gshared { 313 pSDL_GameControllerMappingForDeviceIndex SDL_GameControllerMappingForDeviceIndex; 314 pSDL_GameControllerRumble SDL_GameControllerRumble; 315 } 316 } 317 static if(sdlSupport >= SDLSupport.sdl2010) { 318 extern(C) @nogc nothrow { 319 alias pSDL_GameControllerGetPlayerIndex = int function(SDL_GameController* gamecontroller); 320 } 321 __gshared { 322 pSDL_GameControllerGetPlayerIndex SDL_GameControllerGetPlayerIndex; 323 } 324 } 325 static if(sdlSupport >= SDLSupport.sdl2012) { 326 extern(C) @nogc nothrow { 327 alias pSDL_GameControllerTypeForIndex = SDL_GameControllerType function(int joystick_index); 328 alias pSDL_GameControllerFromPlayerIndex = SDL_GameController* function(int player_index); 329 alias pSDL_GameControllerGetType = SDL_GameControllerType function(SDL_GameController* gamecontroller); 330 alias pSDL_GameControllerSetPlayerIndex = void function(SDL_GameController* gamecontroller, int player_index); 331 332 } 333 __gshared { 334 pSDL_GameControllerTypeForIndex SDL_GameControllerTypeForIndex; 335 pSDL_GameControllerFromPlayerIndex SDL_GameControllerFromPlayerIndex; 336 pSDL_GameControllerGetType SDL_GameControllerGetType; 337 pSDL_GameControllerSetPlayerIndex SDL_GameControllerSetPlayerIndex; 338 } 339 } 340 static if(sdlSupport >= SDLSupport.sdl2014) { 341 extern(C) @nogc nothrow { 342 alias pSDL_GameControllerHasAxis = SDL_bool function(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 343 alias pSDL_GameControllerHasButton = SDL_bool function(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 344 alias pSDL_GameControllerGetNumTouchpads = int function(SDL_GameController* gamecontroller); 345 alias pSDL_GameControllerGetNumTouchpadFingers = int function(SDL_GameController* gamecontroller, int touchpad); 346 alias pSDL_GameControllerGetTouchpadFinger = int function(SDL_GameController* gamecontroller, int touchpad, int finger, ubyte* state, float* x, float* y, float* pressure); 347 alias pSDL_GameControllerHasSensor = SDL_bool function(SDL_GameController* gamecontroller, SDL_SensorType type); 348 alias pSDL_GameControllerSetSensorEnabled = int function(SDL_GameController* gamecontroller, SDL_SensorType type, SDL_bool enabled); 349 alias pSDL_GameControllerIsSensorEnabled = SDL_bool function(SDL_GameController* gamecontroller, SDL_SensorType type); 350 alias pSDL_GameControllerGetSensorData = int function(SDL_GameController* gamecontroller, SDL_SensorType type, float* data, int num_values); 351 alias pSDL_GameControllerRumbleTriggers = int function(SDL_GameController* gamecontroller, ushort left_rumble, ushort right_rumble, uint duration_ms); 352 alias pSDL_GameControllerHasLED = SDL_bool function(SDL_GameController* gamecontroller); 353 alias pSDL_GameControllerSetLED = int function(SDL_GameController* gamecontroller, ubyte red, ubyte green, ubyte blue); 354 } 355 __gshared { 356 pSDL_GameControllerHasAxis SDL_GameControllerHasAxis; 357 pSDL_GameControllerHasButton SDL_GameControllerHasButton; 358 pSDL_GameControllerGetNumTouchpads SDL_GameControllerGetNumTouchpads; 359 pSDL_GameControllerGetNumTouchpadFingers SDL_GameControllerGetNumTouchpadFingers; 360 pSDL_GameControllerGetTouchpadFinger SDL_GameControllerGetTouchpadFinger; 361 pSDL_GameControllerHasSensor SDL_GameControllerHasSensor; 362 pSDL_GameControllerSetSensorEnabled SDL_GameControllerSetSensorEnabled; 363 pSDL_GameControllerIsSensorEnabled SDL_GameControllerIsSensorEnabled; 364 pSDL_GameControllerGetSensorData SDL_GameControllerGetSensorData; 365 pSDL_GameControllerRumbleTriggers SDL_GameControllerRumbleTriggers; 366 pSDL_GameControllerHasLED SDL_GameControllerHasLED; 367 pSDL_GameControllerSetLED SDL_GameControllerSetLED; 368 } 369 } 370 static if(sdlSupport >= SDLSupport.sdl2016) { 371 extern(C) @nogc nothrow { 372 alias pSDL_GameControllerSendEffect = int function(SDL_GameController* gamecontroller, const(void)* data, int size); 373 alias pSDL_GameControllerGetSensorDataRate = int function(SDL_GameController* gamecontroller, SDL_SensorType type); 374 } 375 __gshared { 376 pSDL_GameControllerSendEffect SDL_GameControllerSendEffect; 377 pSDL_GameControllerGetSensorDataRate SDL_GameControllerGetSensorDataRate; 378 } 379 } 380 static if(sdlSupport >= SDLSupport.sdl2018){ 381 extern(C) @nogc nothrow { 382 alias pSDL_GameControllerHasRumble = SDL_bool function(SDL_GameController* gamecontroller); 383 alias pSDL_GameControllerHasRumbleTriggers = SDL_bool function(SDL_GameController* gamecontroller); 384 alias pSDL_GameControllerGetAppleSFSymbolsNameForButton = const(char)* function(SDL_GameController* gamecontroller, SDL_GameControllerButton button); 385 alias pSDL_GameControllerGetAppleSFSymbolsNameForAxis = const(char)* function(SDL_GameController* gamecontroller, SDL_GameControllerAxis axis); 386 } 387 __gshared { 388 pSDL_GameControllerHasRumble SDL_GameControllerHasRumble; 389 pSDL_GameControllerHasRumbleTriggers SDL_GameControllerHasRumbleTriggers; 390 pSDL_GameControllerGetAppleSFSymbolsNameForButton SDL_GameControllerGetAppleSFSymbolsNameForButton; 391 pSDL_GameControllerGetAppleSFSymbolsNameForAxis SDL_GameControllerGetAppleSFSymbolsNameForAxis; 392 } 393 } 394 }