diff --git a/source/director.cpp b/source/director.cpp index c233d48..e7624dd 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -33,17 +33,14 @@ Director::Director(std::string path) mOptions->windowSize = 3; mOptions->language = en_UK; mOptions->difficulty = DIFFICULTY_NORMAL; - mOptions->input[0] = INPUT_USE_KEYBOARD; - mOptions->input[1] = INPUT_USE_GAMECONTROLLER; + mOptions->input[0].deviceType = INPUT_USE_KEYBOARD; + mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER; mOptions->filter = FILTER_NEAREST; mOptions->vSync = true; } // Crea los objetos 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); // Inicializa SDL initSDL(); @@ -346,8 +343,8 @@ bool Director::loadConfigFile() mOptions->windowSize = 3; mOptions->language = en_UK; mOptions->difficulty = DIFFICULTY_NORMAL; - mOptions->input[0] = INPUT_USE_KEYBOARD; - mOptions->input[1] = INPUT_USE_GAMECONTROLLER; + mOptions->input[0].deviceType = INPUT_USE_KEYBOARD; + mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER; mOptions->filter = FILTER_NEAREST; mOptions->vSync = true; diff --git a/source/director.h b/source/director.h index 53de0a9..0d23e60 100644 --- a/source/director.h +++ b/source/director.h @@ -20,7 +20,7 @@ #include "game.h" #include "input.h" #include "fade.h" -#include +//#include #ifndef DIRECTOR_H #define DIRECTOR_H diff --git a/source/game.cpp b/source/game.cpp index ed1f7fb..e4bd8e0 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -13,13 +13,13 @@ Game::Game(int numPlayers, SDL_Renderer *renderer, std::string *filelist, Lang * mLang = lang; mInput = input; mOptions = options; - mOnePlayerControl = mOptions->input[0]; + mOnePlayerControl = mOptions->input[0].deviceType; // Pasa variables mDemo.enabled = demo; mNumPlayers = numPlayers; if (mNumPlayers == 1) - mOptions->input[0] = INPUT_USE_ANY; + mOptions->input[0].deviceType = INPUT_USE_ANY; mDifficulty = mOptions->difficulty; // Crea los objetos @@ -93,7 +93,7 @@ Game::~Game() saveScoreFile(); saveDemoFile(); - mOptions->input[0] = mOnePlayerControl; + mOptions->input[0].deviceType = mOnePlayerControl; mRenderer = nullptr; mFileList = nullptr; @@ -2861,7 +2861,7 @@ void Game::checkGameInput() if (mPlayer[i]->isAlive()) { // Input a la izquierda - if (mInput->checkInput(INPUT_LEFT, REPEAT_TRUE, mOptions->input[i])) + if (mInput->checkInput(INPUT_LEFT, REPEAT_TRUE, mOptions->input[i].deviceType)) { mPlayer[i]->setInput(INPUT_LEFT); mDemo.keys.left = 1; @@ -2869,7 +2869,7 @@ void Game::checkGameInput() else { // Input a la derecha - if (mInput->checkInput(INPUT_RIGHT, REPEAT_TRUE, mOptions->input[i])) + if (mInput->checkInput(INPUT_RIGHT, REPEAT_TRUE, mOptions->input[i].deviceType)) { mPlayer[i]->setInput(INPUT_RIGHT); mDemo.keys.right = 1; @@ -2882,7 +2882,7 @@ void Game::checkGameInput() } } // Comprueba el input de disparar al centro - if (mInput->checkInput(INPUT_BUTTON_2, REPEAT_TRUE, mOptions->input[i])) + if (mInput->checkInput(INPUT_BUTTON_2, REPEAT_TRUE, mOptions->input[i].deviceType)) { if (mPlayer[i]->canFire()) { @@ -2898,7 +2898,7 @@ void Game::checkGameInput() } // Comprueba el input de disparar a la izquierda - if (mInput->checkInput(INPUT_BUTTON_1, REPEAT_TRUE, mOptions->input[i])) + if (mInput->checkInput(INPUT_BUTTON_1, REPEAT_TRUE, mOptions->input[i].deviceType)) { if (mPlayer[i]->canFire()) { @@ -2914,7 +2914,7 @@ void Game::checkGameInput() } // Comprueba el input de disparar a la derecha - if (mInput->checkInput(INPUT_BUTTON_3, REPEAT_TRUE, mOptions->input[i])) + if (mInput->checkInput(INPUT_BUTTON_3, REPEAT_TRUE, mOptions->input[i].deviceType)) { if (mPlayer[i]->canFire()) { @@ -2930,7 +2930,7 @@ void Game::checkGameInput() } // Comprueba el input de pausa - if (mInput->checkInput(INPUT_CANCEL, REPEAT_FALSE, mOptions->input[i])) + if (mInput->checkInput(INPUT_CANCEL, REPEAT_FALSE, mOptions->input[i].deviceType)) { mSection.subsection = GAME_SECTION_PAUSE; diff --git a/source/input.cpp b/source/input.cpp index a5da873..649991d 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -1,7 +1,11 @@ #include "input.h" -//#include #include +// Contestar cuantos joystics ha detectado +// Preguntarlepor los joystics que ha encontrado para ir poniendolos en la variable de opciones + + + // Constructor Input::Input(std::string file) { @@ -24,9 +28,6 @@ Input::Input(std::string file) // Destructor Input::~Input() { - //SDL_GameControllerClose(mGameController); - //if (mGameController) - //mGameController = nullptr; for (int i = 0; i < mNumGamepads; i++) mConnectedControllers[i] = nullptr; } @@ -49,6 +50,9 @@ bool Input::checkInput(Uint8 input, bool repeat, int device, int index) bool successKeyboard = false; bool successGameController = false; + if (device == INPUT_USE_ANY) + index = 0; + if ((device == INPUT_USE_KEYBOARD) || (device == INPUT_USE_ANY)) { const Uint8 *mKeystates = SDL_GetKeyboardState(NULL); diff --git a/source/title.cpp b/source/title.cpp index 2c1e722..27d3e85 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -138,8 +138,8 @@ void Title::init(bool demo, Uint8 subsection) if (!mInput->gameControllerFound()) { - mOptions->input[0] = INPUT_USE_KEYBOARD; - mOptions->input[1] = INPUT_USE_GAMECONTROLLER; + mOptions->input[0].deviceType = INPUT_USE_KEYBOARD; + mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER; } // Inicializa el bitmap de Coffee @@ -349,7 +349,7 @@ void Title::updateMenuLabels() i++; // PLAYER 1 CONTROLS - OPTIONS - switch (mOptions->input[0]) + switch (mOptions->input[0].deviceType) { case INPUT_USE_KEYBOARD: mMenu.options->setItemCaption(i, mLang->getText(69)); // KEYBOARD @@ -378,7 +378,7 @@ void Title::updateMenuLabels() i++; // PLAYER 2 CONTROLS - OPTIONS - switch (mOptions->input[1]) + switch (mOptions->input[1].deviceType) { case INPUT_USE_KEYBOARD: mMenu.options->setItemCaption(i, mLang->getText(69)); // KEYBOARD @@ -911,14 +911,14 @@ void Title::runDemoGame() void Title::switchInputs(int value) { Uint8 temp; - temp = mOptions->input[0]; - mOptions->input[0] = mOptions->input[1]; - mOptions->input[1] = temp; + temp = mOptions->input[0].deviceType; + mOptions->input[0].deviceType = mOptions->input[1].deviceType; + mOptions->input[1].deviceType = temp; if (!mInput->gameControllerFound()) { - mOptions->input[0] = INPUT_USE_KEYBOARD; - mOptions->input[1] = INPUT_USE_GAMECONTROLLER; + mOptions->input[0].deviceType = INPUT_USE_KEYBOARD; + mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER; } } diff --git a/source/utils.h b/source/utils.h index e979eeb..6d25712 100644 --- a/source/utils.h +++ b/source/utils.h @@ -1,6 +1,7 @@ #pragma once #include "ifdefs.h" #include "ltexture.h" +#include #ifndef UTILS_H #define UTILS_H @@ -39,11 +40,19 @@ struct demoKeys_t Uint8 fireRight; }; +// Estructura para albergar métodos de control +struct input_t +{ + int id; // Identificador en el vector de mandos + std::string name; // Nombre del dispositivo + Uint8 deviceType; // Tipo de dispositivo (teclado o mando) +}; + // Estructura con todas las opciones de configuración del programa struct options_t { Uint8 difficulty; // Dificultad del juego - Uint8 input[2]; // Modo de control (teclado o mando) + input_t input[2]; // Modo de control (teclado o mando) Uint8 language; // Idioma usado en el juego Uint32 fullScreenMode; // Contiene el valor del modo de pantalla completa Uint8 windowSize; // Contiene el valor del tamaño de la ventana