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.subsection = 0;
section.name = SECTION_PROG_INTRO;
// Crea el objeto que controla los ficheros de recursos
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
eventHandler = new SDL_Event();
texture = new LTexture(renderer, asset->get("loading_screen1.png"));
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);
loadingScreenTexture1 = new LTexture(renderer, asset->get("loading_screen1.png"));
loadingScreenTexture2 = new LTexture(renderer, asset->get("loading_screen2.png"));
sprite1 = new Sprite(0, 0, loadingScreenTexture1->getWidth(), loadingScreenTexture1->getHeight(), loadingScreenTexture1, renderer);
sprite2 = new Sprite(0, 0, loadingScreenTexture2->getWidth(), loadingScreenTexture2->getHeight(), loadingScreenTexture2, 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());
@@ -26,9 +26,35 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset)
ticks = 0;
ticksSpeed = 15;
loadCounter = 0;
loadCounter = 0;
load1 = true;
load2 = false;
lineCounter = 0;
loadingFirstPart = true;
// 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
screen->setBorderColor(stringToColor("black"));
@@ -37,9 +63,9 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset)
// Destructor
Intro::~Intro()
{
delete texture;
delete texture2;
delete sprite;
delete loadingScreenTexture1;
delete loadingScreenTexture2;
delete sprite1;
delete sprite2;
delete eventHandler;
JA_DeleteMusic(loadingSound1);
@@ -74,17 +100,34 @@ void Intro::checkEventHandler()
// Gestiona el contador de carga
void Intro::updateLoad()
{
if (load1)
// Primera parte de la carga, la parte en blanco ynegro
if (loadingFirstPart)
{
loadCounter = counter / 20;
if (loadCounter == 25)
// Cada 5 pasos el loadCounter se incrementa en uno
const int numSteps = 5;
loadCounter = counter / numSteps;
if (loadCounter < 192)
{
load1 = false;
load2 = true;
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);
}
}
// Segunda parte de la carga, la parte de los bloques en color
else
{
loadCounter += 2;
@@ -96,7 +139,7 @@ void Intro::updateLoad()
void Intro::updateCounter()
{
if (preCounter >= 50)
{
{ // Si el contador previo ha llegado a 50, empieza a contar el contador normal
if (counter == 0)
{
JA_PlayMusic(loadingSound2);
@@ -104,7 +147,7 @@ void Intro::updateCounter()
counter++;
}
else
{
{ // Actualiza el precontador
preCounter++;
}
}
@@ -113,58 +156,22 @@ void Intro::updateCounter()
void Intro::renderLoad()
{
// 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);
// Muestra las lineas 0..63
if (loadCounter < 8)
for (int i = 0; i < 192; ++i)
{
SDL_Rect rect = {0, 0 + loadCounter, 256, 8 - loadCounter};
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);
}
SDL_RenderDrawLine(renderer, lines[i].x1, lines[i].y, lines[i].x2, lines[i].y);
}
}
else
// Carga 2 - Color
{
sprite->render();
sprite1->render();
SDL_Rect rect = {0, 0, 8, 8};
for (int i = 0; i < loadCounter; ++i)
{
@@ -216,8 +223,6 @@ void Intro::render()
// Dibuja la pantalla de carga
renderLoad();
// 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();

View File

@@ -19,22 +19,27 @@
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
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
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 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;
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 *loadingScreenTexture1; // Textura con la pantalla de carga en blanco y negro
LTexture *loadingScreenTexture2; // Textura con la pantalla de carga en color
SDL_Event *eventHandler; // Manejador de eventos
Sprite *sprite1; // Sprite para manejar la textura loadingScreenTexture1
Sprite *sprite2; // Sprite para manejar la textura loadingScreenTexture2
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
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
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
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;

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) Crear la tipografia de corazon
(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) Ha de haber un modo demo en el que se muestran las habitaciones predefinidas
(A) Menu de pausa/salir