Actualizado el proceso de dibujado de la pantalla de carga

This commit is contained in:
2022-10-11 13:16:26 +02:00
parent bb9228d672
commit 91412889c3
4 changed files with 92 additions and 80 deletions

View File

@@ -9,6 +9,8 @@ Director::Director(std::string path)
section.name = SECTION_PROG_GAME; section.name = SECTION_PROG_GAME;
section.subsection = 0; section.subsection = 0;
section.name = SECTION_PROG_INTRO;
// Crea el objeto que controla los ficheros de recursos // Crea el objeto que controla los ficheros de recursos
asset = new Asset(path.substr(0, path.find_last_of("\\/"))); asset = new Asset(path.substr(0, path.find_last_of("\\/")));

View File

@@ -10,10 +10,10 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset)
// Reserva memoria para los punteros // Reserva memoria para los punteros
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
texture = new LTexture(renderer, asset->get("loading_screen1.png")); loadingScreenTexture1 = new LTexture(renderer, asset->get("loading_screen1.png"));
texture2 = new LTexture(renderer, asset->get("loading_screen2.png")); loadingScreenTexture2 = new LTexture(renderer, asset->get("loading_screen2.png"));
sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer); sprite1 = new Sprite(0, 0, loadingScreenTexture1->getWidth(), loadingScreenTexture1->getHeight(), loadingScreenTexture1, renderer);
sprite2 = new Sprite(0, 0, texture2->getWidth(), texture2->getHeight(), texture2, renderer); sprite2 = new Sprite(0, 0, loadingScreenTexture2->getWidth(), loadingScreenTexture2->getHeight(), loadingScreenTexture2, renderer);
loadingSound1 = JA_LoadMusic(asset->get("loading_sound1.ogg").c_str()); loadingSound1 = JA_LoadMusic(asset->get("loading_sound1.ogg").c_str());
loadingSound2 = JA_LoadMusic(asset->get("loading_sound2.ogg").c_str()); loadingSound2 = JA_LoadMusic(asset->get("loading_sound2.ogg").c_str());
loadingSound3 = JA_LoadMusic(asset->get("loading_sound3.ogg").c_str()); loadingSound3 = JA_LoadMusic(asset->get("loading_sound3.ogg").c_str());
@@ -26,9 +26,35 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset)
ticks = 0; ticks = 0;
ticksSpeed = 15; ticksSpeed = 15;
loadCounter = 0; loadCounter = 0;
loadCounter = 0; lineCounter = 0;
load1 = true; loadingFirstPart = true;
load2 = false;
// Ls lineas que tapan la primera textura
for (int i = 0; i < 192; ++i)
{
lines[i].x1 = 0;
lines[i].x2 = 257;
lines[i].y = i;
}
// Establece el orden de las lineas para imitar el direccionamiento de memoria del spectrum
for (int i = 0; i < 192; ++i)
{
if (i < 64)
{ // Primer bloque de 2K
lineIndex[i] = ((i % 8) * 8) + (i / 8);
}
else if (i >= 64 && i < 128)
{ // Segundo bloque de 2K
lineIndex[i] = 64 + ((i % 8) * 8) + ((i - 64) / 8);
}
else if (i >= 128 && i < 192)
{ // tercer bloque de 2K
lineIndex[i] = 128 + ((i % 8) * 8) + ((i - 128) / 8);
}
}
// Cambia el color del borde // Cambia el color del borde
screen->setBorderColor(stringToColor("black")); screen->setBorderColor(stringToColor("black"));
@@ -37,9 +63,9 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset)
// Destructor // Destructor
Intro::~Intro() Intro::~Intro()
{ {
delete texture; delete loadingScreenTexture1;
delete texture2; delete loadingScreenTexture2;
delete sprite; delete sprite1;
delete sprite2; delete sprite2;
delete eventHandler; delete eventHandler;
JA_DeleteMusic(loadingSound1); JA_DeleteMusic(loadingSound1);
@@ -74,17 +100,34 @@ void Intro::checkEventHandler()
// Gestiona el contador de carga // Gestiona el contador de carga
void Intro::updateLoad() void Intro::updateLoad()
{ {
if (load1) // Primera parte de la carga, la parte en blanco ynegro
if (loadingFirstPart)
{ {
loadCounter = counter / 20; // Cada 5 pasos el loadCounter se incrementa en uno
if (loadCounter == 25) const int numSteps = 5;
loadCounter = counter / numSteps;
if (loadCounter < 192)
{ {
load1 = false; const int step = 256 / numSteps;
load2 = true; lines[lineIndex[loadCounter]].x1 = step * (counter % numSteps);
// Elimina por completo la linea anterior
if (loadCounter > 0)
{
lines[lineIndex[loadCounter - 1]].x1 = 256;
}
}
// Una vez actualizadas las 192 lineas, pasa a la segunda fase de la carga
else if (loadCounter == 192)
{
loadingFirstPart = false;
loadCounter = 0; loadCounter = 0;
JA_PlayMusic(loadingSound3); JA_PlayMusic(loadingSound3);
} }
} }
// Segunda parte de la carga, la parte de los bloques en color
else else
{ {
loadCounter += 2; loadCounter += 2;
@@ -96,7 +139,7 @@ void Intro::updateLoad()
void Intro::updateCounter() void Intro::updateCounter()
{ {
if (preCounter >= 50) if (preCounter >= 50)
{ { // Si el contador previo ha llegado a 50, empieza a contar el contador normal
if (counter == 0) if (counter == 0)
{ {
JA_PlayMusic(loadingSound2); JA_PlayMusic(loadingSound2);
@@ -104,7 +147,7 @@ void Intro::updateCounter()
counter++; counter++;
} }
else else
{ { // Actualiza el precontador
preCounter++; preCounter++;
} }
} }
@@ -113,58 +156,22 @@ void Intro::updateCounter()
void Intro::renderLoad() void Intro::renderLoad()
{ {
// Carga 1 - Blanco y negro // Carga 1 - Blanco y negro
if (load1) if (loadingFirstPart)
{ {
sprite->render(); // Dibuja la textura de pantalla de carga en blanco y negro en pantalla
sprite1->render();
// Dibuja las 192 lineas negras sobre la textura
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
for (int i = 0; i < 192; ++i)
// Muestra las lineas 0..63
if (loadCounter < 8)
{ {
SDL_Rect rect = {0, 0 + loadCounter, 256, 8 - loadCounter}; SDL_RenderDrawLine(renderer, lines[i].x1, lines[i].y, lines[i].x2, lines[i].y);
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);
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 else
// Carga 2 - Color // Carga 2 - Color
{ {
sprite->render(); sprite1->render();
SDL_Rect rect = {0, 0, 8, 8}; SDL_Rect rect = {0, 0, 8, 8};
for (int i = 0; i < loadCounter; ++i) for (int i = 0; i < loadCounter; ++i)
{ {
@@ -216,8 +223,6 @@ void Intro::render()
// Dibuja la pantalla de carga // Dibuja la pantalla de carga
renderLoad(); renderLoad();
// text->write(0, 0, std::to_string(loadCounter));
// text->write(0, 8, std::to_string(loadCounter));
// Vuelca el contenido del renderizador en pantalla // Vuelca el contenido del renderizador en pantalla
screen->blit(); screen->blit();

View File

@@ -19,22 +19,27 @@
class Intro class Intro
{ {
private: private:
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
Screen *screen; // Objeto encargado de dibujar en pantalla Screen *screen; // Objeto encargado de dibujar en pantalla
Asset *asset; // Objeto con los ficheros de recursos Asset *asset; // Objeto con los ficheros de recursos
LTexture *texture; // Textura con los graficos "JAILGAMES" LTexture *loadingScreenTexture1; // Textura con la pantalla de carga en blanco y negro
LTexture *texture2; // Textura con los graficos "Since 1998" LTexture *loadingScreenTexture2; // Textura con la pantalla de carga en color
SDL_Event *eventHandler; // Manejador de eventos SDL_Event *eventHandler; // Manejador de eventos
Sprite *sprite; // Sprite para manejar la textura Sprite *sprite1; // Sprite para manejar la textura loadingScreenTexture1
Sprite *sprite2; // Sprite para manejar la textura2 Sprite *sprite2; // Sprite para manejar la textura loadingScreenTexture2
int preCounter; // Contador previo para realizar una pausa inicial int preCounter; // Contador previo para realizar una pausa inicial
int counter; // Contador int counter; // Contador
section_t section; // Estado del bucle principal para saber si continua o se sale section_t section; // Estado del bucle principal para saber si continua o se sale
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
int loadCounter; // Contador para controlar las cargas int loadCounter; // Contador para controlar las cargas
bool load1, load2; int lineCounter; // Contador para dibujar las lineas de carga
JA_Music loadingSound1, loadingSound2, loadingSound3; bool loadingFirstPart; // Para saber en que parte de la carga se encuentra
JA_Music loadingSound1; // Sonidos para imitar la carga tipo spectrum
JA_Music loadingSound2; // Sonidos para imitar la carga tipo spectrum
JA_Music loadingSound3; // Sonidos para imitar la carga tipo spectrum
h_line_t lines[192];
int lineIndex[192];
// Text *text; // Text *text;

View File

@@ -40,7 +40,7 @@ x (A) La pantalla de titulo no tiene menu, solo un PRESS ENTER TO PLAY
(A) Añadir color y efectos a los creditos (A) Añadir color y efectos a los creditos
(A) Crear la tipografia de corazon (A) Crear la tipografia de corazon
(A) Los Creditos se han de ir escribiendo letra a letra (A) Los Creditos se han de ir escribiendo letra a letra
(A) Arreglar la pantalla de carga para que cargue bit a bit x (A) Arreglar la pantalla de carga para que cargue bit a bit
(A) La musica del titulo ha de seguir sonando en los creditos y el ¿logo? (A) La musica del titulo ha de seguir sonando en los creditos y el ¿logo?
(A) Ha de haber un modo demo en el que se muestran las habitaciones predefinidas (A) Ha de haber un modo demo en el que se muestran las habitaciones predefinidas
(A) Menu de pausa/salir (A) Menu de pausa/salir