From ff1227010bc859052cba815e1517d83b1fa91681 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 31 May 2024 19:38:25 +0200 Subject: [PATCH] =?UTF-8?q?Eliminado=20todo=20el=20c=C3=B3digo=20de=20las?= =?UTF-8?q?=20notificaciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/common/notify.cpp | 285 --------------------------------------- source/common/notify.h | 87 ------------ source/common/screen.cpp | 93 +++---------- source/common/screen.h | 14 -- source/common/utils.h | 60 ++++++--- source/director.cpp | 178 ++++++++++-------------- source/game.cpp | 9 -- source/hiscore_table.cpp | 3 - source/intro.cpp | 3 - source/logo.cpp | 3 - source/title.cpp | 3 - 11 files changed, 123 insertions(+), 615 deletions(-) delete mode 100644 source/common/notify.cpp delete mode 100644 source/common/notify.h diff --git a/source/common/notify.cpp b/source/common/notify.cpp deleted file mode 100644 index 65c7881..0000000 --- a/source/common/notify.cpp +++ /dev/null @@ -1,285 +0,0 @@ -#include "notify.h" -#include -#include -#include - -// Constructor -Notify::Notify(SDL_Renderer *renderer, std::string iconFile, std::string bitmapFile, std::string textFile, std::string soundFile, options_t *options) -{ - // Inicializa variables - this->renderer = renderer; - this->options = options; - bgColor = options->notifications.color; - waitTime = 300; - - // Crea objetos - iconTexture = new Texture(renderer, iconFile); - textTexture = new Texture(renderer, bitmapFile); - text = new Text(textFile, textTexture, renderer); - sound = JA_LoadSound(soundFile.c_str()); -} - -// Destructor -Notify::~Notify() -{ - // Libera la memoria de los objetos - delete textTexture; - delete iconTexture; - delete text; - JA_DeleteSound(sound); - - for (auto notification : notifications) - { - delete notification.sprite; - delete notification.texture; - } -} - -// Dibuja las notificaciones por pantalla -void Notify::render() -{ - for (int i = (int)notifications.size() - 1; i >= 0; --i) - { - notifications[i].sprite->render(); - } -} - -// Actualiza el estado de las notificaiones -void Notify::update() -{ - for (int i = 0; i < (int)notifications.size(); ++i) - { - // Si la notificación anterior está "saliendo", no hagas nada - if (i > 0) - { - if (notifications[i - 1].state == ns_rising) - { - break; - } - } - - notifications[i].counter++; - - // Hace sonar la notificación en el primer frame - if (notifications[i].counter == 1) - { - if (options->notifications.sound) - { - if (notifications[i].state == ns_rising) - { // Reproduce el sonido de la notificación - JA_PlaySound(sound); - } - } - } - - // Comprueba los estados - if (notifications[i].state == ns_rising) - { - const float step = ((float)notifications[i].counter / notifications[i].travelDist); - const int alpha = 255 * step; - - if (options->notifications.posV == pos_top) - { - notifications[i].rect.y++; - } - else - { - notifications[i].rect.y--; - } - notifications[i].texture->setAlpha(alpha); - - if (notifications[i].rect.y == notifications[i].y) - { - notifications[i].state = ns_stay; - notifications[i].texture->setAlpha(255); - notifications[i].counter = 0; - } - } - - else if (notifications[i].state == ns_stay) - { - if (notifications[i].counter == waitTime) - { - notifications[i].state = ns_vanishing; - notifications[i].counter = 0; - } - } - else if (notifications[i].state == ns_vanishing) - { - - const float step = (notifications[i].counter / (float)notifications[i].travelDist); - const int alpha = 255 * (1 - step); - - if (options->notifications.posV == pos_top) - { - notifications[i].rect.y--; - } - else - { - notifications[i].rect.y++; - } - notifications[i].texture->setAlpha(alpha); - - if (notifications[i].rect.y == notifications[i].y - notifications[i].travelDist) - { - notifications[i].state = ns_finished; - } - } - - notifications[i].sprite->setRect(notifications[i].rect); - } - - clearFinishedNotifications(); -} - -// Elimina las notificaciones finalizadas -void Notify::clearFinishedNotifications() -{ - for (int i = (int)notifications.size() - 1; i >= 0; --i) - { - if (notifications[i].state == ns_finished) - { - delete notifications[i].sprite; - delete notifications[i].texture; - notifications.erase(notifications.begin() + i); - } - } -} - -// Muestra una notificación de texto por pantalla; -void Notify::showText(std::string text1, std::string text2, int icon) -{ - // Inicializa variables - const int iconSize = 16; - const int padding = text->getCharacterSize(); - const int iconSpace = icon >= 0 ? iconSize + padding : 0; - const std::string txt = text1.length() > text2.length() ? text1 : text2; - const int width = text->lenght(txt) + (padding * 2) + iconSpace; - const int height = (text->getCharacterSize() * 2) + (padding * 2); - - // Posición horizontal - int despH = 0; - if (options->notifications.posH == pos_left) - { - despH = padding; - } - else if (options->notifications.posH == pos_middle) - { - despH = ((options->video.windowWidth * options->video.windowSize) / 2 - (width / 2)); - } - else - { - despH = (options->video.windowWidth * options->video.windowSize) - width - padding; - } - - // Posición vertical - int despV = 0; - if (options->notifications.posV == pos_top) - { - despV = padding; - } - else - { - despV = (options->video.windowHeight * options->video.windowSize) - height - padding; - } - - const int travelDist = height + padding; - - // Offset - int offset = 0; - if (options->notifications.posV == pos_top) - { - offset = (int)notifications.size() > 0 ? notifications.back().y + travelDist : despV; - } - else - { - offset = (int)notifications.size() > 0 ? notifications.back().y - travelDist : despV; - } - - // Crea la notificacion - notification_t n; - - // Inicializa variables - n.y = offset; - n.travelDist = travelDist; - n.counter = 0; - n.state = ns_rising; - n.text1 = text1; - n.text2 = text2; - if (options->notifications.posV == pos_top) - { - n.rect = {despH, offset - travelDist, width, height}; - } - else - { - n.rect = {despH, offset + travelDist, width, height}; - } - - // Crea la textura - n.texture = new Texture(renderer); - n.texture->createBlank(renderer, width, height, SDL_TEXTUREACCESS_TARGET); - n.texture->setBlendMode(SDL_BLENDMODE_BLEND); - - // Prepara para dibujar en la textura - n.texture->setAsRenderTarget(renderer); - - // Dibuja el fondo de la notificación - SDL_SetRenderDrawColor(renderer, bgColor.r, bgColor.g, bgColor.b, 255); - SDL_Rect rect; - rect = {4, 0, width - (4 * 2), height}; - SDL_RenderFillRect(renderer, &rect); - - rect = {4 / 2, 1, width - 4, height - 2}; - SDL_RenderFillRect(renderer, &rect); - - rect = {1, 4 / 2, width - 2, height - 4}; - SDL_RenderFillRect(renderer, &rect); - - rect = {0, 4, width, height - (4 * 2)}; - SDL_RenderFillRect(renderer, &rect); - - // Dibuja el icono de la notificación - if (icon >= 0) - { - Sprite *sp = new Sprite({0, 0, iconSize, iconSize}, iconTexture, renderer); - sp->setPos({padding, padding, iconSize, iconSize}); - sp->setSpriteClip({iconSize * (icon % 10), iconSize * (icon / 10), iconSize, iconSize}); - sp->render(); - delete sp; - } - - // Escribe el texto de la notificación - color_t color = {255, 255, 255}; - if (text2 != "") - { // Dos lineas de texto - text->writeColored(padding + iconSpace, padding, text1, color); - text->writeColored(padding + iconSpace, padding + text->getCharacterSize() + 1, text2, color); - } - else - { // Una linea de texto - text->writeColored(padding + iconSpace, (height / 2) - (text->getCharacterSize() / 2), text1, color); - } - - // Deja de dibujar en la textura - SDL_SetRenderTarget(renderer, nullptr); - - // Crea el sprite de la notificación - n.sprite = new Sprite(n.rect, n.texture, renderer); - - // Deja la notificación invisible - n.texture->setAlpha(0); - - // 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 deleted file mode 100644 index d73a0b6..0000000 --- a/source/common/notify.h +++ /dev/null @@ -1,87 +0,0 @@ -#pragma once - -#include -#include "jail_audio.h" -#include "sprite.h" -#include "text.h" -#include "texture.h" -#include "utils.h" -#include - -#ifndef NOTIFY_H -#define NOTIFY_H - -class Notify -{ -private: - enum notification_state_e - { - ns_rising, - ns_stay, - ns_vanishing, - ns_finished - }; - - enum notification_position_e - { - upperLeft, - upperCenter, - upperRight, - middleLeft, - middleRight, - bottomLeft, - bottomCenter, - bottomRight - }; - - struct notification_t - { - std::string text1; - std::string text2; - int counter; - notification_state_e state; - notification_position_e position; - Texture *texture; - Sprite *sprite; - SDL_Rect rect; - int y; - int travelDist; - }; - - // Objetos y punteros - SDL_Renderer *renderer; // El renderizador de la ventana - Texture *textTexture; // Textura para la fuente de las notificaciones - Texture *iconTexture; // Textura para los iconos de las notificaciones - Text *text; // Objeto para dibujar texto - options_t *options; // Variable con todas las opciones del programa - - // Variables - color_t bgColor; // Color de fondo de las notificaciones - int waitTime; // Tiempo que se ve la notificación - std::vector notifications; // La lista de notificaciones activas - JA_Sound_t *sound; // Sonido a reproducir cuando suena la notificación - - // Elimina las notificaciones finalizadas - void clearFinishedNotifications(); - -public: - // Dibuja las notificaciones por pantalla - void render(); - - // Actualiza el estado de las notificaiones - void update(); - - // Constructor - Notify(SDL_Renderer *renderer, std::string iconFile, std::string bitmapFile, std::string textFile, std::string soundFile, options_t *options); - - // Destructor - ~Notify(); - - // Muestra una notificación de texto por pantalla; - void showText(std::string text1 = "", std::string text2 = "", int icon = -1); - - // Indica si hay notificaciones activas - bool active(); -}; - -#endif diff --git a/source/common/screen.cpp b/source/common/screen.cpp index dcc6a3f..8502e9b 100644 --- a/source/common/screen.cpp +++ b/source/common/screen.cpp @@ -11,13 +11,10 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options this->options = options; this->asset = asset; - // Crea los objetos - notify = new Notify(renderer, asset->get("notify.png"), asset->get("smb2.png"), asset->get("smb2.txt"), asset->get("notify.wav"), options); - gameCanvasWidth = options->video.gameWidth; gameCanvasHeight = options->video.gameHeight; - borderWidth = options->video.borderWidth * 2; - borderHeight = options->video.borderHeight * 2; + borderWidth = options->video.border.width * 2; + borderHeight = options->video.border.height * 2; notificationLogicalWidth = gameCanvasWidth; notificationLogicalHeight = gameCanvasHeight; @@ -39,7 +36,6 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options // Destructor Screen::~Screen() { - delete notify; SDL_DestroyTexture(gameCanvas); } @@ -69,9 +65,6 @@ void Screen::blit() // Copia la textura de juego en el renderizador en la posición adecuada SDL_RenderCopy(renderer, gameCanvas, nullptr, &dest); - // Dibuja las notificaciones - renderNotifications(); - // Muestra por pantalla el renderizador SDL_RenderPresent(renderer); } @@ -91,7 +84,7 @@ void Screen::setVideoMode(int videoMode) // Esconde la ventana //SDL_HideWindow(window); - if (options->video.borderEnabled) + if (options->video.border.enabled) { windowWidth = gameCanvasWidth + borderWidth; windowHeight = gameCanvasHeight + borderHeight; @@ -106,11 +99,8 @@ void Screen::setVideoMode(int videoMode) } // Modifica el tamaño de la ventana - SDL_SetWindowSize(window, windowWidth * options->video.windowSize, windowHeight * options->video.windowSize); + SDL_SetWindowSize(window, windowWidth * options->video.window.size, windowHeight * options->video.window.size); SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); - - // Muestra la ventana - //SDL_ShowWindow(window); } // Si está activo el modo de pantalla completa añade el borde @@ -168,11 +158,8 @@ void Screen::setVideoMode(int videoMode) // Actualiza las opciones options->video.mode = videoMode; - options->video.windowWidth = windowWidth; - options->video.windowHeight = windowHeight; - - // Establece el tamaño de las notificaciones - setNotificationSize(); + options->video.window.width = windowWidth; + options->video.window.height = windowHeight; } // Camibia entre pantalla completa y ventana @@ -185,23 +172,23 @@ void Screen::switchVideoMode() // Cambia el tamaño de la ventana void Screen::setWindowSize(int size) { - options->video.windowSize = size; + options->video.window.size = size; setVideoMode(0); } // Reduce el tamaño de la ventana void Screen::decWindowSize() { - --options->video.windowSize; - options->video.windowSize = std::max(options->video.windowSize, 1); + --options->video.window.size; + options->video.window.size = std::max(options->video.window.size, 1); setVideoMode(0); } // Aumenta el tamaño de la ventana void Screen::incWindowSize() { - ++options->video.windowSize; - options->video.windowSize = std::min(options->video.windowSize, 4); + ++options->video.window.size; + options->video.window.size = std::min(options->video.window.size, 4); setVideoMode(0); } @@ -220,25 +207,25 @@ void Screen::setBlendMode(SDL_BlendMode blendMode) // Establece el tamaño del borde void Screen::setBorderWidth(int s) { - options->video.borderWidth = s; + options->video.border.width = s; } // Establece el tamaño del borde void Screen::setBorderHeight(int s) { - options->video.borderHeight = s; + options->video.border.height = s; } // Establece si se ha de ver el borde en el modo ventana void Screen::setBorderEnabled(bool value) { - options->video.borderEnabled = value; + options->video.border.enabled = value; } // Cambia entre borde visible y no visible void Screen::switchBorder() { - options->video.borderEnabled = !options->video.borderEnabled; + options->video.border.enabled = !options->video.border.enabled; setVideoMode(0); } @@ -325,54 +312,4 @@ void Screen::updateFX() void Screen::renderFX() { renderFade(); -} - -// Actualiza el notificador -void Screen::updateNotifier() -{ - notify->update(); - notifyActive = notify->active(); -} - -// Muestra una notificación de texto por pantalla; -void Screen::showNotification(std::string text1, std::string text2, int icon) -{ - notify->showText(text1, text2, icon); -} - -// Dibuja las notificaciones -void Screen::renderNotifications() -{ - if (!notifyActive) - { - return; - } - - SDL_RenderSetLogicalSize(renderer, notificationLogicalWidth, notificationLogicalHeight); - notify->render(); - SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight); -} - -// Establece el tamaño de las notificaciones -void Screen::setNotificationSize() -{ - if (options->video.mode == 0) - { - if (options->video.windowSize == 3) - { - notificationLogicalWidth = (windowWidth * 3) / 2; - notificationLogicalHeight = (windowHeight * 3) / 2; - } - else - { - notificationLogicalWidth = windowWidth * 2; - notificationLogicalHeight = windowHeight * 2; - } - } - - if (options->video.mode == SDL_WINDOW_FULLSCREEN_DESKTOP) - { - notificationLogicalWidth = windowWidth / 3; - notificationLogicalHeight = windowHeight / 3; - } } \ No newline at end of file diff --git a/source/common/screen.h b/source/common/screen.h index 6b4a323..c1f06cc 100644 --- a/source/common/screen.h +++ b/source/common/screen.h @@ -2,7 +2,6 @@ #include #include "asset.h" -#include "notify.h" #include "utils.h" #include "../const.h" #include @@ -22,7 +21,6 @@ private: Asset *asset; // Objeto con el listado de recursos SDL_Texture *gameCanvas; // Textura para completar la ventana de juego hasta la pantalla completa options_t *options; // Variable con todas las opciones del programa - Notify *notify; // Dibuja notificaciones por pantalla // Variables int windowWidth; // Ancho de la pantalla o ventana @@ -55,12 +53,6 @@ private: // Dibuja el fade void renderFade(); - // Dibuja las notificaciones - void renderNotifications(); - - // Establece el tamaño de las notificaciones - void setNotificationSize(); - public: // Constructor Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options_t *options); @@ -125,12 +117,6 @@ public: // Dibuja los efectos void renderFX(); - - // Actualiza el notificador - void updateNotifier(); - - // Muestra una notificación de texto por pantalla; - void showNotification(std::string text1 = "", std::string text2 = "", int icon = -1); }; #endif diff --git a/source/common/utils.h b/source/common/utils.h index 0d1d494..8e02417 100644 --- a/source/common/utils.h +++ b/source/common/utils.h @@ -93,12 +93,26 @@ struct input_t Uint8 deviceType; // Tipo de dispositivo (teclado o mando) }; +// Estructura con las opciones para el borde +struct op_border_t +{ + bool enabled; // Indica si ha de mostrar el borde en el modo de ventana + int width; // Cantidad de pixels que se añade en el borde de la ventana + int height; // Cantidad de pixels que se añade en el borde de la ventana +}; + +// Estructura para las opciones de la ventana +struct op_window_t +{ + int width; // Ancho de la ventana + int height; // Alto de la ventana + int size; // Contiene el valor por el que se multiplica el tamaño de la ventana +}; + // Estructura con opciones para el video struct op_video_t { - int windowWidth; // Ancho de la ventana - int windowHeight; // Alto de la ventana - int windowSize; // Contiene el valor por el que se multiplica el tamaño de la ventana + op_window_t window; // Opciones para la ventana del programa Uint32 mode; // Contiene el valor del modo de pantalla completa Uint32 filter; // Filtro usado para el escalado de la imagen bool vSync; // Indica si se quiere usar vsync o no @@ -106,38 +120,40 @@ struct op_video_t int gameHeight; // Alto de la resolucion nativa del juego bool integerScale; // Indica si el escalado de la imagen ha de ser entero en el modo a pantalla completa bool keepAspect; // Indica si se ha de mantener la relación de aspecto al poner el modo a pantalla completa - bool borderEnabled; // Indica si ha de mostrar el borde en el modo de ventana - int borderWidth; // Cantidad de pixels que se añade en el borde de la ventana - int borderHeight; // Cantidad de pixels que se añade en el borde de la ventana + op_border_t border; // Opciones para el borde la pantalla de juego }; -// Estructura para las opciones de las notificaciones -struct op_notification_t +// Estructura para las opciones de musica +struct op_music_t { - not_pos_e posH; // Ubicación de las notificaciones en pantalla - not_pos_e posV; // Ubicación de las notificaciones en pantalla - bool sound; // Indica si las notificaciones suenan - color_t color; // Color de las notificaciones + bool enabled; // Indica si la musica suena o no + int volume; // Volumen al que suena la música +}; + +// Estructura para las opciones de sonido +struct op_sound_t +{ + bool enabled; // Indica si los sonidos suenan o no + int volume; // Volumen al que suenan los sonidos }; // Estructura para las opciones de audio struct op_audio_t { - bool musicEnabled; - bool soundEnabled; + op_music_t music; // Opciones para la música + op_sound_t sound; // Opciones para los efectos de sonido }; // Estructura con todas las opciones de configuración del programa struct options_t { - Uint8 difficulty; // Dificultad del juego - Uint8 playerSelected; // Jugador seleccionado para el modo 1P - std::vector input; // Modo de control (teclado o mando) - Uint8 language; // Idioma usado en el juego - bool console; // Indica si ha de mostrar información por la consola de texto - op_video_t video; // Opciones relativas a la clase screen - op_notification_t notifications; // Opciones relativas a las notificaciones; - op_audio_t audio; // Opciones para el audio + Uint8 difficulty; // Dificultad del juego + Uint8 playerSelected; // Jugador seleccionado para el modo 1P + std::vector input; // Modo de control (teclado o mando) + Uint8 language; // Idioma usado en el juego + bool console; // Indica si ha de mostrar información por la consola de texto + op_video_t video; // Opciones relativas a la clase screen + op_audio_t audio; // Opciones para el audio }; // Calcula el cuadrado de la distancia entre dos puntos diff --git a/source/director.cpp b/source/director.cpp index 6d0f3c3..f72d3ad 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -166,12 +166,12 @@ bool Director::initSDL() // Crea la ventana int incW = 0; int incH = 0; - if (options->video.borderEnabled) + if (options->video.border.enabled) { - incW = options->video.borderWidth * 2; - incH = options->video.borderHeight * 2; + incW = options->video.border.width * 2; + incH = options->video.border.height * 2; } - window = SDL_CreateWindow(WINDOW_CAPTION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, (options->video.gameWidth + incW) * options->video.windowSize, (options->video.gameHeight + incH) * options->video.windowSize, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI); + window = SDL_CreateWindow(WINDOW_CAPTION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, (options->video.gameWidth + incW) * options->video.window.size, (options->video.gameHeight + incH) * options->video.window.size, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI); if (window == nullptr) { if (options->console) @@ -184,13 +184,13 @@ bool Director::initSDL() { // Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones // Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones - //Uint32 flags = SDL_RENDERER_SOFTWARE; - //Uint32 flags = SDL_RENDERER_ACCELERATED; + // Uint32 flags = SDL_RENDERER_SOFTWARE; + // Uint32 flags = SDL_RENDERER_ACCELERATED; Uint32 flags = 0; if (options->video.vSync) - { - flags = flags | SDL_RENDERER_PRESENTVSYNC; - } + { + flags = flags | SDL_RENDERER_PRESENTVSYNC; + } renderer = SDL_CreateRenderer(window, -1, flags); if (renderer == nullptr) @@ -381,32 +381,28 @@ void Director::initOptions() options->video.gameWidth = GAMECANVAS_WIDTH; options->video.gameHeight = GAMECANVAS_HEIGHT; options->video.mode = 0; - options->video.windowSize = 3; - options->video.windowWidth = options->video.windowSize * options->video.gameWidth; - options->video.windowHeight = options->video.windowSize * options->video.gameHeight; + options->video.window.size = 3; + options->video.window.width = options->video.window.size * options->video.gameWidth; + options->video.window.height = options->video.window.size * options->video.gameHeight; options->video.filter = FILTER_NEAREST; options->video.vSync = true; options->video.integerScale = true; options->video.keepAspect = true; - options->video.borderWidth = 0; - options->video.borderHeight = 0; - options->video.borderEnabled = false; + options->video.border.width = 0; + options->video.border.height = 0; + options->video.border.enabled = false; // Opciones de audio - options->audio.musicEnabled = false; - options->audio.soundEnabled = false; + options->audio.music.enabled = false; + options->audio.music.volume = 128; + options->audio.sound.enabled = false; + options->audio.sound.volume = 128; // Opciones varios options->playerSelected = 0; options->difficulty = DIFFICULTY_NORMAL; options->language = ba_BA; options->console = false; - - // Opciones de las notificaciones - options->notifications.posV = pos_top; - options->notifications.posH = pos_left; - options->notifications.sound = true; - options->notifications.color = {48, 48, 48}; } // Comprueba los parametros del programa @@ -536,9 +532,9 @@ bool Director::loadConfigFile() options->video.mode = 0; } - if (options->video.windowSize < 1 || options->video.windowSize > 4) + if (options->video.window.size < 1 || options->video.window.size > 4) { - options->video.windowSize = 3; + options->video.window.size = 3; } if (options->language < 0 || options->language > MAX_LANGUAGES) @@ -572,11 +568,11 @@ bool Director::saveConfigFile() } } - // Opciones g´raficas - file << "## VISUAL OPTIONS\n"; + // Opciones de video + file << "## VIDEO\n"; if (options->video.mode == 0) { - file << "videoMode=0\n"; + file << "mode=0\n"; } else if (options->video.mode == SDL_WINDOW_FULLSCREEN) @@ -589,7 +585,7 @@ bool Director::saveConfigFile() file << "fullScreenMode=SDL_WINDOW_FULLSCREEN_DESKTOP\n"; } - file << "windowSize=" + std::to_string(options->video.windowSize) + "\n"; + file << "window.size=" + std::to_string(options->video.window.size) + "\n"; if (options->video.filter == FILTER_NEAREST) { @@ -603,45 +599,24 @@ bool Director::saveConfigFile() file << "vSync=" + boolToString(options->video.vSync) + "\n"; file << "integerScale=" + boolToString(options->video.integerScale) + "\n"; file << "keepAspect=" + boolToString(options->video.keepAspect) + "\n"; - file << "borderEnabled=" + boolToString(options->video.borderEnabled) + "\n"; - file << "borderWidth=" + std::to_string(options->video.borderWidth) + "\n"; - file << "borderHeight=" + std::to_string(options->video.borderHeight) + "\n"; + file << "border.enabled=" + boolToString(options->video.border.enabled) + "\n"; + file << "border.width=" + std::to_string(options->video.border.width) + "\n"; + file << "border.height=" + std::to_string(options->video.border.height) + "\n"; - // Otras opciones del programa - file << "\n## OTHER OPTIONS\n"; + // Opciones de audio + file << "\n## AUDIO\n"; + file << "music.enabled=" + boolToString(options->audio.music.enabled) + "\n"; + file << "music.volume=" + std::to_string(options->audio.music.volume) + "\n"; + file << "sound.enabled=" + boolToString(options->audio.sound.enabled) + "\n"; + file << "sound.volume=" + std::to_string(options->audio.sound.volume) + "\n"; + + // Opciones del juego + file << "\n## GAME\n"; file << "language=" + std::to_string(options->language) + "\n"; file << "difficulty=" + std::to_string(options->difficulty) + "\n"; file << "input0=" + std::to_string(options->input[0].deviceType) + "\n"; file << "input1=" + std::to_string(options->input[1].deviceType) + "\n"; - // Opciones de las notificaciones - file << "\n## NOTIFICATION OPTIONS\n"; - file << "## notifications.posV = pos_top | pos_bottom\n"; - if (options->notifications.posV == pos_top) - { - file << "notifications.posV=pos_top\n"; - } - else - { - file << "notifications.posV=pos_bottom\n"; - } - - file << "## notifications.posH = pos_left | pos_middle | pos_right\n"; - if (options->notifications.posH == pos_left) - { - file << "notifications.posH=pos_left\n"; - } - else if (options->notifications.posH == pos_middle) - { - file << "notifications.posH=pos_middle\n"; - } - else - { - file << "notifications.posH=pos_right\n"; - } - - file << "notifications.sound=" + boolToString(options->notifications.sound) + "\n"; - // Cierra el fichero file.close(); @@ -710,7 +685,7 @@ bool Director::setOptions(options_t *options, std::string var, std::string value bool success = true; // Opciones de video - if (var == "videoMode") + if (var == "mode") { if (value == "SDL_WINDOW_FULLSCREEN_DESKTOP") { @@ -726,12 +701,12 @@ bool Director::setOptions(options_t *options, std::string var, std::string value } } - else if (var == "windowSize") + else if (var == "window.size") { - options->video.windowSize = std::stoi(value); - if ((options->video.windowSize < 1) || (options->video.windowSize > 4)) + options->video.window.size = std::stoi(value); + if ((options->video.window.size < 1) || (options->video.window.size > 4)) { - options->video.windowSize = 3; + options->video.window.size = 3; } } @@ -762,22 +737,43 @@ bool Director::setOptions(options_t *options, std::string var, std::string value options->video.keepAspect = stringToBool(value); } - else if (var == "borderEnabled") + else if (var == "border.enabled") { - options->video.borderEnabled = stringToBool(value); + options->video.border.enabled = stringToBool(value); } - else if (var == "borderWidth") + else if (var == "border.width") { - options->video.borderWidth = std::stoi(value); + options->video.border.width = std::stoi(value); } - else if (var == "borderHeight") + else if (var == "border.height") { - options->video.borderHeight = std::stoi(value); + options->video.border.height = std::stoi(value); } - // Opciones varias + // Opciones de audio + else if (var == "music.enabled") + { + options->audio.music.enabled = stringToBool(value); + } + + else if (var == "music.volume") + { + options->audio.music.volume = std::stoi(value); + } + + else if (var == "sound.enabled") + { + options->audio.sound.enabled = stringToBool(value); + } + + else if (var == "sound.volume") + { + options->audio.sound.volume = std::stoi(value); + } + + // Opciones de juego else if (var == "language") { options->language = std::stoi(value); @@ -798,40 +794,6 @@ bool Director::setOptions(options_t *options, std::string var, std::string value options->input[1].deviceType = std::stoi(value); } - // Opciones de notificaciones - else if (var == "notifications.posH") - { - if (value == "pos_left") - { - options->notifications.posH = pos_left; - } - else if (value == "pos_middle") - { - options->notifications.posH = pos_middle; - } - else - { - options->notifications.posH = pos_right; - } - } - - else if (var == "notifications.posV") - { - if (value == "pos_top") - { - options->notifications.posV = pos_top; - } - else - { - options->notifications.posV = pos_bottom; - } - } - - else if (var == "notifications.sound") - { - options->notifications.sound = stringToBool(value); - } - // Lineas vacias o que empiezan por comentario else if (var == "" || var.substr(0, 1) == "#") { diff --git a/source/game.cpp b/source/game.cpp index ec5fcce..58e4e70 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -2638,9 +2638,6 @@ void Game::update() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza las notificaciones - screen->updateNotifier(); - // Actualiza el contador de juego counter++; @@ -3243,9 +3240,6 @@ void Game::updatePausedGame() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza las notificaciones - screen->updateNotifier(); - if (leavingPauseMenu) { if (pauseCounter > 0) @@ -3388,9 +3382,6 @@ void Game::updateGameOverScreen() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza las notificaciones - screen->updateNotifier(); - // Actualiza la lógica del menu gameOverMenu->update(); diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index a084887..3c6b076 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -63,9 +63,6 @@ void HiScoreTable::update() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza las notificaciones - screen->updateNotifier(); - if (mode == mhst_auto) { // Modo automático counter++; diff --git a/source/intro.cpp b/source/intro.cpp index 02ba969..579000a 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -398,9 +398,6 @@ void Intro::update() // Actualiza las escenas de la intro updateScenes(); - - // Actualiza las notificaciones - screen->updateNotifier(); } } diff --git a/source/logo.cpp b/source/logo.cpp index 91539fd..9aae7b2 100644 --- a/source/logo.cpp +++ b/source/logo.cpp @@ -119,9 +119,6 @@ void Logo::update() // Comprueba si ha terminado el logo checkLogoEnd(); - - // Actualiza las notificaciones - screen->updateNotifier(); } } diff --git a/source/title.cpp b/source/title.cpp index d2eb8b5..03a4ab5 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -197,9 +197,6 @@ void Title::update() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza las notificaciones - screen->updateNotifier(); - switch (section->subsection) { // Sección 1 - Titulo desplazandose