diff --git a/source/director.cpp b/source/director.cpp index 55e1b33..cafaa51 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -16,7 +16,7 @@ Director::Director(int argc, char *argv[]) { // Inicializa variables section = new section_t(); - section->name = SECTION_PROG_LOGO; + section->name = SECTION_PROG_TITLE; // Comprueba los parametros del programa checkProgramArguments(argc, argv); @@ -758,8 +758,8 @@ void Director::runTitle() // Ejecuta la seccion de juego donde se juega void Director::runGame() { - const int numPlayers = section->subsection == SUBSECTION_GAME_PLAY_1P ? 1 : 2; - game = new Game(numPlayers, 0, renderer, screen, asset, lang, input, false, param, options, section, getMusic(musics, "playing.ogg")); + const int playerID = section->subsection == SUBSECTION_GAME_PLAY_1P ? 0 : 1; + game = new Game(playerID, 0, renderer, screen, asset, lang, input, false, param, options, section, getMusic(musics, "playing.ogg")); game->run(); delete game; } diff --git a/source/game.cpp b/source/game.cpp index c0f2830..4e1a2d0 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -162,7 +162,10 @@ void Game::init(int playerID) // Elimina qualquier jugador que hubiese antes de crear los nuevos for (auto player : players) { - delete player; + if (player) + { + delete player; + } }; players.clear(); @@ -173,7 +176,7 @@ void Game::init(int playerID) Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures[1], playerAnimations); players.push_back(player2); - numPlayers = 2; + players[playerID]->enable(true); // Variables relacionadas con la dificultad switch (difficulty) @@ -1606,7 +1609,7 @@ void Game::updateDeath() bool allPlayersAreDead = true; for (auto player : players) { - allPlayersAreDead &= (!player->isAlive()); + allPlayersAreDead &= (!player->isAlive() || !player->isEnabled()); } if (allPlayersAreDead) diff --git a/source/game.h b/source/game.h index 8bc43b0..be58295 100644 --- a/source/game.h +++ b/source/game.h @@ -174,7 +174,6 @@ private: JA_Music_t *music; // Musica de fondo // Variables - int numPlayers; // Numero de jugadores Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 hiScore; // Puntuación máxima diff --git a/source/player.cpp b/source/player.cpp index f26ee75..be363ed 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -19,6 +19,8 @@ Player::Player(float x, int y, SDL_Renderer *renderer, std::vector te defaultPosX = posX = x; defaultPosY = posY = y; + // Inicializa variables + enabled = false; init(); } @@ -135,7 +137,7 @@ void Player::move() // Si el jugador abandona el area de juego por los laterales if ((posX < PLAY_AREA_LEFT - 5) || (posX + width > PLAY_AREA_RIGHT + 5)) - { + { // Restaura su posición posX -= velX; } @@ -159,7 +161,7 @@ void Player::move() // Si el cadaver abandona el area de juego por los laterales if ((deathSprite->getPosX() < PLAY_AREA_LEFT) || (deathSprite->getPosX() + width > PLAY_AREA_RIGHT)) - { + { // Restaura su posición const float vx = deathSprite->getVelX(); deathSprite->setPosX(deathSprite->getPosX() - vx); @@ -173,6 +175,11 @@ void Player::move() // Pinta el jugador en pantalla void Player::render() { + if (!enabled) + { + return; + } + if (isAlive()) { if (invulnerable) @@ -248,7 +255,7 @@ void Player::setAnimation() legsSprite->setCurrentAnimation(aWalking); legsSprite->setFlip(flipWalk); if (statusFiring == PLAYER_STATUS_FIRING_NO) - { + { // No esta disparando bodySprite->setCurrentAnimation(aWalking + aBodyCoffees + aPowerUp); bodySprite->setFlip(flipWalk); @@ -256,7 +263,7 @@ void Player::setAnimation() headSprite->setFlip(flipWalk); } else - { + { // Está disparando bodySprite->setCurrentAnimation(aFiring + aBodyCoffees + aPowerUp); bodySprite->setFlip(flipFire); @@ -330,6 +337,11 @@ void Player::updateCooldown() // Actualiza al jugador a su posicion, animación y controla los contadores void Player::update() { + if (!enabled) + { + return; + } + move(); setAnimation(); shiftColliders(); @@ -602,4 +614,16 @@ void Player::setPlayerTextures(std::vector texture) legsSprite->setTexture(texture[2]); deathSprite->setTexture(texture[3]); fireSprite->setTexture(texture[4]); +} + +// Activa o descativa el jugador +void Player::enable(bool value) +{ + enabled = value; +} + +// Obtiene el valor de la variable +bool Player::isEnabled() +{ + return enabled; } \ No newline at end of file diff --git a/source/player.h b/source/player.h index e33d019..ea456b3 100644 --- a/source/player.h +++ b/source/player.h @@ -67,6 +67,7 @@ private: bool input; // Indica si puede recibir ordenes de entrada circle_t collider; // Circulo de colisión del jugador bool alive; // Indica si el jugador está vivo + bool enabled; // Indica si el jugador está activo // Actualiza el circulo de colisión a la posición del jugador void shiftColliders(); @@ -209,6 +210,12 @@ public: // Obtiene el puntero a la textura con los gráficos de la animación de morir Texture *getDeadTexture(); + + // Activa o descativa el jugador + void enable(bool value); + + // Obtiene el valor de la variable + bool isEnabled(); }; #endif diff --git a/source/title.cpp b/source/title.cpp index 23be7f1..9287507 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -94,13 +94,13 @@ void Title::update() { switch (postFade) { - case 0: // 1 PLAYER + case 1: // 1 PLAYER section->name = SECTION_PROG_GAME; section->subsection = SUBSECTION_GAME_PLAY_1P; JA_StopMusic(); break; - case 1: // 2 PLAYER + case 2: // 2 PLAYER section->name = SECTION_PROG_GAME; section->subsection = SUBSECTION_GAME_PLAY_2P; JA_StopMusic(); @@ -216,33 +216,35 @@ void Title::checkEvents() // Comprueba las entradas void Title::checkInput() { - // Comprueba todos los controladores + // Comprueba todos los controladores para salir for (int i = 0; i < numControllers; ++i) { if (input->checkInput(input_exit, REPEAT_FALSE, options->game.input[i].deviceType, options->game.input[i].id)) { section->name = SECTION_PROG_QUIT; } - - else if (input->checkInput(input_accept, REPEAT_FALSE, options->game.input[i].deviceType, options->game.input[i].id)) - { - fade->activate(); - postFade = i; - } } - // Comprueba el teclado + // Comprueba el teclado para salir if (input->checkInput(input_exit, REPEAT_FALSE)) { section->name = SECTION_PROG_QUIT; } - else if (input->checkInput(input_accept, REPEAT_FALSE)) + // Comprueba si se ha pulsado algún botón para empezar a jugar + const int index = input->checkAnyButtonPressed(); + if (index) { fade->activate(); - postFade = 0; + postFade = index; } + //else if (input->checkInput(input_start, REPEAT_FALSE)) + //{ + // fade->activate(); + // postFade = 0; + //} + // Comprueba el input para el resto de objetos screen->checkInput(); }