From 8e612aaa2ed3214172487775c21c1ce5ec8f4713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Wed, 7 Feb 2024 16:59:25 +0100 Subject: [PATCH] Ya se dibuja el gif en pantalla --- source/gamestate_title.cpp | 88 +++++++++++++++++++++++++++-------- source/gamestate_title.h | 10 ++++ source/jail_engine/paleta.cpp | 32 +++++-------- source/jail_engine/paleta.h | 4 +- 4 files changed, 92 insertions(+), 42 deletions(-) diff --git a/source/gamestate_title.cpp b/source/gamestate_title.cpp index c872352..16b9025 100644 --- a/source/gamestate_title.cpp +++ b/source/gamestate_title.cpp @@ -39,6 +39,12 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset * } SDL_SetTextureBlendMode(bgTexture, SDL_BLENDMODE_BLEND); + // Carga la surface con los gráficos de la pantalla de carga + pInit(renderer, 256, 192); + loading_screen = pLoadSurface("data/title/loading_screen_color.gif"); + pLoadPal("data/title/loading_screen_color.gif"); + pSetSource(loading_screen); + // Inicializa variables counter = 0; section->name = SECTION_TITLE; @@ -48,6 +54,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset * marqueeSpeed = 3; initMarquee(); showCheevos = false; + state = show_loading_screen; // Crea y rellena la textura para mostrar los logros createCheevosTexture(); @@ -69,6 +76,7 @@ Title::~Title() delete cheevosTexture; delete text; delete infoText; + pDeleteSurface(loading_screen); SDL_DestroyTexture(bgTexture); } @@ -264,23 +272,43 @@ void Title::update() // Comprueba las entradas checkInput(); - // Incrementa el contador - counter++; - - // Actualiza la marquesina - updateMarquee(); - // Actualiza las notificaciones screen->updateNotifier(); - // Si el contador alcanza cierto valor, termina la seccion - if (counter == 2200) + // Incrementa el contador + counter++; + + switch (state) { - if (!showCheevos) + case show_loading_screen: + if (counter == 500) { - section->name = SECTION_CREDITS; - section->subsection = 0; + counter = 0; + state = show_menu; } + break; + + case fade_loading_screen: + break; + + case show_menu: + + // Actualiza la marquesina + updateMarquee(); + + // Si el contador alcanza cierto valor, termina la seccion + if (counter == 2200) + { + if (!showCheevos) + { + section->name = SECTION_CREDITS; + section->subsection = 0; + } + } + break; + + default: + break; } } } @@ -291,16 +319,36 @@ void Title::render() // Prepara para empezar a dibujar en la textura de juego screen->start(); - // Dibuja la textura de fondo - SDL_RenderCopy(renderer, bgTexture, nullptr, nullptr); - - // Dibuja la marquesina - renderMarquee(); - - // Dibuja la información de logros - if (showCheevos) + switch (state) { - cheevosSprite->render(); + case show_loading_screen: + // Dibuja la textura de fondo + SDL_RenderCopy(renderer, bgTexture, nullptr, nullptr); + + // Dibuja la pantalla de carga + pBlit(0, 0, 0, 0, 256, 192); + pFlip(renderer); + break; + + case fade_loading_screen: + break; + + case show_menu: + // Dibuja la textura de fondo + SDL_RenderCopy(renderer, bgTexture, nullptr, nullptr); + + // Dibuja la marquesina + renderMarquee(); + + // Dibuja la información de logros + if (showCheevos) + { + cheevosSprite->render(); + } + break; + + default: + break; } // Vuelca el contenido del renderizador en pantalla diff --git a/source/gamestate_title.h b/source/gamestate_title.h index cdc1b94..6f01b98 100644 --- a/source/gamestate_title.h +++ b/source/gamestate_title.h @@ -7,6 +7,7 @@ #include "jail_engine/input.h" #include "jail_engine/jail_audio.h" #include "jail_engine/resource.h" +#include "jail_engine/paleta.h" #include "jail_engine/screen.h" #include "jail_engine/sprite.h" #include "jail_engine/text.h" @@ -28,6 +29,13 @@ private: bool enabled; // Solo se escriben y mueven si estan habilitadas }; + enum states_e + { + show_loading_screen, + fade_loading_screen, + show_menu + }; + // Objetos y punteros SDL_Renderer *renderer; // El renderizador de la ventana Screen *screen; // Objeto encargado de dibujar en pantalla @@ -57,6 +65,8 @@ private: int marqueeSpeed; // Velocidad de desplazamiento de la marquesina bool showCheevos; // Indica si se muestra por pantalla el listado de logros SDL_Rect cheevosTextureView; // Zona visible de la textura con el listado de logros + states_e state; // Estado en el que se encuentra el bucle principal + jSurface loading_screen; // Surface con los gráficos de la pantalla de carga // Actualiza las variables void update(); diff --git a/source/jail_engine/paleta.cpp b/source/jail_engine/paleta.cpp index f05335d..45f4bb2 100644 --- a/source/jail_engine/paleta.cpp +++ b/source/jail_engine/paleta.cpp @@ -8,8 +8,6 @@ struct jSurface_s Uint16 w, h; }; -static SDL_Window *jWin = NULL; -static SDL_Renderer *jRen = NULL; static SDL_Texture *jTex = NULL; static jSurface jScreen; static jSurface jDestSurf; @@ -17,9 +15,17 @@ static jSurface jSourceSurf = NULL; static Uint32 paleta[256]; static int jWidth = 320; static int jHeight = 240; -static int jZoom = 2; static int transparentColor = 0; +void pInit(SDL_Renderer *renderer, int w, int h) +{ + jWidth = w; + jHeight = h; + jTex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, w, h); + jScreen = pNewSurface(w, h); + jDestSurf = jScreen; +} + jSurface pNewSurface(int w, int h) { jSurface surf = (jSurface)malloc(sizeof(jSurface_s)); @@ -115,20 +121,6 @@ void pLoadPal(const char *filename) } } -void pInit(const char *titol, int w, int h, int z) -{ - SDL_Init(SDL_INIT_EVERYTHING); - jWidth = w; - jHeight = h; - jZoom = z; - jWin = SDL_CreateWindow(titol, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w * z, h * z, SDL_WINDOW_SHOWN); - jRen = SDL_CreateRenderer(jWin, -1, 0); - SDL_RenderSetLogicalSize(jRen, w, h); - jTex = SDL_CreateTexture(jRen, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, w, h); - jScreen = pNewSurface(w, h); - jDestSurf = jScreen; -} - void pSetPal(int index, Uint32 color) { paleta[index] = color; @@ -140,7 +132,7 @@ void pCls(Uint8 color) jDestSurf->data[i] = color; } -void pFlip() +void pFlip(SDL_Renderer *renderer) { Uint32 *pixels; int pitch; @@ -148,8 +140,8 @@ void pFlip() for (int i = 0; i < jWidth * jHeight; ++i) pixels[i] = paleta[jScreen->data[i]]; SDL_UnlockTexture(jTex); - SDL_RenderCopy(jRen, jTex, NULL, NULL); - SDL_RenderPresent(jRen); + SDL_RenderCopy(renderer, jTex, NULL, NULL); + //SDL_RenderPresent(jRen); } void pPutPixel(int x, int y, Uint8 color) diff --git a/source/jail_engine/paleta.h b/source/jail_engine/paleta.h index aad7d3d..3d6a0e4 100644 --- a/source/jail_engine/paleta.h +++ b/source/jail_engine/paleta.h @@ -15,11 +15,11 @@ Uint8 pGetPixel(int x, int y); void pBlit(int dx, int dy, int sx, int sy, int w, int h); -void pInit(const char *titol, int w, int h, int z); +void pInit(SDL_Renderer *renderer, int w, int h); void pSetPal(int index, Uint32 color); void pLoadPal(const char *filename); void pCls(Uint8 color); -void pFlip(); +void pFlip(SDL_Renderer *renderer);