diff --git a/media/music/loading_sound1.ogg b/media/music/loading_sound1.ogg new file mode 100644 index 0000000..c10d9ea Binary files /dev/null and b/media/music/loading_sound1.ogg differ diff --git a/media/music/loading_sound2.ogg b/media/music/loading_sound2.ogg new file mode 100644 index 0000000..67c8c55 Binary files /dev/null and b/media/music/loading_sound2.ogg differ diff --git a/media/music/loading_sound3.ogg b/media/music/loading_sound3.ogg new file mode 100644 index 0000000..5a8b819 Binary files /dev/null and b/media/music/loading_sound3.ogg differ diff --git a/source/director.cpp b/source/director.cpp index 8da9785..899bede 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -188,6 +188,9 @@ bool Director::setFileList() asset->add("/media/music/title.ogg", music); asset->add("/media/music/game.ogg", music); + asset->add("/media/music/loading_sound1.ogg", music); + asset->add("/media/music/loading_sound2.ogg", music); + asset->add("/media/music/loading_sound3.ogg", music); asset->add("/media/sound/item.wav", sound); diff --git a/source/intro.cpp b/source/intro.cpp index ffe7572..97ce471 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -14,41 +14,23 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset) texture2 = new LTexture(renderer, asset->get("loading_screen2.png")); sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer); sprite2 = new Sprite(0, 0, texture2->getWidth(), texture2->getHeight(), texture2, renderer); + loadingSound1 = JA_LoadMusic(asset->get("loading_sound1.ogg").c_str()); + loadingSound2 = JA_LoadMusic(asset->get("loading_sound2.ogg").c_str()); + loadingSound3 = JA_LoadMusic(asset->get("loading_sound3.ogg").c_str()); - text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); + // text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); // Inicializa variables + preCounter = 0; counter = 0; section.name = SECTION_PROG_INTRO; section.subsection = 0; ticks = 0; ticksSpeed = 15; - counterLoad1 = 0; - counterLoad2 = 0; - - 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); + loadCounter = 0; + loadCounter = 0; + load1 = true; + load2 = false; } // Destructor @@ -59,8 +41,11 @@ Intro::~Intro() delete sprite; delete sprite2; delete eventHandler; + JA_DeleteMusic(loadingSound1); + JA_DeleteMusic(loadingSound2); + JA_DeleteMusic(loadingSound3); - delete text; + // delete text; } // Comprueba el manejador de eventos @@ -85,44 +70,102 @@ void Intro::checkEventHandler() } } -// Gestiona la primera parte de la carga -void Intro::updateLoad1() +// Gestiona el contador de carga +void Intro::updateLoad() { - counterLoad1 = std::min(counter / 3, 65); + if (load1) + { + loadCounter = counter / 20; + if (loadCounter == 25) + { + load1 = false; + load2 = true; + loadCounter = 0; + JA_PlayMusic(loadingSound3); + } + } + else + { + loadCounter += 2; + loadCounter = std::min(loadCounter, 768); + } } -// Gestiona la segunda parte de la carga -void Intro::updateLoad2() +// Gestiona el contador interno +void Intro::updateCounter() { - if (counterLoad1 == 65) + if (preCounter >= 50) { - counterLoad2 += 2; - counterLoad2 = std::min(counterLoad2, 768); + if (counter == 0) + { + JA_PlayMusic(loadingSound2); + } + counter++; + } + else + { + preCounter++; } } // Dibuja la pantalla de carga void Intro::renderLoad() { - if (counterLoad1 <= 64) + // Carga 1 - Blanco y negro + if (load1) { sprite->render(); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_Rect rect = {0, 0 + counterLoad1, 256, 64 - counterLoad1}; - SDL_RenderFillRect(renderer, &rect); + // Muestra las lineas 0..63 + if (loadCounter < 8) + { + SDL_Rect rect = {0, 0 + loadCounter, 256, 8 - loadCounter}; + SDL_RenderFillRect(renderer, &rect); - rect.y += 64; - SDL_RenderFillRect(renderer, &rect); + for (int i = 0; i < 6; i++) + { + rect.y += 8; + SDL_RenderFillRect(renderer, &rect); + } + rect.y += 8; + rect.h = 128; + SDL_RenderFillRect(renderer, &rect); + } + // Muestra las lineas 64..127 + else if (loadCounter >= 8 && loadCounter < 16) + { + SDL_Rect rect = {0, 64 + (loadCounter - 8), 256, 8 - (loadCounter - 8)}; + SDL_RenderFillRect(renderer, &rect); - rect.y += 64; - SDL_RenderFillRect(renderer, &rect); + for (int i = 0; i < 6; i++) + { + rect.y += 8; + SDL_RenderFillRect(renderer, &rect); + } + rect.y += 8; + rect.h = 64; + SDL_RenderFillRect(renderer, &rect); + } + // Muestra las lineas 128..191 + else if (loadCounter >= 16 && loadCounter < 23) + { + SDL_Rect rect = {0, 128 + (loadCounter - 16), 256, 8 - (loadCounter - 16)}; + SDL_RenderFillRect(renderer, &rect); + + for (int i = 0; i < 6; i++) + { + rect.y += 8; + SDL_RenderFillRect(renderer, &rect); + } + } } else + // Carga 2 - Color { sprite->render(); SDL_Rect rect = {0, 0, 8, 8}; - for (int i = 0; i < counterLoad2; i++) + for (int i = 0; i < loadCounter; i++) { rect.x = (i * 8) % 256; rect.y = (i / 32) * 8; @@ -145,20 +188,18 @@ void Intro::update() // Comprueba el manejador de eventos checkEventHandler(); - // Incrementa el contador - counter++; + // Gestiona el contador interno + updateCounter(); - // Gestiona la primera parte de la carga - updateLoad1(); - - // Gestiona la segunda parte de la carga - updateLoad2(); + // Gestiona el contador de carga + updateLoad(); // Comprueba si ha terminado la intro - if (counterLoad2 >= 768) + if (loadCounter >= 768) { section.name = SECTION_PROG_TITLE; section.subsection = 0; + JA_StopMusic(); } } } @@ -174,8 +215,8 @@ void Intro::render() // Dibuja la pantalla de carga renderLoad(); - text->write(0, 0, std::to_string(counterLoad1)); - text->write(0, 8, std::to_string(counterLoad2)); + // text->write(0, 0, std::to_string(loadCounter)); + // text->write(0, 8, std::to_string(loadCounter)); // Vuelca el contenido del renderizador en pantalla screen->blit(); @@ -184,8 +225,8 @@ void Intro::render() // Bucle para el logo del juego section_t Intro::run() { - // Detiene la música - JA_StopMusic(); + // Inicia el sonido de carga + JA_PlayMusic(loadingSound1); while (section.name == SECTION_PROG_INTRO) { diff --git a/source/intro.h b/source/intro.h index 00d6ade..63c7e72 100644 --- a/source/intro.h +++ b/source/intro.h @@ -19,23 +19,24 @@ class Intro { 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 - Sprite *sprite; // Sprite para manejar la textura - 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 counterLoad1; - int counterLoad2; + 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 + Sprite *sprite; // Sprite para manejar la textura + Sprite *sprite2; // Sprite para manejar la textura2 + int preCounter; // Contador previo para realizar una pausa inicial + 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 loadCounter; // Contador para controlar las cargas + bool load1, load2; + JA_Music loadingSound1, loadingSound2, loadingSound3; - Text *text; + // Text *text; // Actualiza las variables void update(); @@ -46,11 +47,11 @@ private: // Comprueba el manejador de eventos void checkEventHandler(); - // Gestiona la primera parte de la carga - void updateLoad1(); + // Gestiona el contador interno + void updateCounter(); - // Gestiona la segunda parte de la carga - void updateLoad2(); + // Gestiona el contador de carga + void updateLoad(); // Dibuja la pantalla de carga void renderLoad();