diff --git a/data/gfx/items.png b/data/gfx/items.png deleted file mode 100644 index 601f565..0000000 Binary files a/data/gfx/items.png and /dev/null differ diff --git a/data/gfx/player_arounder_death.png b/data/gfx/player_arounder_death.png index 1562281..3efdcae 100644 Binary files a/data/gfx/player_arounder_death.png and b/data/gfx/player_arounder_death.png differ diff --git a/data/gfx/player_bal1_death.png b/data/gfx/player_bal1_death.png index 140ddc6..c169ba1 100644 Binary files a/data/gfx/player_bal1_death.png and b/data/gfx/player_bal1_death.png differ diff --git a/source/director.cpp b/source/director.cpp index 3693cb0..93c87b1 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -209,7 +209,6 @@ bool Director::setFileList() asset->add("data/gfx/intro.png", t_bitmap); asset->add("data/gfx/logo.png", t_bitmap); - asset->add("data/gfx/items.png", t_bitmap); asset->add("data/gfx/item_points1_disk.png", t_bitmap); asset->add("data/gfx/item_points1_disk.ani", t_data); asset->add("data/gfx/item_points2_gavina.png", t_bitmap); diff --git a/source/game.cpp b/source/game.cpp index 9f4e87c..f188c6e 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -84,9 +84,6 @@ Game::~Game() gameTextTexture->unload(); delete gameTextTexture; - itemTexture->unload(); - delete itemTexture; - // Animaciones for (auto animation : playerAnimations) { @@ -372,7 +369,6 @@ void Game::loadMedia() gamePowerMeterTexture = new LTexture(renderer, asset->get("game_power_meter.png")); gameSkyColorsTexture = new LTexture(renderer, asset->get("game_sky_colors.png")); gameTextTexture = new LTexture(renderer, asset->get("game_text.png")); - itemTexture = new LTexture(renderer, asset->get("items.png")); // Texturas - Globos LTexture *balloon1Texture = new LTexture(renderer, asset->get("balloon1.png")); @@ -1703,82 +1699,24 @@ void Game::updateStage() void Game::updateDeath() { // Comprueba si todos los jugadores estan muertos - bool allAreDead = true; + bool allPlayersAreDead = true; for (auto player : players) { - allAreDead &= (!player->isAlive()); - - /*if (!player->isAlive()) - { - // Animación - if ((player->getDeathCounter() / 5) % 4 == 0) - { - smartSprites[player->deathIndex]->setSpriteClip(24 * 0, 24, 24, 24); - } - else if ((player->getDeathCounter() / 5) % 4 == 1) - { - smartSprites[player->deathIndex]->setSpriteClip(24 * 1, 24, 24, 24); - } - else if ((player->getDeathCounter() / 5) % 4 == 2) - { - smartSprites[player->deathIndex]->setSpriteClip(24 * 2, 24, 24, 24); - } - else if ((player->getDeathCounter() / 5) % 4 == 3) - { - smartSprites[player->deathIndex]->setSpriteClip(24 * 3, 24, 24, 24); - } - - // Rebote en los laterales - if (smartSprites[player->deathIndex]->getVelX() > 0) - { - if (smartSprites[player->deathIndex]->getPosX() > (GAME_WIDTH - smartSprites[player->deathIndex]->getWidth())) - { - smartSprites[player->deathIndex]->setPosX(GAME_WIDTH - smartSprites[player->deathIndex]->getWidth()); - smartSprites[player->deathIndex]->setVelX(smartSprites[player->deathIndex]->getVelX() * (-1)); - smartSprites[player->deathIndex]->setDestX(smartSprites[player->deathIndex]->getDestX() * (-1)); - } - } - else - { - if (smartSprites[player->deathIndex]->getPosX() < 0) - { - smartSprites[player->deathIndex]->setPosX(0); - smartSprites[player->deathIndex]->setVelX(smartSprites[player->deathIndex]->getVelX() * (-1)); - smartSprites[player->deathIndex]->setDestX(smartSprites[player->deathIndex]->getDestX() * (-1)); - } - } - }*/ + allPlayersAreDead &= (!player->isAlive()); } - if (allAreDead) + if (allPlayersAreDead) { if (deathCounter > 0) { deathCounter--; + if ((deathCounter == 250) || (deathCounter == 200) || (deathCounter == 180) || (deathCounter == 120) || (deathCounter == 60)) { - const Uint8 sound = rand() % 4; - switch (sound) - { - case 0: - JA_PlaySound(bubble1Sound, 0); - break; - - case 1: - JA_PlaySound(bubble2Sound, 0); - break; - - case 2: - JA_PlaySound(bubble3Sound, 0); - break; - - case 3: - JA_PlaySound(bubble4Sound, 0); - break; - - default: - break; - } + // Hace sonar aleatoriamente uno de los 4 sonidos de burbujas + const Uint8 index = rand() % 4; + const JA_Sound sound[4] = {bubble1Sound, bubble2Sound, bubble3Sound, bubble4Sound}; + JA_PlaySound(sound[index], 0); } } else @@ -2556,7 +2494,7 @@ void Game::updateShakeEffect() // Crea un SmartSprite para arrojar el item café al recibir un impacto void Game::throwCoffee(int x, int y) { - SmartSprite *ss = new SmartSprite(itemTexture, renderer); + SmartSprite *ss = new SmartSprite(itemTextures.at(4), renderer); smartSprites.push_back(ss); ss->setPosX(x - 8); @@ -2571,36 +2509,12 @@ void Game::throwCoffee(int x, int y) ss->setDestY(GAME_HEIGHT + 1); ss->setEnabled(true); ss->setEnabledCounter(1); - ss->setSpriteClip(80, 16, 16, 16); + ss->setSpriteClip(0, 0, 16, 16); ss->setRotate(true); ss->setRotateSpeed(10); ss->setRotateAmount(90.0); } -// Crea un SmartSprite para arrojar al jugador al morir -void Game::throwPlayer(int x, int y, Player *player) -{ - const int sentit = ((rand() % 2) ? 1 : -1); - - SmartSprite *ss = new SmartSprite(nullptr, renderer); - smartSprites.push_back(ss); - - ss->setTexture(player->getDeadTexture()); - ss->setPosX(x); - ss->setPosY(y); - ss->setWidth(24); - ss->setHeight(24); - ss->setVelX(2.0f * sentit); - ss->setVelY(-5.0f); - ss->setAccelX(0.0f); - ss->setAccelY(0.2f); - ss->setDestX(GAME_WIDTH * sentit); - ss->setDestY(GAME_HEIGHT + 1); - ss->setEnabled(true); - ss->setEnabledCounter(1); - ss->setSpriteClip(0, 0, 24, 24); -} - // Actualiza los SmartSprites void Game::updateSmartSprites() { @@ -2638,7 +2552,6 @@ void Game::killPlayer(Player *player) shakeScreen(); SDL_Delay(500); JA_PlaySound(coffeeOutSound); - throwPlayer(player->getPosX(), player->getPosY(), player); player->setAlive(false); if (allPlayersAreDead()) { diff --git a/source/game.h b/source/game.h index 9acfdaf..6d1558e 100644 --- a/source/game.h +++ b/source/game.h @@ -138,8 +138,6 @@ private: LTexture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego LTexture *gameTextTexture; // Textura para los sprites con textos - LTexture *itemTexture; // Textura para los items - std::vector *> itemAnimations; // Vector con las animaciones de los items std::vector *> playerAnimations; // Vector con las animaciones del jugador std::vector *> balloonAnimations; // Vector con las animaciones de los globos @@ -201,7 +199,6 @@ private: float stageBitmapPath[STAGE_COUNTER]; // Vector con los puntos Y por donde se desplaza el texto 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 deathIndex; // Indice del vector de smartsprites que contiene el sprite 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 bool timeStopped; // Indica si el tiempo está detenido @@ -399,9 +396,6 @@ private: // Crea un SmartSprite para arrojar el item café al recibir un impacto void throwCoffee(int x, int y); - // Crea un SmartSprite para arrojar al jugador al morir - void throwPlayer(int x, int y, Player *player); - // Actualiza los SmartSprites void updateSmartSprites(); diff --git a/source/instructions.h b/source/instructions.h index 9ee2a2b..b11d840 100644 --- a/source/instructions.h +++ b/source/instructions.h @@ -35,12 +35,12 @@ private: // Variables Uint16 counter; // Contador - Uint16 counterEnd; // Valor final para el contador + Uint16 counterEnd; // Valor final para el contador section_t section; // Estado del bucle principal para saber si continua o se sale Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa bool manualQuit; // Indica si se quiere salir del modo manual - mode_e mode; // Modo en el que se van a ejecutar las instrucciones + mode_e mode; // Modo en el que se van a ejecutar las instrucciones // Actualiza las variables void update(); diff --git a/source/player.cpp b/source/player.cpp index ba2749c..17b6485 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -2,7 +2,7 @@ #include "player.h" // Constructor -Player::Player(float x, int y, SDL_Renderer *renderer, std::vector texture, std::vector*> animations) +Player::Player(float x, int y, SDL_Renderer *renderer, std::vector texture, std::vector *> animations) { // Copia los punteros this->renderer = renderer; @@ -131,7 +131,9 @@ 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)) - posX -= velX; // Restaura su posición + { // Restaura su posición + posX -= velX; + } // Actualiza la posición del sprite legsSprite->setPosX(getPosX()); @@ -143,6 +145,20 @@ void Player::move() headSprite->setPosX(getPosX()); headSprite->setPosY(posY); } + else + { + deathSprite->update(); + + // 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); + + // Rebota + deathSprite->setVelX(-vx); + } + } } // Pinta el jugador en pantalla @@ -166,6 +182,10 @@ void Player::render() headSprite->render(); } } + else + { + deathSprite->render(); + } } // Establece el estado del jugador cuando camina @@ -186,8 +206,6 @@ void Player::setFiringStatus(Uint8 status) if (statusFiring != status) { statusFiring = status; - // bodySprite->setCurrentFrame(0); - // headSprite->setCurrentFrame(0); } } @@ -217,7 +235,7 @@ void Player::setAnimation() { // No esta disparando bodySprite->setCurrentAnimation(aWalking + aBodyCoffees); bodySprite->setFlip(flipWalk); - headSprite->setCurrentAnimation(aWalking + aHeadCoffees+ aPowerUp); + headSprite->setCurrentAnimation(aWalking + aHeadCoffees + aPowerUp); headSprite->setFlip(flipWalk); } else @@ -336,6 +354,18 @@ bool Player::isAlive() void Player::setAlive(bool value) { alive = value; + + if (!value) + { + deathSprite->setPos(headSprite->getRect()); + deathSprite->setAccelY(0.2f); + deathSprite->setVelY(-6.6f); + deathSprite->setVelX(3.3f); + if (rand() % 2 == 0) + { + deathSprite->setVelX(-3.3f); + } + } } // Obtiene el valor de la variable @@ -533,7 +563,8 @@ void Player::shiftColliders() // Obtiene el puntero a la textura con los gráficos de la animación de morir LTexture *Player::getDeadTexture() { - return deathSprite->getTexture();; + return deathSprite->getTexture(); + ; } // Obtiene el valor de la variable @@ -547,20 +578,20 @@ void Player::updatePowerUpHeadOffset() { if (!powerUp) { - //powerUpHeadOffset = 0; + // powerUpHeadOffset = 0; } else { - //powerUpHeadOffset = 96; + // powerUpHeadOffset = 96; if (powerUpCounter < 300) { if (powerUpCounter % 10 > 4) { - //powerUpHeadOffset = 96; + // powerUpHeadOffset = 96; } else { - //powerUpHeadOffset = 0; + // powerUpHeadOffset = 0; } } }