diff --git a/source/director.cpp b/source/director.cpp index 5d0e1a0..fa8c229 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -133,20 +133,6 @@ bool Director::initSDL() } else { - if (SDL_WasInit(SDL_INIT_GAMECONTROLLER) != 1) - SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER); - - int nJoysticks = SDL_NumJoysticks(); - int numGamepads = 0; - - // Count how many controllers there are - for (int i = 0; i < nJoysticks; i++) - if (SDL_IsGameController(i)) - numGamepads++; - - printf("%i nJoysticks, %i numGamepads\n", nJoysticks, numGamepads); - //SDL_JoystickEventState(SDL_ENABLE); - // Establece el filtro de la textura a nearest if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0")) { diff --git a/source/input.cpp b/source/input.cpp index 7ecb61a..0cd04a0 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -15,17 +15,43 @@ Input::Input(int source) mGameControllerBindings[i].active = false; } - mGameControllerFound = false; + mSource = source; + + if (mSource == USE_GAMECONTROLLER) + { + /* + if (SDL_WasInit(SDL_INIT_GAMECONTROLLER) != 1) + SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER); + + int nJoysticks = SDL_NumJoysticks(); + int numGamepads = 0; + + // Count how many controllers there are + for (int i = 0; i < nJoysticks; i++) + if (SDL_IsGameController(i)) + numGamepads++; + + printf("%i joysticks found, %i are gamepads\n", nJoysticks, numGamepads); + //SDL_JoystickEventState(SDL_ENABLE); + */ + if (!discoverGameController()) + mSource = USE_KEYBOARD; + } // Comprueba si hay algún mando conectado //discoverGameController(); // En caso de haber un mando, el objeto se puede utilizar con entradas de mando - if (mGameControllerFound) - mSource = source; + //if (mGameControllerFound) + // mSource = source; // Si no hay un mando, el objeto se configura como teclado + //else + // mSource = USE_KEYBOARD; + + if (mSource == USE_KEYBOARD) + printf("Input using KEYBOARD\n"); else - mSource = USE_KEYBOARD; + printf("Input using GAMECONTROLLER\n"); } // Destructor @@ -188,27 +214,64 @@ bool Input::checkInput(Uint8 input, bool repeat) // Comprueba si hay un mando conectado bool Input::discoverGameController() { - - printf("%i joystics found", SDL_NumJoysticks()); + bool found = false; + /* + printf("%i joystics found\n", SDL_NumJoysticks()); for (int i = 0; i < SDL_NumJoysticks(); ++i) { if (SDL_IsGameController(i)) { char *mapping; - printf("Index \'%i\' is a compatible controller, named \'%s\'", i, SDL_GameControllerNameForIndex(i)); + printf("Index %i is a compatible controller, named %s\n", i, SDL_GameControllerNameForIndex(i)); mGameController = SDL_GameControllerOpen(i); mapping = SDL_GameControllerMapping(mGameController); - printf("Controller %i is mapped as \"%s\".", i, mapping); + printf("Controller %i is mapped as %s\n", i, mapping); SDL_free(mapping); - mGameControllerFound = true; + found = true; } else { - printf("Index \'%i\' is not a compatible controller.", i); - mGameControllerFound = false; + printf("Index %i is not a compatible controller.\n", i); + found = false; } } - return mGameController; + */ + + if (SDL_WasInit(SDL_INIT_GAMECONTROLLER) != 1) + SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER); + + int nJoysticks = SDL_NumJoysticks(); + int numGamepads = 0; + + // Count how many controllers there are + for (int i = 0; i < nJoysticks; i++) + if (SDL_IsGameController(i)) + numGamepads++; + + printf("%i joysticks found, %i are gamepads\n", nJoysticks, numGamepads); + + //if (numGamepads > 0) + // found = true; + //SDL_JoystickEventState(SDL_ENABLE); + + if (numGamepads > 0) + { + for (int i = 0; i < numGamepads; i++) + { + // Open the controller and add it to our list + mGameController = SDL_GameControllerOpen(i); + if (SDL_GameControllerGetAttached(mGameController) == 1) + //connectedControllers.push_back(pad); + found = true; + else + std::cout << "SDL_GetError() = " << SDL_GetError() << std::endl; + } + SDL_GameControllerEventState(SDL_ENABLE); + } + + //SDL_GameControllerGetButton(mGameController, SDL_CONTROLLER_BUTTON_A); + //printf("hola"); + return found; } /*if (SDL_NumJoysticks() < 1) { diff --git a/source/input.h b/source/input.h index 3b87cc6..822680e 100644 --- a/source/input.h +++ b/source/input.h @@ -46,7 +46,7 @@ private: SDL_GameController *mGameController; // Manejador para el mando //SDL_Haptic *mControllerHaptic; // Manejador para el mando con vibración - bool mGameControllerFound; // Variable para saber si hay un mando conectado + //bool mGameControllerFound; // Variable para saber si hay un mando conectado int mSource; // Indica si el objeto usará un mando o un teclado