From fce356e306054606e7d144e68b2c717227ff207a Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 3 Sep 2022 14:22:05 +0200 Subject: [PATCH] Empezando a trabajar en el titulo --- media/title/loading_screeen1.png | Bin 0 -> 4333 bytes media/title/loading_screeen2.png | Bin 0 -> 5751 bytes source/director.cpp | 3 + source/director.h | 2 - source/game.h | 1 - source/title.cpp | 267 +++++++++++++++++++++++++++++++ source/title.h | 56 +++++++ 7 files changed, 326 insertions(+), 3 deletions(-) create mode 100644 media/title/loading_screeen1.png create mode 100644 media/title/loading_screeen2.png create mode 100644 source/title.cpp create mode 100644 source/title.h diff --git a/media/title/loading_screeen1.png b/media/title/loading_screeen1.png new file mode 100644 index 0000000000000000000000000000000000000000..a95d6de69cfbde35d589649c80e056d54088482a GIT binary patch literal 4333 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 gadd("/media/logo/since_1998.png", bitmap); asset->add("/media/logo/seagull.png", bitmap); + asset->add("/media/title/loading_screen1.png", bitmap); + asset->add("/media/title/loading_screen2.png", bitmap); + return asset->check(); } diff --git a/source/director.h b/source/director.h index 4103f2f..29ddafa 100644 --- a/source/director.h +++ b/source/director.h @@ -3,8 +3,6 @@ #include "sprite.h" #include "movingsprite.h" #include "text.h" -#include "menu.h" - #include "jail_audio.h" #include "utils.h" #include "input.h" diff --git a/source/game.h b/source/game.h index e6b3036..e09e8e8 100644 --- a/source/game.h +++ b/source/game.h @@ -5,7 +5,6 @@ #include "sprite.h" #include "animatedsprite.h" #include "text.h" -#include "menu.h" #include "input.h" #include "screen.h" #include "asset.h" diff --git a/source/title.cpp b/source/title.cpp new file mode 100644 index 0000000..2f33563 --- /dev/null +++ b/source/title.cpp @@ -0,0 +1,267 @@ +#include "title.h" + +// Constructor +Title::Title(SDL_Renderer *renderer, Screen *screen, Asset *asset) +{ + // Copia la dirección de los objetos + this->renderer = renderer; + this->screen = screen; + this->asset = asset; + + // Reserva memoria para los punteros + eventHandler = new SDL_Event(); + texture = new LTexture(renderer, asset->get("jailgames.png")); + texture2 = new LTexture(renderer, asset->get("since_1998.png")); + sprite2 = new Sprite((256 - texture2->getWidth()) / 2, 83 + texture->getHeight() + 5, texture2->getWidth(), texture2->getHeight(), texture2, renderer); + sprite2->setSpriteClip(0, 0, texture2->getWidth(), texture2->getHeight()); + texture2->setColor(0, 0, 0); + + for (int i = 0; i < texture->getHeight(); i++) + { + sprite.push_back(new Sprite(0, i, texture->getWidth(), 1, texture, renderer)); + if (i % 2 == 0) + { + sprite[i]->setPosX(256 + (i * 3)); + } + else + { + sprite[i]->setPosX(-181 - (i * 3)); + } + sprite[i]->setPosY(83 + i); + } + + // Inicializa variables + counter = 0; + section.name = SECTION_PROG_LOGO; + section.subsection = 0; + ticks = 0; + ticksSpeed = 15; + initFade = 300; + endLogo = 400; + postLogo = 20; + + color_t c = stringToColor("black"); + color.push_back(c); + + c = stringToColor("blue"); + color.push_back(c); + + c = stringToColor("red"); + color.push_back(c); + + c = stringToColor("purple"); + color.push_back(c); + + c = stringToColor("green"); + color.push_back(c); + + c = stringToColor("cyan"); + color.push_back(c); + + c = stringToColor("yellow"); + color.push_back(c); + + c = stringToColor("light_white"); + color.push_back(c); +} + +// Destructor +Title::~Title() +{ + delete texture; + delete texture2; + + for (auto s : sprite) + { + delete s; + } + + delete sprite2; + delete eventHandler; +} + +// Comprueba el manejador de eventos +void Title::checkEventHandler() +{ + // Comprueba los eventos que hay en la cola + while (SDL_PollEvent(eventHandler) != 0) + { + // Evento de salida de la aplicación + if (eventHandler->type == SDL_QUIT) + { + section.name = SECTION_PROG_QUIT; + break; + } + + // Cualquier tecla pulsada + if ((eventHandler->type == SDL_KEYDOWN) || (eventHandler->type == SDL_JOYBUTTONDOWN)) + { + section.name = SECTION_PROG_GAME; + section.subsection = 0; + } + } +} + +// Actualiza las variables +void Title::update() +{ + // Comprueba que la diferencia de ticks sea mayor a la velocidad del juego + if (SDL_GetTicks() - ticks > ticksSpeed) + { + // Actualiza el contador de ticks + ticks = SDL_GetTicks(); + + // Comprueba el manejador de eventos + checkEventHandler(); + + // Incrementa el contador + counter++; + + // update de JAILGAMES + if (counter > 30) + { + for (int i = 1; i < sprite.size(); i++) + { + const int speed = 8; + const int dest = 37; + if (sprite[i]->getPosX() != 37) + { + if (i % 2 == 0) + { + sprite[i]->incPosX(-speed); + if (sprite[i]->getPosX() < dest) + { + sprite[i]->setPosX(dest); + } + } + else + { + sprite[i]->incPosX(speed); + if (sprite[i]->getPosX() > dest) + { + sprite[i]->setPosX(dest); + } + } + } + } + } + + // update de fade + { + const int ini = 70; + const int inc = 4; + + if (counter == ini + inc * 0) + { + texture2->setColor(color[0].r, color[0].g, color[0].b); + } + else if (counter == ini + inc * 1) + { + texture2->setColor(color[1].r, color[1].g, color[1].b); + } + else if (counter == ini + inc * 2) + { + texture2->setColor(color[2].r, color[2].g, color[2].b); + } + else if (counter == ini + inc * 3) + { + texture2->setColor(color[3].r, color[3].g, color[3].b); + } + else if (counter == ini + inc * 4) + { + texture2->setColor(color[4].r, color[4].g, color[4].b); + } + else if (counter == ini + inc * 5) + { + texture2->setColor(color[5].r, color[5].g, color[5].b); + } + else if (counter == ini + inc * 6) + { + texture2->setColor(color[6].r, color[6].g, color[6].b); + } + + else if (counter == ini + inc * 7) + { + texture2->setColor(color[7].r, color[7].g, color[7].b); + } + + else if (counter == initFade + inc * 0) + { + texture->setColor(color[6].r, color[6].g, color[6].b); + texture2->setColor(color[6].r, color[6].g, color[6].b); + } + else if (counter == initFade + inc * 1) + { + texture->setColor(color[5].r, color[5].g, color[5].b); + texture2->setColor(color[5].r, color[5].g, color[5].b); + } + else if (counter == initFade + inc * 2) + { + texture->setColor(color[4].r, color[4].g, color[4].b); + texture2->setColor(color[4].r, color[4].g, color[4].b); + } + else if (counter == initFade + inc * 3) + { + texture->setColor(color[3].r, color[3].g, color[3].b); + texture2->setColor(color[3].r, color[3].g, color[3].b); + } + else if (counter == initFade + inc * 4) + { + texture->setColor(color[2].r, color[2].g, color[2].b); + texture2->setColor(color[2].r, color[2].g, color[2].b); + } + else if (counter == initFade + inc * 5) + { + texture->setColor(color[1].r, color[1].g, color[1].b); + texture2->setColor(color[1].r, color[1].g, color[1].b); + } + else if (counter == initFade + inc * 6) + { + texture->setColor(color[0].r, color[0].g, color[0].b); + texture2->setColor(color[0].r, color[0].g, color[0].b); + } + } + + // Comprueba si ha terminado el logo + if (counter == endLogo + postLogo) + { + section.name = SECTION_PROG_QUIT; + section.subsection = 0; + } + } +} + +// Dibuja en pantalla +void Title::render() +{ + // Prepara para empezar a dibujar en la textura de juego + screen->start(); + + // Limpia la pantalla + screen->clean(); + + // Dibuja los objetos + for (auto s : sprite) + { + s->render(); + } + sprite2->render(); + + // Vuelca el contenido del renderizador en pantalla + screen->blit(); +} + +// Bucle para el logo del juego +section_t Title::run() +{ + // Detiene la música + JA_StopMusic(); + + while (section.name == SECTION_PROG_LOGO) + { + update(); + render(); + } + + return section; +} diff --git a/source/title.h b/source/title.h new file mode 100644 index 0000000..b6edb73 --- /dev/null +++ b/source/title.h @@ -0,0 +1,56 @@ +#pragma once + +#include +#include "const.h" +#include "utils.h" +#include "sprite.h" +#include "screen.h" +#include "asset.h" +#include "jail_audio.h" +#include + +#ifndef TITLE_H +#define TITLE_H + +// Clase Title +class Title +{ +private: + SDL_Renderer *renderer; // El renderizador de la ventana + Screen *screen; // Objeto encargado de dibujar en pantalla + Asset *asset; // Objeto con los ficheros de recursos + LTexture *texture; // Textura con los graficos "JAILGAMES" + LTexture *texture2; // Textura con los graficos "Since 1998" + SDL_Event *eventHandler; // Manejador de eventos + std::vector sprite; // Vector con los sprites de cada linea que forman el bitmap JAILGAMES + Sprite *sprite2; // Sprite para manejar la textura2 + std::vector color; // Vector con los colores para el fade + int counter; // Contador + section_t section; // Estado del bucle principal para saber si continua o se sale + int ticks; // Contador de ticks para ajustar la velocidad del programa + int ticksSpeed; // Velocidad a la que se repiten los bucles del programa + int initFade; // Tiempo del contador cuando inicia el fade a negro + int endLogo; // Tiempo del contador para terminar el logo + int postLogo; // Tiempo que dura el logo con el fade al maximo + + // Actualiza las variables + void update(); + + // Dibuja en pantalla + void render(); + + // Comprueba el manejador de eventos + void checkEventHandler(); + +public: + // Constructor + Title(SDL_Renderer *renderer, Screen *screen, Asset *asset); + + // Destructor + ~Title(); + + // Bucle principal + section_t run(); +}; + +#endif