From a3e608b01e0f484a705046c1b41e051100e7f262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Fri, 26 Feb 2021 22:48:52 +0100 Subject: [PATCH] before change player animation --- media/.DS_Store | Bin 10244 -> 10244 bytes media/gfx/player_body.png | Bin 6278 -> 9188 bytes source/gamedirector.cpp | 90 +++++++++++++++++--------------------- source/gamedirector.h | 14 +++--- source/player.cpp | 27 +++++++++++- source/player.h | 10 +++++ 6 files changed, 81 insertions(+), 60 deletions(-) diff --git a/media/.DS_Store b/media/.DS_Store index 913ab0a8e5f95c4bbb2002ff2e0a46991f1c10d5..ef9c65c8c82754edbfcf861c591b56e13d627467 100644 GIT binary patch delta 25 gcmZn(XbIS`RDi?S$W%wc(87H3Itj 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 O15%JtkuHB>68K-d&I~~S literal 6278 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, 0, 64, 64, mTexture[TEXTURE_TITLE].texture, mRenderer); - mTitle.tile->setSpriteClip(192, 0, 64, 64); } // Carga los recursos necesarios para la sección 'Title' @@ -724,6 +720,9 @@ bool GameDirector::loadMediaTitle() SDL_SetRenderTarget(mRenderer, mTitleSurface); SDL_SetRenderDrawColor(mRenderer, 0x43, 0x43, 0x4F, 0xFF); SDL_RenderClear(mRenderer); + + mTitle.tile->init(0, 0, 64, 64, mTexture[TEXTURE_TITLE].texture, mRenderer); + mTitle.tile->setSpriteClip(192, 0, 64, 64); for (Uint8 i = 0; i < 8; i++) for (Uint8 j = 0; j < 6; j++) { @@ -731,6 +730,7 @@ bool GameDirector::loadMediaTitle() mTitle.tile->setPosY(j * 64); mTitle.tile->render(); } + mTitle.backgroundWindow.x = 0; mTitle.backgroundWindow.y = 0; mTitle.backgroundWindow.w = SCREEN_WIDTH; @@ -821,6 +821,13 @@ void GameDirector::initGame() loadMediaGame(); // Inicializa variables + resetGame(); +} + +// Inicializa las variables especificas de la sección 'Game' para empezar una nueva partida +void GameDirector::resetGame() +{ + // Inicializa las variables mGame.section = GAME_SECTION_PLAY; mGame.menaceLevelCurrent = 0; mGame.menaceLevelThreshold = 0; @@ -834,7 +841,6 @@ void GameDirector::initGame() mGame.remainingExplosionsCounter = REMAINING_EXPLOSIONS_COUNTER; mGame.timeStopped = false; mGame.timeStoppedCounter = TIME_STOPPED_COUNTER; - mGame.playFieldDrawOnly = true; mProg.debug = false; mGame.counter = 0; @@ -855,13 +861,13 @@ void GameDirector::initGame() mGame.grass->setPosY(154); // Objeto jugador - mGame.player->init(PLAY_AREA_CENTER_X - 12, PLAY_AREA_BOTTOM - 24, mTexture[TEXTURE_PLAYER_LEGS].texture, mTexture[TEXTURE_PLAYER_BODY].texture, mRenderer); + mGame.player->init(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexture[TEXTURE_PLAYER_LEGS].texture, mTexture[TEXTURE_PLAYER_BODY].texture, mRenderer); // Establece a cero todos los valores del vector de objetos globo resetBalloons(); // Crea objetos globo y los centra en el area de juego - mGame.balloon[0]->init(0, BLOCK, BALLOON_4, BALLOON_VELX_POSITIVE, 0, mTexture[TEXTURE_BALLOON].texture, mRenderer); + mGame.balloon[0]->init(0, BLOCK, BALLOON_4, BALLOON_VELX_POSITIVE, 100, mTexture[TEXTURE_BALLOON].texture, mRenderer); mGame.balloon[0]->allignTo(PLAY_AREA_CENTER_X); // Con los globos creados, calcula el nivel de amenaza @@ -887,7 +893,7 @@ void GameDirector::initGame() mGame.getReadyBitmap->setAccelX(0.00f); mGame.getReadyBitmap->setAccelY(0.0f); mGame.getReadyBitmap->setSpriteClip(0, 0, 109, 20); - mGame.getReadyBitmap->setEnabled(true); + mGame.getReadyBitmap->setEnabled(!mDemo.enabled); mGame.getReadyBitmap->setEnabledTimer(0); mGame.getReadyBitmap->setDestX(PLAY_AREA_RIGHT); mGame.getReadyBitmap->setDestY(PLAY_AREA_CENTER_Y - 10); @@ -2313,18 +2319,6 @@ Uint8 GameDirector::getMenaceLevel() return mGame.menaceLevelCurrent; } -// Obtiene el valor de la variable -bool GameDirector::isPlayFieldDrawOnly() -{ - return mGame.playFieldDrawOnly; -} - -// Establece el valor de la variable -void GameDirector::setPlayFieldDrawOnly(bool state) -{ - mGame.playFieldDrawOnly = state; -} - // Establece el valor de la variable void GameDirector::setTimeStopped(bool value) { @@ -2405,14 +2399,15 @@ void GameDirector::updateRemainingExplosionsCounter() // Actualiza el campo de juego void GameDirector::updatePlayField() { - if (isPlayFieldDrawOnly() == false) - { // Comprueba el teclado/mando checkGameInput(); // Actualiza el jugador mGame.player->update(); + // Actualiza el fondo + updateBackground(); + // Mueve los globos moveBalloons(); @@ -2455,12 +2450,8 @@ void GameDirector::updatePlayField() killPlayer(); } } - } - else - { // Actualiza el mensaje de GetReady mGame.getReadyBitmap->update(); - } } // Actualiza el fondo @@ -2499,7 +2490,6 @@ void GameDirector::renderBackground() alpha = 0; } - updateBackground(); mGame.gradient->setSpriteClip(SCREEN_WIDTH, 192, SCREEN_WIDTH, SCREEN_HEIGHT); mTexture[TEXTURE_GAME_BG].texture->setAlpha(255); mGame.gradient->render(); @@ -3004,8 +2994,6 @@ void GameDirector::renderMessages() { // GETREADY! mGame.getReadyBitmap->render(); - if (!mGame.getReadyBitmap->isEnabled()) - setPlayFieldDrawOnly(false); // Time Stopped if (mGame.timeStopped) @@ -3147,7 +3135,7 @@ void GameDirector::runLogo() { initLogo(); - while (mProg.section == PROG_SECTION_LOGO) + while ((mProg.section == PROG_SECTION_LOGO) && (!exit())) { // Comprueba los eventos que hay en la cola while (SDL_PollEvent(mEventHandler) != 0) @@ -3242,7 +3230,7 @@ void GameDirector::runIntro() JA_PlayMusic(mMusic[MUSIC_INTRO].music, false); } - while (mProg.section == PROG_SECTION_INTRO) + while ((mProg.section == PROG_SECTION_INTRO) && (!exit())) { if (SDL_GetTicks() - mProg.ticks > mProg.ticksSpeed) { @@ -3407,15 +3395,15 @@ void GameDirector::runIntro() } // Bucle para el titulo del juego -void GameDirector::runTitle(Uint8 section) +void GameDirector::runTitle(Uint8 subsection) { Uint8 R = 0x27; Uint8 G = 0x27; Uint8 B = 0x36; - initTitle(); + initTitle(subsection); - while (mProg.section == PROG_SECTION_TITLE) + while ((mProg.section == PROG_SECTION_TITLE) && (!exit())) { // Sección 1 - Titulo desplazandose if (mTitle.section == TITLE_SECTION_1) @@ -3595,7 +3583,7 @@ void GameDirector::runTitle(Uint8 section) mText.white->writeCentered(SCREEN_CENTER_X, PLAY_AREA_THIRD_QUARTER_Y + BLOCK, "PRESS ANY KEY!", 0); } - // texto con el copyright y versión + // Texto con el copyright y versión mText.black->writeCentered(SCREEN_CENTER_X + 1, SCREEN_HEIGHT - (BLOCK * 2) + 1, TEXT_COPYRIGHT, 0); mText.white->writeCentered(SCREEN_CENTER_X, SCREEN_HEIGHT - (BLOCK * 2), TEXT_COPYRIGHT, 0); @@ -3722,7 +3710,7 @@ void GameDirector::runGame() { initGame(); - while (mProg.section == PROG_SECTION_GAME) + while ((mProg.section == PROG_SECTION_GAME) && (!exit())) { // Sección juego en pausa if (mGame.section == GAME_SECTION_PAUSE) @@ -3798,8 +3786,8 @@ void GameDirector::runGame() SDL_RenderCopy(mRenderer, mBackbuffer, NULL, NULL); // Actualiza la pantalla - if (mProg.section == PROG_SECTION_GAME) - SDL_RenderPresent(mRenderer); + //if (mProg.section == PROG_SECTION_GAME) + SDL_RenderPresent(mRenderer); } } @@ -3809,7 +3797,7 @@ void GameDirector::runGame() // Bucle para el menu de pausa del juego void GameDirector::runPausedGame() { - while (mGame.section == GAME_SECTION_PAUSE) + while ((mGame.section == GAME_SECTION_PAUSE) && (mProg.section == PROG_SECTION_GAME)) { // Comprueba los eventos que hay en la cola while (SDL_PollEvent(mEventHandler) != 0) @@ -3997,7 +3985,7 @@ void GameDirector::runInstructions() // Bucle para la pantalla de game over void GameDirector::runGameOverScreen() { - while (mGame.section == GAME_SECTION_GAMEOVER) + while ((mGame.section == GAME_SECTION_GAMEOVER) && (mProg.section == PROG_SECTION_GAME)) { // Comprueba los eventos que hay en la cola while (SDL_PollEvent(mEventHandler) != 0) @@ -4050,12 +4038,14 @@ void GameDirector::runGameOverScreen() { case 0: setProgSection(PROG_SECTION_GAME); + mGame.section = GAME_SECTION_PLAY; mMenu.gameOver->reset(); mMenu.keyPressed = false; JA_PlaySound(mSound[SOUND_MENU_SELECT].sound); JA_StopMusic(); renderFade(1); disableDemoMode(); + resetGame(); break; case 1: setProgSection(PROG_SECTION_TITLE); @@ -4091,14 +4081,14 @@ void GameDirector::renderDebugInfo() void GameDirector::enableDemoMode() { mDemo.enabled = true; - mGame.getReadyBitmap->setEnabled(false); + //mGame.getReadyBitmap->setEnabled(false); } // Desactiva el modo Demo void GameDirector::disableDemoMode() { mDemo.enabled = false; - mGame.getReadyBitmap->setEnabled(true); + //mGame.getReadyBitmap->setEnabled(true); } // Actualiza el proximo estado del juego despues del titulo diff --git a/source/gamedirector.h b/source/gamedirector.h index 5821539..a096c68 100644 --- a/source/gamedirector.h +++ b/source/gamedirector.h @@ -81,7 +81,6 @@ private: Uint8 deathIndex; // Indice del vector de smartsprites que contiene el sprite del jugador Uint8 menaceLevelCurrent; // Nivel de amenaza actual Uint8 menaceLevelThreshold; // 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 playFieldDrawOnly; // Indica si el bucle de juego avanza o solo pinta bool timeStopped; // Indica si el tiempo está detenido Uint16 timeStoppedCounter; // Temporizador para llevar la cuenta del tiempo detenido Uint8 remainingExplosions; // Cantidad de explosiones restantes @@ -242,7 +241,7 @@ public: void quitIntro(); // Inicializa las variables necesarias para la sección 'Title' - void initTitle(Uint8 section = TITLE_SECTION_1); + void initTitle(Uint8 subsection = TITLE_SECTION_1); // Carga los recursos necesarios para la sección 'Title' bool loadMediaTitle(); @@ -253,6 +252,9 @@ public: // Inicializa las variables necesarias para la sección 'Game' void initGame(); + // Inicializa las variables especificas de la sección 'Game' para empezar una nueva partida + void resetGame(); + // Carga los recursos necesarios para la sección 'Game' bool loadMediaGame(); @@ -437,12 +439,6 @@ public: // Obtiene el valor de la variable Uint8 getMenaceLevel(); - // Obtiene el valor de la variable - bool isPlayFieldDrawOnly(); - - // Establece el valor de la variable - void setPlayFieldDrawOnly(bool state); - // Establece el valor de la variable void setTimeStopped(bool value); @@ -525,7 +521,7 @@ public: void runIntro(); // Bucle para el titulo del juego - void runTitle(Uint8 section = TITLE_SECTION_1); + void runTitle(Uint8 subsection = TITLE_SECTION_1); // Bucle para el juego void runGame(); diff --git a/source/player.cpp b/source/player.cpp index 83a0cf1..3582683 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -32,6 +32,7 @@ void Player::init(float x, int y, LTexture *textureLegs, LTexture *textureBody, mInvulnerableCounter = PLAYER_INVULNERABLE_COUNTER; mExtraHit = false; mCoffees = 0; + mInput = true; // Establece la altura y el ancho del jugador mWidth = 3 * BLOCK; @@ -726,16 +727,40 @@ bool Player::hasExtraHit() void Player::giveExtraHit() { mExtraHit = true; + mCoffees++; + if (mCoffees > 2) + mCoffees = 2; } // Quita el toque extra al jugador void Player::removeExtraHit() { - mExtraHit = false; + if (mCoffees > 0) + mCoffees--; + if (mCoffees == 0) + mExtraHit = false; mInvulnerable = true; mInvulnerableCounter = PLAYER_INVULNERABLE_COUNTER; } +// Habilita la entrada de ordenes +void Player::enableInput() +{ + mInput = true; +} + +// Deshabilita la entrada de ordenes +void Player::disableInput() +{ + mInput = false; +} + +// Devuelve el numero de cafes actuales +Uint8 Player::getCoffees() +{ + return mCoffees; +} + // Obtiene el circulo de colisión Circle &Player::getCollider() { diff --git a/source/player.h b/source/player.h index 322b67d..60ad831 100644 --- a/source/player.h +++ b/source/player.h @@ -32,6 +32,7 @@ private: Uint16 mInvulnerableCounter; // Temporizador para la invulnerabilidad bool mExtraHit; // Indica si el jugador tiene un toque extra Uint8 mCoffees; // Indica cuantos cafes lleva acumulados + bool mInput; // Indica si puede recibir ordenes de entrada AnimatedSprite *mSpriteLegs; // Sprite para dibujar las piernas AnimatedSprite *mSpriteBody; // Sprite para dibujar el cuerpo @@ -141,6 +142,15 @@ public: // Quita el toque extra al jugador void removeExtraHit(); + // Habilita la entrada de ordenes + void enableInput(); + + // Deshabilita la entrada de ordenes + void disableInput(); + + // Devuelve el numero de cafes actuales + Uint8 getCoffees(); + // Obtiene el circulo de colisión Circle &getCollider(); };