#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("loading_screen2.png")); sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); // Inicializa variables counter = 0; section.name = SECTION_PROG_TITLE; section.subsection = 0; ticks = 0; ticksSpeed = 15; } // Destructor Title::~Title() { delete eventHandler; delete texture; delete sprite; delete text; } // 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; } // Comprueba si se ha pulsado alguna tecla else if ((eventHandler->type == SDL_KEYDOWN) and (eventHandler->key.repeat == 0)) { switch (eventHandler->key.keysym.scancode) { case SDL_SCANCODE_ESCAPE: section.name = SECTION_PROG_QUIT; break; case SDL_SCANCODE_RETURN: section.name = SECTION_PROG_GAME; section.subsection = 0; break; default: break; } } } } // 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++; // Comprueba si ha pasado mucho tiempo y acaba el titulo if (counter == 1000) { section.name = SECTION_PROG_LOGO; 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 sprite->render(); SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255); SDL_Rect rect = {0, 192 / 5 * 4, 256, 8}; SDL_RenderFillRect(renderer, &rect); if (counter % 80 < 60) text->writeCentered(256 / 2, 192 / 5 * 4, "PRESS ENTER TO PLAY"); //text->write(0, 0, std::to_string(counter)); // 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_TITLE) { update(); render(); } return section; }