From 56c1a1d7f36ab35afc9436ff359a9a09d2eb4934 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 6 Oct 2022 13:13:27 +0200 Subject: [PATCH] Arreglada la animacion de morir. Ya no se usan smartsprites --- data/gfx/items.png | Bin 1797 -> 0 bytes data/gfx/player_arounder_death.png | Bin 1787 -> 1358 bytes data/gfx/player_bal1_death.png | Bin 1872 -> 1355 bytes source/director.cpp | 1 - source/game.cpp | 107 +++-------------------------- source/game.h | 6 -- source/instructions.h | 4 +- source/player.cpp | 51 +++++++++++--- 8 files changed, 53 insertions(+), 116 deletions(-) delete mode 100644 data/gfx/items.png diff --git a/data/gfx/items.png b/data/gfx/items.png deleted file mode 100644 index 601f565f3c03093ad89c46b0214fcf493b3fc8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1797 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 KMNUMnLSTYCf`H@z delta 1784 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 Hu0mjfR3~;= delta 1870 zcmV-U2eJ6e3eXOa7k@Aa1^@s6?iPQ~00001b5ch_0Itp)=>Px+3Q0skRCt{2Tfb`? zSrGoD2uBbS7grog6BRjvYnQ6-+%7T%$qm!-n@CE95mRN zo(pf@xTL$Cz|s59c=Yyl&gI!b(jEqnENSO$FZz7@V34$j!6Pf$#sRo_;}VYEe|Gxz z#UN>qlKkI1ASI8iXcugZR#vZAh1uFXvpzFy+QZVeOyD>c%y3TVH=e8Tw@Y>Rg z9DVEB($MzBD9CSJglPot-MWPFsbbuIy5GUC|EO2^cB2})w56f#i?3aNuPEqrzZ3r+ zpDJQyN)%+~_Tv!vV5B#5`*HZ@;91U>c3OPx@>{1MnSYTCVzB$)4;ZVh0{~v)q4L>f zM3KR#`V-7vK7=dnex@K-9$!lS#Er-bfU(*-xgrKyDd}Thq{#1VgvJy_0 zItaj<_NV$207%dsb@`1$L`|8$VGU9Zzs4se17I(BDIa0{D~-t3o-+Qh4Q4)t-3)I z=f^E);elu#OhbDH2vIZB9yR&%00ehd3DOOk=mt$|TN?P#=CW~_M_GRBs8dv7f{*nK zi}o;hWI@}y;1tS}LfiRq3#vBXP7IRvFnDA|TYtL~mKg|y4%7mqg^6~dJc$|fcAu^o z75Rlm)6P*9_L=V6V0+(`d(rJIM^S#k1NKfjxKk>Msn(MYRQUPnzryv#^jzpuRUp5w zqkpGV6xwz2(7jQUKf!QeqLLW7?RSAvu!V_AC^N8if~=GaWTNjXOPY7S2KlwFJm|U| z9e;SvJq-pu09iwOA~uYw1s&RrYDgcS_ei1qL+z?(fyjbsTIg5#zVZTwD9ESoC96S@ z^YOl(KnmxJ@Cu^e+e_lJzpQ;HT&MNAG)m_%MiV~h*Lrw*=$jL32PJh@C0}J#ZLW2f@-)OVmpoZ!+JC9K z8USTTsXt@2b)_fB>zsA~wl>e=j?2pC*FJ~lqzpbaaL^Io%IXz?KY`kP3u;vz5Pv5Z~}uS+TDyujylN@tPIr6ZeS8!t;yEuN|kCpQW*P?e5=3uCKC{gxNy z0x2mH9GvQ!>D{^9=}5*q9V-aFk58-cW+Y-jcieJ*eiPg z70v>Y2a*xYO8XhPd=ThGR@DEUnwSdt^QRv}-;|54Uxo4{a3DR)FWwwH%TWo14`INp z{Dp~1*ltw4PM~;ktIrw$h;GgUiSemo{80rGI{9sDfNA;xq&>&&$A4kFQ4J{>m{^2u zgP?*<`7VMHT=o^ZH9)oI@IZn?6-emlsQ7WC@TuhHMz}Ch36<$+8U)+I*bSOa1x-BX zPKmGc<5pr$3`&atdV?TasJs*AAf@s8eWUOa=y{orj-LuD<1y**PN`^5MGyhqHr@w3 z>&T0h_`0)OZzXa;a(~BM&my>Wo6;$?4(Pzw03I2tj3X#53eyT186^j0+5=By(ILso z>J@Ej*(Z_ZimVcfKFL6zeh^(_#F9nb3qSTVr8u%a4{-T!0HNRiApq%&Xk&UVbjpVI zQ}+_>_>yO@GIU{}i+m>Z`wtr%bbAmN4}SFabx!-xAnJBp&_{2*4uJ{_e2!Jq%I$k1 z#-a3pLDlWJA`8n0;HCVukPXIn?XoU9S=a3h3tytNCQV7r|0MsoDiz!JHUIzs07*qo IM6N<$f*1Xe1^@s6 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; } } }