#include "logo.h" // Constructor Logo::Logo(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")); 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); } else { sprite[i]->setPosX(-181 - i); } 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; } // Destructor Logo::~Logo() { delete texture; for (auto s : sprite) { delete s; } delete eventHandler; } // Comprueba el manejador de eventos void Logo::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 Logo::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 for (int i = 1; i < sprite.size(); i++) { const int speed = 30; const int dest = 37; completed[0] = true; if (sprite[i]->getPosX() != 37 && completed[i - 1] == true) { if (i % 2 == 0) { sprite[i]->incPosX(-speed); if (sprite[i]->getPosX() < dest) { completed[i] = true; sprite[i]->setPosX(dest); } } else { sprite[i]->incPosX(speed); if (sprite[i]->getPosX() > dest) { completed[i] = true; sprite[i]->setPosX(dest); } } } } // Comprueba si ha terminado el logo if (counter == endLogo + postLogo) { section.name = SECTION_PROG_QUIT; section.subsection = 0; } } } // Dibuja en pantalla void Logo::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(); } // Vuelca el contenido del renderizador en pantalla screen->blit(); } // Bucle para el logo del juego section_t Logo::run() { // Detiene la música JA_StopMusic(); while (section.name == SECTION_PROG_LOGO) { update(); render(); } return section; }