Optimizada la intro

This commit is contained in:
2022-11-30 10:10:10 +01:00
parent 6557dea2bb
commit 34fc2b6b06
2 changed files with 24 additions and 96 deletions

View File

@@ -36,17 +36,8 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *
ticks = 0; ticks = 0;
ticksSpeed = 15; ticksSpeed = 15;
loadCounter = 0; loadCounter = 0;
lineCounter = 0;
loadingFirstPart = true; loadingFirstPart = true;
loadRect = {0, 0, 50, 1}; loadRect = {0, 0, 51, 1};
// 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 // Establece el orden de las lineas para imitar el direccionamiento de memoria del spectrum
for (int i = 0; i < 192; ++i) for (int i = 0; i < 192; ++i)
@@ -152,40 +143,14 @@ void Intro::updateLoad()
{ {
// Primera parte de la carga, la parte en blanco ynegro // Primera parte de la carga, la parte en blanco ynegro
if (loadingFirstPart) if (loadingFirstPart)
/*{
// Cada 5 pasos el loadCounter se incrementa en uno
const int numSteps = 5;
loadCounter = counter / numSteps;
if (loadCounter < 192)
{
const int step = 256 / numSteps;
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;
JA_PlayMusic(loadingSound3);
}
}*/
{ {
// Cada 5 pasos el loadCounter se incrementa en uno // Cada 5 pasos el loadCounter se incrementa en uno
const int numSteps = 5; const int numSteps = 5;
const int step = 51;
loadCounter = counter / numSteps; loadCounter = counter / numSteps;
if (loadCounter < 192) if (loadCounter < 192)
{ {
const int step = 256 / numSteps;
lines[lineIndex[loadCounter]].x1 = step * (counter % numSteps);
loadRect.x = step * (counter % numSteps); loadRect.x = step * (counter % numSteps);
loadRect.y = lineIndex[loadCounter]; loadRect.y = lineIndex[loadCounter];
sprite1->setSpriteClip(loadRect); sprite1->setSpriteClip(loadRect);
@@ -196,6 +161,9 @@ void Intro::updateLoad()
{ {
loadingFirstPart = false; loadingFirstPart = false;
loadCounter = 0; loadCounter = 0;
loadRect = {0, 0, 16, 8};
sprite2->setRect(loadRect);
sprite2->setSpriteClip(loadRect);
JA_PlayMusic(loadingSound3); JA_PlayMusic(loadingSound3);
} }
} }
@@ -203,60 +171,36 @@ void Intro::updateLoad()
else else
{ {
loadCounter += 2; loadCounter += 2;
loadCounter = std::min(loadCounter, 768); loadRect.x = (loadCounter * 8) % 256;
loadRect.y = (loadCounter / 32) * 8;
sprite2->setSpriteClip(loadRect);
sprite2->setRect(loadRect);
// Comprueba si ha terminado la intro
if (loadCounter >= 768)
{
section.name = SECTION_PROG_TITLE;
section.subsection = 0;
JA_StopMusic();
}
} }
} }
// Gestiona el contador interno // Gestiona el contador interno
void Intro::updateCounter() void Intro::updateCounter()
{ {
if (preCounter >= 50) (preCounter >= 50) ? counter++ : preCounter++;
{ // Si el contador previo ha llegado a 50, empieza a contar el contador normal
if (counter == 0) if (counter == 1)
{ {
JA_PlayMusic(loadingSound2); JA_PlayMusic(loadingSound2);
}
counter++;
}
else
{ // Actualiza el precontador
preCounter++;
} }
} }
// Dibuja la pantalla de carga // Dibuja la pantalla de carga
void Intro::renderLoad() void Intro::renderLoad()
{ {
// Carga 1 - Blanco y negro loadingFirstPart ? sprite1->render() : sprite2->render();
if (loadingFirstPart)
/*{
// 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);
for (int i = 0; i < 192; ++i)
{
SDL_RenderDrawLine(renderer, lines[i].x1, lines[i].y, lines[i].x2, lines[i].y);
}
}*/
{
sprite1->render();
}
else
// Carga 2 - Color
{
sprite1->render();
SDL_Rect rect = {0, 0, 8, 8};
for (int i = 0; i < loadCounter; ++i)
{
rect.x = (i * 8) % 256;
rect.y = (i / 32) * 8;
sprite2->setRect(rect);
sprite2->setSpriteClip(rect);
sprite2->render();
}
}
} }
// Actualiza las variables // Actualiza las variables
@@ -279,14 +223,6 @@ void Intro::update()
// Actualiza las notificaciones // Actualiza las notificaciones
screen->updateNotifier(); screen->updateNotifier();
// Comprueba si ha terminado la intro
if (loadCounter >= 768)
{
section.name = SECTION_PROG_TITLE;
section.subsection = 0;
JA_StopMusic();
}
} }
} }
@@ -296,12 +232,6 @@ void Intro::render()
// Prepara para empezar a dibujar en la textura de juego // Prepara para empezar a dibujar en la textura de juego
screen->start(); screen->start();
// Limpia la pantalla
// screen->clean();
if (!loadingFirstPart)
screen->clean();
// Dibuja la pantalla de carga // Dibuja la pantalla de carga
renderLoad(); renderLoad();

View File

@@ -38,14 +38,12 @@ private:
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
int lineCounter; // Contador para dibujar las lineas de carga
bool loadingFirstPart; // Para saber en que parte de la carga se encuentra bool loadingFirstPart; // Para saber en que parte de la carga se encuentra
JA_Music loadingSound1; // Sonidos para imitar la carga tipo spectrum JA_Music loadingSound1; // Sonidos para imitar la carga tipo spectrum
JA_Music loadingSound2; // 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 JA_Music loadingSound3; // Sonidos para imitar la carga tipo spectrum
h_line_t lines[192]; // Las 192 lineas que forman la pantalla de carga
int lineIndex[192]; // El orden en el que se procesan las 192 lineas de la pantalla de carga int lineIndex[192]; // El orden en el que se procesan las 192 lineas de la pantalla de carga
SDL_Rect loadRect; SDL_Rect loadRect; // Rectangulo para dibujar la pantalla de carga
// Actualiza las variables // Actualiza las variables
void update(); void update();