diff --git a/source/logo.cpp b/source/logo.cpp index 8b6b892..86133ce 100644 --- a/source/logo.cpp +++ b/source/logo.cpp @@ -11,18 +11,21 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, 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)); - completed.push_back(false); if (i % 2 == 0) { - sprite[i]->setPosX(256 + i); + sprite[i]->setPosX(256 + (i * 3)); } else { - sprite[i]->setPosX(-181 - i); + sprite[i]->setPosX(-181 - (i * 3)); } sprite[i]->setPosY(83 + i); } @@ -36,18 +39,44 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset) 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 Logo::~Logo() { delete texture; + delete texture2; for (auto s : sprite) { delete s; } + delete sprite2; delete eventHandler; } @@ -89,33 +118,110 @@ void Logo::update() counter++; // update de JAILGAMES - for (int i = 1; i < sprite.size(); i++) + if (counter > 30) { - const int speed = 30; - const int dest = 37; - completed[0] = true; - if (sprite[i]->getPosX() != 37 && completed[i - 1] == true) + for (int i = 1; i < sprite.size(); i++) { - if (i % 2 == 0) + const int speed = 8; + const int dest = 37; + if (sprite[i]->getPosX() != 37) { - sprite[i]->incPosX(-speed); - if (sprite[i]->getPosX() < dest) + if (i % 2 == 0) { - completed[i] = true; - sprite[i]->setPosX(dest); + sprite[i]->incPosX(-speed); + if (sprite[i]->getPosX() < dest) + { + sprite[i]->setPosX(dest); + } } - } - else - { - sprite[i]->incPosX(speed); - if (sprite[i]->getPosX() > dest) + else { - completed[i] = true; - sprite[i]->setPosX(dest); + 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) { @@ -139,6 +245,7 @@ void Logo::render() { s->render(); } + sprite2->render(); // Vuelca el contenido del renderizador en pantalla screen->blit(); diff --git a/source/logo.h b/source/logo.h index 2159c2e..7cb3124 100644 --- a/source/logo.h +++ b/source/logo.h @@ -19,10 +19,12 @@ 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 + 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 - std::vector completed; // Indica si el sprite ha llegado a su destino + 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