From 1506b3b8fb65598dbabc98c9d2dd70e00f82ccee Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Tue, 15 Jul 2014 02:01:43 -0300 Subject: [PATCH] iOS now respects SDL_HINT_ACCELEROMETER_AS_JOYSTICK. --- include/SDL_hints.h | 5 +++-- src/joystick/iphoneos/SDL_sysjoystick.m | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/include/SDL_hints.h b/include/SDL_hints.h index e0fce669fdb91..1c46515ed9385 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -261,8 +261,9 @@ extern "C" { #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" /** - * \brief A variable controlling whether an Android built-in accelerometer should be - * listed as a joystick device, rather than listing actual joysticks only. + * \brief A variable controlling whether the Android / iOS built-in + * accelerometer should be listed as a joystick device, rather than listing + * actual joysticks only. * * This variable can be set to the following values: * "0" - List only real joysticks and accept input from them diff --git a/src/joystick/iphoneos/SDL_sysjoystick.m b/src/joystick/iphoneos/SDL_sysjoystick.m index a4027599e755d..1f37af413319d 100644 --- a/src/joystick/iphoneos/SDL_sysjoystick.m +++ b/src/joystick/iphoneos/SDL_sysjoystick.m @@ -23,6 +23,7 @@ /* This is the iOS implementation of the SDL joystick API */ #include "SDL_joystick.h" +#include "SDL_hints.h" #include "SDL_stdinc.h" #include "../SDL_sysjoystick.h" #include "../SDL_joystick_c.h" @@ -32,9 +33,10 @@ /* needed for SDL_IPHONE_MAX_GFORCE macro */ #import "SDL_config_iphoneos.h" -const char *accelerometerName = "iOS accelerometer"; +const char *accelerometerName = "iOS Accelerometer"; static CMMotionManager *motionManager = nil; +static int numjoysticks = 0; /* Function to scan the system for joysticks. * This function should set SDL_numjoysticks to the number of available @@ -44,12 +46,18 @@ int SDL_SYS_JoystickInit(void) { - return (1); + const char *hint = SDL_GetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK); + if (!hint || SDL_atoi(hint)) { + /* Default behavior, accelerometer as joystick */ + numjoysticks++; + } + + return numjoysticks; } int SDL_SYS_NumJoysticks() { - return 1; + return numjoysticks; } void SDL_SYS_JoystickDetect() @@ -165,6 +173,8 @@ static void SDL_SYS_AccelerometerUpdate(SDL_Joystick * joystick) [motionManager release]; motionManager = nil; } + + numjoysticks = 0; } SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index )