From 8e6d546b97a735687b54a5daa9368062487a894d Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Tue, 31 Aug 2021 10:18:13 +0200 Subject: [PATCH] Start to work on support for various controllers --- source/director.cpp | 4 ++-- source/input.cpp | 22 +++++++++++++--------- source/input.h | 4 ++-- source/text.cpp | 1 + 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/source/director.cpp b/source/director.cpp index d1966b5..c233d48 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -40,7 +40,7 @@ Director::Director(std::string path) } // Crea los objetos - mInput = new Input(mFileList[52]); + mInput = new Input(mFileList[53]); //mInput2 = new Input(mOptions->input[1]); //mInput[0] = new Input(INPUT_USE_KEYBOARD); //mInput[1] = new Input(INPUT_USE_GAMECONTROLLER); @@ -272,7 +272,7 @@ void Director::setFileList() mFileList[51] = mExecutablePath + "/" + "../media/lang/ba_BA.txt"; // DATA - mFileList[52] = mExecutablePath + "/" + "../data/gamecontrollerdb.txt"; + mFileList[53] = mExecutablePath + "/" + "../data/gamecontrollerdb.txt"; } // Comprueba los ficheros del vector de ficheros que coinciden con una ruta dada diff --git a/source/input.cpp b/source/input.cpp index 12010ce..a5da873 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -26,7 +26,9 @@ Input::~Input() { //SDL_GameControllerClose(mGameController); //if (mGameController) - mGameController = nullptr; + //mGameController = nullptr; + for (int i = 0; i < mNumGamepads; i++) + mConnectedControllers[i] = nullptr; } // Asigna uno de los posibles inputs a una tecla del teclado @@ -42,7 +44,7 @@ void Input::bindGameControllerButton(Uint8 input, SDL_GameControllerButton butto } // Comprueba si un input esta activo -bool Input::checkInput(Uint8 input, bool repeat, int device) +bool Input::checkInput(Uint8 input, bool repeat, int device, int index) { bool successKeyboard = false; bool successGameController = false; @@ -92,7 +94,7 @@ bool Input::checkInput(Uint8 input, bool repeat, int device) { if (repeat) { - if (SDL_GameControllerGetButton(mGameController, mGameControllerBindings[input].button) != 0) + if (SDL_GameControllerGetButton(mConnectedControllers[index], mGameControllerBindings[input].button) != 0) successGameController = true; else successGameController = false; @@ -101,7 +103,7 @@ bool Input::checkInput(Uint8 input, bool repeat, int device) { if (!mGameControllerBindings[input].active) { - if (SDL_GameControllerGetButton(mGameController, mGameControllerBindings[input].button) != 0) + if (SDL_GameControllerGetButton(mConnectedControllers[index], mGameControllerBindings[input].button) != 0) { mGameControllerBindings[input].active = true; successGameController = true; @@ -113,7 +115,7 @@ bool Input::checkInput(Uint8 input, bool repeat, int device) } else { - if (SDL_GameControllerGetButton(mGameController, mGameControllerBindings[input].button) == 0) + if (SDL_GameControllerGetButton(mConnectedControllers[index], mGameControllerBindings[input].button) == 0) { mGameControllerBindings[input].active = false; successGameController = false; @@ -137,8 +139,8 @@ bool Input::discoverGameController() if (SDL_WasInit(SDL_INIT_GAMECONTROLLER) != 1) SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER); - if (SDL_GameControllerAddMappingsFromFile(mDBpath.c_str())<0) - printf("Error, could not load %s file: %s\n", mDBpath.c_str(), SDL_GetError()); + if (SDL_GameControllerAddMappingsFromFile(mDBpath.c_str()) < 0) + printf("Error, could not load %s file: %s\n", mDBpath.c_str(), SDL_GetError()); int nJoysticks = SDL_NumJoysticks(); mNumGamepads = 0; @@ -162,16 +164,18 @@ bool Input::discoverGameController() if (SDL_GameControllerGetAttached(pad) == 1) { mConnectedControllers.push_back(pad); + std::string separator(" #"); std::string name = SDL_GameControllerNameForIndex(i); - std::cout << SDL_GameControllerNameForIndex(i) << std::endl; name.resize(25); + name = name + separator + std::to_string(i); + std::cout << name << std::endl; mControllerNames.push_back(name); } else std::cout << "SDL_GetError() = " << SDL_GetError() << std::endl; } - mGameController = mConnectedControllers[0]; + //mGameController = mConnectedControllers[0]; SDL_GameControllerEventState(SDL_ENABLE); } diff --git a/source/input.h b/source/input.h index bf7a3ff..1531512 100644 --- a/source/input.h +++ b/source/input.h @@ -49,7 +49,7 @@ private: }; GameControllerBindings_t mGameControllerBindings[17]; // Vector con las teclas asociadas a los inputs predefinidos - SDL_GameController *mGameController; // Manejador para el mando + //SDL_GameController *mGameController; // Manejador para el mando std::vector mConnectedControllers; std::vector mControllerNames; int mNumGamepads; @@ -72,7 +72,7 @@ public: void bindGameControllerButton(Uint8 input, SDL_GameControllerButton button); // Comprueba si un input esta activo - bool checkInput(Uint8 input, bool repeat, int device=INPUT_USE_ANY); + bool checkInput(Uint8 input, bool repeat, int device=INPUT_USE_ANY, int index=0); // Comprueba si hay algun mando conectado bool gameControllerFound(); diff --git a/source/text.cpp b/source/text.cpp index 936d2cf..2c847a1 100644 --- a/source/text.cpp +++ b/source/text.cpp @@ -143,6 +143,7 @@ void Text::initOffsetFromFile() if (rfile.is_open() && rfile.good()) { std::string buffer; + printf("Reading %s file\n", mFile.c_str()); // Lee los dos primeros valores del fichero std::getline(rfile, buffer);