diff --git a/data/gfx/game_buildings.png b/data/gfx/game_buildings.png index 412e037..ec831e3 100644 Binary files a/data/gfx/game_buildings.png and b/data/gfx/game_buildings.png differ diff --git a/data/gfx/game_clouds.png b/data/gfx/game_clouds.png deleted file mode 100644 index ecd5ba5..0000000 Binary files a/data/gfx/game_clouds.png and /dev/null differ diff --git a/data/gfx/game_clouds1.png b/data/gfx/game_clouds1.png new file mode 100644 index 0000000..7701113 Binary files /dev/null and b/data/gfx/game_clouds1.png differ diff --git a/data/gfx/game_clouds2.png b/data/gfx/game_clouds2.png new file mode 100644 index 0000000..3a6e255 Binary files /dev/null and b/data/gfx/game_clouds2.png differ diff --git a/source/background.cpp b/source/background.cpp index 3b00cfe..367ec95 100644 --- a/source/background.cpp +++ b/source/background.cpp @@ -29,26 +29,31 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, par // Carga las texturas buildingsTexture = new Texture(renderer, asset->get("game_buildings.png")); - cloudsTexture = new Texture(renderer, asset->get("game_clouds.png")); + clouds1Texture = new Texture(renderer, asset->get("game_clouds1.png")); + clouds2Texture = new Texture(renderer, asset->get("game_clouds2.png")); grassTexture = new Texture(renderer, asset->get("game_grass.png")); gradientsTexture = new Texture(renderer, asset->get("game_sky_colors.png")); // Crea los sprites - const int cloudsHeight = base - 196; - clouds1A = new MovingSprite(0, cloudsHeight, rect.w, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); - clouds1B = new MovingSprite(rect.w, cloudsHeight, rect.w, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); - clouds2A = new MovingSprite(0, cloudsHeight + 57, rect.w, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); - clouds2B = new MovingSprite(rect.w, cloudsHeight + 57, rect.w, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); + const int clouds1y = base - 165; + const int clouds2y = base - 101; + const float clouds1speed = 0.1f; + const float clouds2speed = 0.05f; + clouds1A = new MovingSprite(0, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture, renderer); + clouds1B = new MovingSprite(rect.w, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture, renderer); - buildingsSprite = new Sprite(0, 0, rect.w, 135, buildingsTexture, renderer); + clouds2A = new MovingSprite(0, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture, renderer); + clouds2B = new MovingSprite(rect.w, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture, renderer); + + buildingsSprite = new Sprite(0, 0, buildingsTexture->getWidth(), buildingsTexture->getHeight(), buildingsTexture, renderer); gradientSprite = new Sprite(0, 0, rect.w, rect.h, gradientsTexture, renderer); - grassSprite = new Sprite(0, 0, 320, 10, grassTexture, renderer); + grassSprite = new Sprite(0, 0, grassTexture->getWidth(), grassTexture->getHeight() / 2, grassTexture, renderer); // Inicializa objetos - clouds1A->setSpriteClip(0, 0, cloudsTexture->getWidth(), 52); - clouds1B->setSpriteClip(0, 0, cloudsTexture->getWidth(), 52); - clouds2A->setSpriteClip(0, 52, cloudsTexture->getWidth(), 32); - clouds2B->setSpriteClip(0, 52, cloudsTexture->getWidth(), 32); + clouds1A->setSpriteClip(0, 0, clouds1Texture->getWidth(), clouds1Texture->getHeight()); + clouds1B->setSpriteClip(0, 0, clouds1Texture->getWidth(), clouds1Texture->getHeight()); + clouds2A->setSpriteClip(0, 0, clouds2Texture->getWidth(), clouds2Texture->getHeight()); + clouds2B->setSpriteClip(0, 0, clouds2Texture->getWidth(), clouds2Texture->getHeight()); buildingsSprite->setPosY(base - buildingsSprite->getHeight()); grassSprite->setPosY(base - grassSprite->getHeight()); @@ -57,25 +62,19 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, par SDL_SetTextureBlendMode(canvas, SDL_BLENDMODE_BLEND); // Crea la textura para atenuar el fondo - colorText = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, rect.w, rect.h); - SDL_SetTextureBlendMode(colorText, SDL_BLENDMODE_BLEND); + colorTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, rect.w, rect.h); + SDL_SetTextureBlendMode(colorTexture, SDL_BLENDMODE_BLEND); setColor(color); - SDL_SetTextureAlphaMod(colorText, alphaColorText); + SDL_SetTextureAlphaMod(colorTexture, alphaColorText); } // Destructor Background::~Background() { - buildingsTexture->unload(); delete buildingsTexture; - - cloudsTexture->unload(); - delete cloudsTexture; - - grassTexture->unload(); + delete clouds1Texture; + delete clouds2Texture; delete grassTexture; - - gradientsTexture->unload(); delete gradientsTexture; delete clouds1A; @@ -86,7 +85,7 @@ Background::~Background() delete gradientSprite; delete grassSprite; SDL_DestroyTexture(canvas); - SDL_DestroyTexture(colorText); + SDL_DestroyTexture(colorTexture); } // Actualiza la lógica del objeto @@ -150,14 +149,15 @@ void Background::render() SDL_RenderCopy(renderer, canvas, &srcRect, &dstRect); // Atenuación - SDL_RenderCopy(renderer, colorText, &srcRect, &dstRect); + SDL_RenderCopy(renderer, colorTexture, &srcRect, &dstRect); } // Vuelve a cargar las texturas void Background::reloadTextures() { buildingsTexture->reLoad(); - cloudsTexture->reLoad(); + clouds1Texture->reLoad(); + clouds2Texture->reLoad(); grassTexture->reLoad(); gradientsTexture->reLoad(); } @@ -209,7 +209,7 @@ void Background::setColor(color_t color) // Colorea la textura SDL_Texture *temp = SDL_GetRenderTarget(renderer); - SDL_SetRenderTarget(renderer, colorText); + SDL_SetRenderTarget(renderer, colorTexture); SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 255); SDL_RenderClear(renderer); @@ -237,7 +237,7 @@ void Background::updateAlphaColorText() else { alphaColorText > alphaColorTextTemp ? alphaColorTextTemp++ : alphaColorTextTemp--; - SDL_SetTextureAlphaMod(colorText, alphaColorTextTemp); + SDL_SetTextureAlphaMod(colorTexture, alphaColorTextTemp); } } diff --git a/source/background.h b/source/background.h index 1db67b5..b14bf76 100644 --- a/source/background.h +++ b/source/background.h @@ -15,7 +15,8 @@ private: Asset *asset; // Objeto que gestiona todos los ficheros de recursos Texture *buildingsTexture; // Textura con los edificios de fondo - Texture *cloudsTexture; // Textura con las nubes de fondo + Texture *clouds1Texture; // Textura con las nubes de fondo + Texture *clouds2Texture; // Textura con las nubes de fondo Texture *grassTexture; // Textura con la hierba del suelo Texture *gradientsTexture; // Textura con los diferentes colores de fondo del juego @@ -28,8 +29,8 @@ private: Sprite *gradientSprite; // Sprite con los graficos del degradado de color de fondo Sprite *grassSprite; // Sprite para la hierba - SDL_Texture *canvas; // Textura para componer el fondo - SDL_Texture *colorText; // Textura para atenuar el fondo + SDL_Texture *canvas; // Textura para componer el fondo + SDL_Texture *colorTexture; // Textura para atenuar el fondo param_t *param; // Puntero con todos los parametros del programa diff --git a/source/director.cpp b/source/director.cpp index 739776b..0773d05 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -331,7 +331,8 @@ bool Director::setFileList() asset->add(prefix + "/data/gfx/bullet.png", t_bitmap); asset->add(prefix + "/data/gfx/game_buildings.png", t_bitmap); - asset->add(prefix + "/data/gfx/game_clouds.png", t_bitmap); + asset->add(prefix + "/data/gfx/game_clouds1.png", t_bitmap); + asset->add(prefix + "/data/gfx/game_clouds2.png", t_bitmap); asset->add(prefix + "/data/gfx/game_grass.png", t_bitmap); asset->add(prefix + "/data/gfx/game_power_meter.png", t_bitmap); asset->add(prefix + "/data/gfx/game_sky_colors.png", t_bitmap); diff --git a/source/game.cpp b/source/game.cpp index 017c14c..e6889a0 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -2697,10 +2697,12 @@ void Game::updateBackground() } // Calcula la velocidad en función de los globos explotados y el total de globos a explotar para acabar el juego - const float speed = (-0.2f) + (-3.00f * ((float)balloonsPopped / (float)totalPowerToCompleteGame)); + const float cloudsInitialSpeed = 0.05f; + const float cloudsFinalSpeed = 2.00f - cloudsInitialSpeed; + const float cloudsSpeed = (-cloudsInitialSpeed) + (-cloudsFinalSpeed * ((float)balloonsPopped / (float)totalPowerToCompleteGame)); + background->setCloudsSpeed(cloudsSpeed); - // Aplica la velocidad calculada para las nubes - background->setCloudsSpeed(speed); + // Calcula la transición de los diferentes fondos const float gradientNumber = std::min(((float)balloonsPopped / 1250.0f), 3.0f); const float percent = gradientNumber - (int)gradientNumber; background->setGradientNumber((int)gradientNumber); @@ -2710,7 +2712,7 @@ void Game::updateBackground() background->update(); } -// Dibuja la linea que separa la zona ade juego del marcador +// Dibuja la linea que separa la zona de juego del marcador void Game::renderSeparator() { // Dibuja la linea que separa el marcador de la zona de juego diff --git a/source/game_logo.cpp b/source/game_logo.cpp index 4966351..3244b96 100644 --- a/source/game_logo.cpp +++ b/source/game_logo.cpp @@ -52,10 +52,11 @@ void GameLogo::init() { const int xp = x - coffeeBitmap->getWidth() / 2; const int desp = getInitialVerticalDesp(); + // Variables status = disabled; shake.desp = 1; - shake.delay = 3; + shake.delay = 2; shake.lenght = 8; shake.remaining = shake.lenght; shake.counter = shake.delay; @@ -138,7 +139,7 @@ void GameLogo::update() status = shaking; // Pantallazo blanco - screen->flash(flashColor, 5); + //screen->flash(flashColor, 10); // Reproduce el efecto sonoro JA_PlaySound(crashSound); diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index d554976..9526d70 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -36,7 +36,7 @@ HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, // Inicializa objetos background->setSrcDest(windowArea); background->setDstDest(windowArea); - background->setCloudsSpeed(-0.5f); + background->setCloudsSpeed(-0.1f); background->setGradientNumber(1); background->setTransition(0.8f); fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b); diff --git a/source/title.cpp b/source/title.cpp index d5e7342..ab58b06 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -26,13 +26,6 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, miniLogoTexture = new Texture(renderer, asset->get("logo_jailgames_mini.png")); miniLogoSprite = new Sprite(GAMECANVAS_CENTER_X - miniLogoTexture->getWidth() / 2, 0, miniLogoTexture->getWidth(), miniLogoTexture->getHeight(), miniLogoTexture, renderer); - background = new Background(renderer, screen, asset, param); - background->setSrcDest(windowArea); - background->setDstDest(windowArea); - background->setCloudsSpeed(-0.5f); - background->setGradientNumber(1); - background->setTransition(0.8f); - tiledbg = new Tiledbg(renderer, screen, asset, {0, 0, param->gameWidth, param->gameHeight}, TILED_MODE_RANDOM); gameLogo = new GameLogo(renderer, screen, asset, param, GAMECANVAS_CENTER_X, param->titleCC); @@ -54,11 +47,9 @@ Title::~Title() delete text1; delete text2; - miniLogoTexture->unload(); delete miniLogoTexture; delete miniLogoSprite; - delete background; delete tiledbg; delete gameLogo; delete defineButtons; @@ -90,9 +81,6 @@ void Title::update() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza el objeto 'background' - background->update(); - // Actualiza el objeto 'defineButtons' defineButtons->update(); @@ -174,7 +162,6 @@ void Title::render() // Dibuja el mosacico de fondo tiledbg->render(); - // background->render(); // Dibuja el logo con el título del juego gameLogo->render(); @@ -198,6 +185,7 @@ void Title::render() text1->writeDX(TXT_CENTER | TXT_SHADOW, GAMECANVAS_CENTER_X, pos2, TEXT_COPYRIGHT, 1, noColor, 1, shadow); } + // Define Buttons defineButtons->render(); // Fade @@ -253,12 +241,15 @@ void Title::checkInput() const int index = input->checkAnyButtonPressed(); if (index) { - fade->activate(); - postFade = index; + if (section->subsection == SUBSECTION_TITLE_2) + {// No se puede empezar a jugar durante la animación del titulo + fade->activate(); + postFade = index; + } } // Comprueba el teclado para salir - if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) + if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) { section->name = SECTION_PROG_QUIT; } diff --git a/source/title.h b/source/title.h index c1b0cbb..58f9b25 100644 --- a/source/title.h +++ b/source/title.h @@ -17,7 +17,6 @@ #include "instructions.h" #include "item.h" #include "lang.h" -#include "background.h" #include "tiledbg.h" #include "game_logo.h" #include "define_buttons.h" @@ -37,7 +36,6 @@ private: Lang *lang; // Objeto para gestionar los textos en diferentes idiomas SDL_Event *eventHandler; // Manejador de eventos section_t *section; // Indicador para el bucle del titulo - Background *background; // Objeto para dibujar el fondo del juego Tiledbg *tiledbg; // Objeto para dibujar el mosaico animado de fondo GameLogo *gameLogo; // Objeto para dibujar el logo con el título del juego Texture *miniLogoTexture; // Textura con el logo de JailGames mini