#include "logo.h" #ifdef __MIPSEL__ #include #include #endif #define INIT_FADE 100 #define END_LOGO 200 // Constructor Logo::Logo(SDL_Renderer *renderer, Screen *screen, std::string *fileList) { // Copia la dirección de los objetos mRenderer = renderer; mScreen = screen; mFileList = fileList; // Reserva memoria para los punteros mEventHandler = new SDL_Event(); mTexture = new LTexture(); mSprite = new Sprite(); // Crea un backbuffer para el renderizador mBackbuffer = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, SCREEN_WIDTH, SCREEN_HEIGHT); if (mBackbuffer == NULL) printf("Backbuffer could not be created!\nSDL Error: %s\n", SDL_GetError()); } // Destructor Logo::~Logo() { mRenderer = nullptr; mScreen = nullptr; mFileList = nullptr; mTexture->unload(); delete mTexture; mTexture = nullptr; delete mSprite; mSprite = nullptr; delete mEventHandler; mEventHandler = nullptr; SDL_DestroyTexture(mBackbuffer); mBackbuffer = nullptr; } // Inicializa las variables necesarias para la sección 'Logo' void Logo::init() { // Carga los recursos loadMedia(); // Inicializa variables mCounter = 0; mSection.name = PROG_SECTION_LOGO; mSection.subsection = 0; mSprite->init(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, mTexture, mRenderer); mTicks = 0; mTicksSpeed = 15; } // Carga los recursos necesarios para la sección 'Logo' bool Logo::loadMedia() { bool success = true; success &= loadTextureFromFile(mTexture, mFileList[35], mRenderer); return success; } // Bucle para el logo del juego section_t Logo::run() { init(); const SDL_Rect rect = {0, 0, SCREEN_WIDTH, SCREEN_HEIGHT}; const int fadeLenght = END_LOGO - INIT_FADE; while (mSection.name == PROG_SECTION_LOGO) { // Comprueba los eventos que hay en la cola while (SDL_PollEvent(mEventHandler) != 0) { // Evento de salida de la aplicación if (mEventHandler->type == SDL_QUIT) { mSection.name = PROG_SECTION_QUIT; break; } // Cualquier tecla pulsada if ((mEventHandler->type == SDL_KEYDOWN) || (mEventHandler->type == SDL_JOYBUTTONDOWN)) { mSection.name = PROG_SECTION_TITLE; mSection.subsection = TITLE_SECTION_1; } } // Prepara para empezar a dibujar en la textura de juego mScreen->start(); // Limpia la pantalla mScreen->clean(bgColor); // Dibuja los objetos mSprite->render(); // Dibuja el fade if (mCounter >= INIT_FADE) { Uint16 alpha = (255 * (mCounter - INIT_FADE)) / fadeLenght; if (alpha < 256) SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, alpha); else SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255); SDL_RenderFillRect(mRenderer, &rect); } // Vuelca el contenido del renderizador en pantalla mScreen->blit(); // Comprueba si ha terminado el logo if (SDL_GetTicks() - mTicks > mTicksSpeed) { // Actualiza el contador de ticks mTicks = SDL_GetTicks(); if (mCounter == 0) { if (JA_GetMusicState() == JA_MUSIC_PLAYING) JA_StopMusic(); } if (mCounter == END_LOGO + 20) { mCounter = 0; mSection.name = PROG_SECTION_INTRO; mSection.subsection = 0; } else { mCounter++; } } } return mSection; }