diff --git a/source/common/notify.cpp b/source/common/notify.cpp index d75bc5e..1b3ef06 100644 --- a/source/common/notify.cpp +++ b/source/common/notify.cpp @@ -140,4 +140,15 @@ void Notify::showText(std::string text) // Añade la notificación a la lista notifications.push_back(n); +} + +// Indica si hay notificaciones activas +bool Notify::active() +{ + if ((int)notifications.size() > 0) + { + return true; + } + + return false; } \ No newline at end of file diff --git a/source/common/notify.h b/source/common/notify.h index 6a6b406..c4d7f06 100644 --- a/source/common/notify.h +++ b/source/common/notify.h @@ -73,6 +73,9 @@ public: // Muestra una notificación de texto por pantalla; void showText(std::string text); + + // Indica si hay notificaciones activas + bool active(); }; #endif diff --git a/source/common/screen.cpp b/source/common/screen.cpp index b96803f..119dd2d 100644 --- a/source/common/screen.cpp +++ b/source/common/screen.cpp @@ -12,7 +12,6 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options this->asset = asset; // Crea los objetos - //notify = new Notify(renderer, asset->get("smb2_big.png"), asset->get("smb2_big.txt")); notify = new Notify(renderer, asset->get("smb2.png"), asset->get("smb2.txt")); gameCanvasWidth = gameInternalResX; @@ -41,6 +40,9 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options anchor.top = 0; anchor.bottom = gameCanvasHeight; anchor.middle = gameCanvasHeight / 2; + + // Inicializa variables + notifyActive = false; } // Destructor @@ -171,15 +173,7 @@ void Screen::setVideoMode(int fullScreenMode) // Camibia entre pantalla completa y ventana void Screen::switchVideoMode() { - if (options->fullScreenMode == 0) - { - options->fullScreenMode = SDL_WINDOW_FULLSCREEN_DESKTOP; - } - else - { - options->fullScreenMode = 0; - } - + options->fullScreenMode = (options->fullScreenMode == 0) ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0; setVideoMode(options->fullScreenMode); } @@ -303,30 +297,12 @@ void Screen::iniSpectrumFade() spectrumColor.clear(); - color_t c; - c = stringToColor("black"); - spectrumColor.push_back(c); - - c = stringToColor("blue"); - spectrumColor.push_back(c); - - c = stringToColor("red"); - spectrumColor.push_back(c); - - c = stringToColor("magenta"); - spectrumColor.push_back(c); - - c = stringToColor("green"); - spectrumColor.push_back(c); - - c = stringToColor("cyan"); - spectrumColor.push_back(c); - - c = stringToColor("yellow"); - spectrumColor.push_back(c); - - c = stringToColor("bright_white"); - spectrumColor.push_back(c); + // Inicializa el vector de colores + const std::vector vColors = {"black", "blue", "red", "magenta", "green", "cyan", "yellow", "bright_white"}; + for (auto v : vColors) + { + spectrumColor.push_back(stringToColor(p_zxspectrum, v)); + } } // Actualiza el spectrum fade @@ -378,6 +354,7 @@ void Screen::renderFX() void Screen::updateNotifier() { notify->update(); + notifyActive = notify->active(); } // Muestra una notificación de texto por pantalla; @@ -389,6 +366,11 @@ void Screen::showText(std::string text) // Dibuja las notificaciones void Screen::renderNotifications() { + if (!notifyActive) + { + return; + } + SDL_RenderSetLogicalSize(renderer, screenWidth, screenHeight); notify->render(); SDL_RenderSetLogicalSize(renderer, gameCanvasWidth, gameCanvasHeight); diff --git a/source/common/screen.h b/source/common/screen.h index db068a9..bcc5a3c 100644 --- a/source/common/screen.h +++ b/source/common/screen.h @@ -41,6 +41,7 @@ private: anchor_t anchor; // Variable con los anclajes de la pantalla SDL_Rect dest; // Coordenadas donde se va a dibujar la textura del juego sobre la pantalla o ventana color_t borderColor; // Color del borde añadido a la textura de juego para rellenar la pantalla + bool notifyActive; // Indica si hay notificaciones activas // EFECTOS bool fade; // Indica si esta activo el efecto de fade diff --git a/source/common/utils.cpp b/source/common/utils.cpp index bc0117d..df6a3dd 100644 --- a/source/common/utils.cpp +++ b/source/common/utils.cpp @@ -380,11 +380,9 @@ bool checkCollision(SDL_Point &p, d_line_t &l) } // Devuelve un color_t a partir de un string -color_t stringToColor(std::string str) +color_t stringToColor(palette_e pal, std::string str) { - const std::string palette = "spectrum"; - - if (palette == "spectrum") + if (pal == p_zxspectrum) { if (str == "black") { @@ -467,7 +465,7 @@ color_t stringToColor(std::string str) } } - else + else if (pal == p_zxarne) { // zxarne if (str == "black") { diff --git a/source/common/utils.h b/source/common/utils.h index 2ed99de..8d0e0b5 100644 --- a/source/common/utils.h +++ b/source/common/utils.h @@ -57,6 +57,13 @@ struct color_t Uint8 b; }; +// Tipos de paleta +enum palette_e +{ + p_zxspectrum, + p_zxarne +}; + // Estructura para saber la seccion y subseccion del programa struct section_t { @@ -151,7 +158,7 @@ bool checkCollision(SDL_Point &p, d_line_t &l); void normalizeLine(d_line_t &l); // Devuelve un color_t a partir de un string -color_t stringToColor(std::string str); +color_t stringToColor(palette_e pal, std::string str); // Convierte una cadena en un valor booleano bool stringToBool(std::string str);