diff --git a/source/common/animatedsprite.cpp b/source/common/animatedsprite.cpp index d53889e..6501bd3 100644 --- a/source/common/animatedsprite.cpp +++ b/source/common/animatedsprite.cpp @@ -256,7 +256,7 @@ void AnimatedSprite::animate() } } -// Obtiene el numero de frames de la animación actual +// Obtiene el número de frames de la animación actual int AnimatedSprite::getNumFrames() { return (int)animation[currentAnimation].frames.size(); diff --git a/source/common/animatedsprite.h b/source/common/animatedsprite.h index 39f6f90..6ffc9de 100644 --- a/source/common/animatedsprite.h +++ b/source/common/animatedsprite.h @@ -49,7 +49,7 @@ public: // Calcula el frame correspondiente a la animación actual void animate(); - // Obtiene el numero de frames de la animación actual + // Obtiene el número de frames de la animación actual int getNumFrames(); // Establece el frame actual de la animación diff --git a/source/common/input.cpp b/source/common/input.cpp index 296fee1..138a6f5 100644 --- a/source/common/input.cpp +++ b/source/common/input.cpp @@ -246,12 +246,15 @@ bool Input::discoverGameController() } } - const int nJoysticks = SDL_NumJoysticks(); + numJoysticks = SDL_NumJoysticks(); numGamepads = 0; - // Cuenta el numero de mandos - for (int i = 0; i < nJoysticks; ++i) + // Cuenta el número de mandos + joysticks.clear(); + for (int i = 0; i < numJoysticks; ++i) { + SDL_Joystick *joy = SDL_JoystickOpen(i); + joysticks.push_back(joy); if (SDL_IsGameController(i)) { numGamepads++; @@ -261,7 +264,7 @@ bool Input::discoverGameController() if (verbose) { std::cout << "\nChecking for game controllers...\n"; - std::cout << nJoysticks << " joysticks found, " << numGamepads << " are gamepads\n"; + std::cout << numJoysticks << " joysticks found, " << numGamepads << " are gamepads\n"; } if (numGamepads > 0) @@ -326,7 +329,7 @@ std::string Input::getControllerName(int index) } } -// Obten el numero de mandos conectados +// Obten el número de mandos conectados int Input::getNumControllers() { return numGamepads; @@ -350,4 +353,13 @@ void Input::enable() { enabled = true; disabledUntil = d_notDisabled; +} + +// Obtiene el indice del controlador a partir de un event.id +int Input::getJoyIndex(int id) +{ + for (int i = 0; i < numJoysticks; ++i) + if (SDL_JoystickInstanceID(joysticks[i]) == id) + return i; + return -1; } \ No newline at end of file diff --git a/source/common/input.h b/source/common/input.h index 5a1d712..2d90757 100644 --- a/source/common/input.h +++ b/source/common/input.h @@ -76,12 +76,14 @@ private: // Variables std::vector connectedControllers; // Vector con todos los mandos conectados + std::vector joysticks; // Vector con todos los joysticks conectados std::vector keyBindings; // Vector con las teclas asociadas a los inputs predefinidos std::vector gameControllerBindings; // Vector con las teclas asociadas a los inputs predefinidos std::vector controllerNames; // Vector con los nombres de los mandos std::vector gameInputs; // Inputs usados para jugar, normalmente direcciones y botones std::vector buttonInputs; // Inputs asignados al jugador y a botones, excluyendo direcciones - int numGamepads; // Numero de mandos conectados + int numJoysticks; // Número de joysticks conectados + int numGamepads; // Número de mandos conectados std::string dbPath; // Ruta al archivo gamecontrollerdb.txt bool verbose; // Indica si ha de mostrar mensajes i_disable_e disabledUntil; // Tiempo que esta deshabilitado @@ -115,7 +117,7 @@ public: // Comprueba si hay algun mando conectado bool gameControllerFound(); - // Obten el numero de mandos conectados + // Obten el número de mandos conectados int getNumControllers(); // Obten el nombre de un mando de juego @@ -129,6 +131,9 @@ public: // Hablita las entradas void enable(); + + // Obtiene el indice del controlador a partir de un event.id + int getJoyIndex(int id); }; #endif diff --git a/source/common/menu.h b/source/common/menu.h index 358652d..b83dd17 100644 --- a/source/common/menu.h +++ b/source/common/menu.h @@ -62,7 +62,7 @@ private: bool resizing; // Indica si el selector está cambiando de tamaño float y; // Coordenada actual, usado para el desplazamiento float h; // Altura actual, usado para el cambio de tamaño - int numJumps; // Numero de pasos preestablecido para llegar al destino + int numJumps; // Número de pasos preestablecido para llegar al destino int index; // Elemento del menu que tiene el foco int previousIndex; // Elemento que tenia el foco previamente color_t previousItemColor; // Color del item nque tenia el foco previamente diff --git a/source/define_buttons.cpp b/source/define_buttons.cpp index 0296ded..d6942a0 100644 --- a/source/define_buttons.cpp +++ b/source/define_buttons.cpp @@ -40,10 +40,15 @@ DefineButtons::DefineButtons(SDL_Renderer *renderer, Input *input, Text *text, p button.button = SDL_CONTROLLER_BUTTON_START; buttons.push_back(button); - button.label = "QUIT"; + button.label = "SALIR DEL JUEGO"; button.input = input_exit; button.button = SDL_CONTROLLER_BUTTON_BACK; buttons.push_back(button); + + for (int i = 0; i < input->getNumControllers(); ++i) + { + controllerNames.push_back(input->getControllerName(i)); + } } // Destructor @@ -64,16 +69,21 @@ void DefineButtons::render() { if (enabled) { - text->writeCentered(x, y - 10, "PLAYER " + std::to_string(indexController + 1)); + text->writeCentered(x, y - 20, "PLAYER " + std::to_string(indexController + 1)); + text->writeCentered(x, y - 10, controllerNames[indexController]); text->writeCentered(x, y, buttons[indexButton].label); } } -int getJoyIndex(int id); - void DefineButtons::doJoystickButtonDown(SDL_JoyButtonEvent *event) { - //int i = getJoyIndex(event->which); + int i = input->getJoyIndex(event->which); + + // Solo pillamos botones del mando que toca + if (i != indexController) + { + return; + } buttons[indexButton].button = (SDL_GameControllerButton)event->button; incIndexButton(); @@ -91,57 +101,6 @@ void DefineButtons::checkInput() { if (event.type == SDL_JOYBUTTONDOWN) doJoystickButtonDown(&event.jbutton); - - /*if (eventHandler->type == SDL_JOYBUTTONDOWN) - { - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_A) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_A; - incIndexButton(); - } - - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_B) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_B; - incIndexButton(); - } - - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_X) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_X; - incIndexButton(); - } - - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_Y) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_Y; - incIndexButton(); - } - - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_BACK) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_BACK; - incIndexButton(); - } - - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_START) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_START; - incIndexButton(); - } - - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_LEFTSHOULDER) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_LEFTSHOULDER; - incIndexButton(); - } - - if (eventHandler->jbutton.button == SDL_CONTROLLER_BUTTON_RIGHTSHOULDER) - { - buttons[indexButton].button = SDL_CONTROLLER_BUTTON_RIGHTSHOULDER; - incIndexButton(); - } - }*/ } } } diff --git a/source/define_buttons.h b/source/define_buttons.h index 838f9cb..1844c73 100644 --- a/source/define_buttons.h +++ b/source/define_buttons.h @@ -19,19 +19,20 @@ class DefineButtons { private: // Objetos - SDL_Renderer *renderer; // El renderizador de la ventana - Input *input; // Objeto pata gestionar la entrada - Text *text; // Objeto para escribir texto + SDL_Renderer *renderer; // El renderizador de la ventana + Input *input; // Objeto pata gestionar la entrada + Text *text; // Objeto para escribir texto // Variables - options_t *options; // Variable con todas las variables de las opciones del programa - param_t *param; // Puntero con todos los parametros del programa - bool enabled; // Indica si el objeto está habilitado - int x; // Posición donde dibujar el texto - int y; // Posición donde dibujar el texto - std::vector buttons; // Vector con las nuevas definiciones de botones/acciones - int indexController; // Indice del controlador a reasignar - int indexButton; // Indice para saber qué bot´çon se está definiendo + options_t *options; // Variable con todas las variables de las opciones del programa + param_t *param; // Puntero con todos los parametros del programa + bool enabled; // Indica si el objeto está habilitado + int x; // Posición donde dibujar el texto + int y; // Posición donde dibujar el texto + std::vector buttons; // Vector con las nuevas definiciones de botones/acciones + int indexController; // Indice del controlador a reasignar + int indexButton; // Indice para saber qué bot´çon se está definiendo + std::vector controllerNames; // Nombres de los mandos // Incrementa el indice de los botones void incIndexButton(); diff --git a/source/game.cpp b/source/game.cpp index 1cfd594..6f2efc8 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -1988,7 +1988,7 @@ void Game::startAllBalloons() } } -// Obtiene el numero de globos activos +// Obtiene el número de globos activos Uint8 Game::countBalloons() { Uint8 num = 0; @@ -2977,7 +2977,7 @@ void Game::renderMessages() } if (!gameCompleted) - { // Escribe el numero de fases restantes + { // Escribe el número de fases restantes textNokiaBig2->writeDX(TXT_CENTER, PLAY_AREA_CENTER_X, stageBitmapPath[stageBitmapCounter], text, -2, noColor, 2, shdwTxtColor); } else diff --git a/source/game.h b/source/game.h index 2f85cfb..64b91a5 100644 --- a/source/game.h +++ b/source/game.h @@ -81,7 +81,7 @@ private: Uint16 powerToComplete; // Cantidad de poder que se necesita para completar la fase Uint8 maxMenace; // Umbral máximo de amenaza de la fase Uint8 minMenace; // Umbral mínimo de amenaza de la fase - Uint8 number; // Numero de fase + Uint8 number; // Número de fase }; struct helper_t @@ -185,7 +185,7 @@ private: float getReadyBitmapPath[STAGE_COUNTER]; // Vector con los puntos X por donde se desplaza el texto Uint16 deathCounter; // Contador para la animación de muerte del jugador Uint8 menaceCurrent; // Nivel de amenaza actual - Uint8 menaceThreshold; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el numero de globos + Uint8 menaceThreshold; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el número de globos bool timeStopped; // Indica si el tiempo está detenido Uint16 timeStoppedCounter; // Temporizador para llevar la cuenta del tiempo detenido Uint32 counter; // Contador para el juego @@ -208,7 +208,7 @@ private: param_t *param; // Puntero con todos los parametros del programa enemyFormation_t enemyFormation[NUMBER_OF_ENEMY_FORMATIONS]; // Vector con todas las formaciones enemigas enemyPool_t enemyPool[10]; // Variable con los diferentes conjuntos de formaciones enemigas - Uint8 lastStageReached; // Contiene el numero de la última pantalla que se ha alcanzado + Uint8 lastStageReached; // Contiene el número de la última pantalla que se ha alcanzado demo_t demo; // Variable con todas las variables relacionadas con el modo demo int totalPowerToCompleteGame; // La suma del poder necesario para completar todas las fases bool paused; // Indica si el juego está pausado (no se deberia de poder utilizar en el modo arcade) @@ -316,7 +316,7 @@ private: // Pone en marcha todos los globos void startAllBalloons(); - // Obtiene el numero de globos activos + // Obtiene el número de globos activos Uint8 countBalloons(); // Vacia el vector de globos diff --git a/source/main.cpp b/source/main.cpp index 73fa15e..5b1d7b5 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -26,7 +26,7 @@ objetos bala. Se encarga de comprobar las entradas de teclado o gamepad para cerrar la aplicacion, saltar al estado de pausa y para mover al jugador. Recorre el vector de globos y de balas y si tienen algun tipo asignado las gestiona. Comprueba las colisiones entre los globos y el jugador y entre las balas y los -globos. Tiene ademas un nivel de amenaza que calcula en funcion del numero de globos +globos. Tiene ademas un nivel de amenaza que calcula en funcion del número de globos en pantalla y que se va incrementando conforme aumenta la puntuación del jugador. Los objetos globo tienen varios contadores para alternar de un estado a otro. diff --git a/source/player.cpp b/source/player.cpp index b93dc44..cce86ac 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -544,7 +544,7 @@ void Player::disableInput() input = false; } -// Devuelve el numero de cafes actuales +// Devuelve el número de cafes actuales Uint8 Player::getCoffees() { return coffees; diff --git a/source/player.h b/source/player.h index ea456b3..00c7095 100644 --- a/source/player.h +++ b/source/player.h @@ -202,7 +202,7 @@ public: // Deshabilita la entrada de ordenes void disableInput(); - // Devuelve el numero de cafes actuales + // Devuelve el número de cafes actuales Uint8 getCoffees(); // Obtiene el circulo de colisión diff --git a/source/scoreboard.h b/source/scoreboard.h index 235dc97..c6c86ed 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -28,7 +28,7 @@ private: // Variables struct options_t *options; // Variable con todas las variables de las opciones del programa - int stage; // Numero de fase actual + int stage; // Número de fase actual int score1; // Puntuación del jugador 1 int score2; // Puntuación del jugador 2 float mult1; // Multiplicador del jugador 1