diff --git a/source/director.cpp b/source/director.cpp index 828580a..9cefb79 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -869,10 +869,10 @@ bool Director::initSDL() } // Crea la ventana - options.window.width = options.video.border.enabled ? options.game.width + options.video.border.width * 2 : options.game.width; - options.window.height = options.video.border.enabled ? options.game.height + options.video.border.height * 2 : options.game.height; + const auto window_width = options.video.border.enabled ? options.game.width + options.video.border.width * 2 : options.game.width; + const auto window_height = options.video.border.enabled ? options.game.height + options.video.border.height * 2 : options.game.height; - window_ = SDL_CreateWindow(WINDOW_CAPTION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, options.window.width, options.window.height, SDL_WINDOW_HIDDEN); + window_ = SDL_CreateWindow(WINDOW_CAPTION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, window_width, window_height, SDL_WINDOW_HIDDEN); if (window_ == nullptr) { if (options.console) diff --git a/source/options.cpp b/source/options.cpp index 49457ff..969b218 100644 --- a/source/options.cpp +++ b/source/options.cpp @@ -120,16 +120,16 @@ bool saveOptionsToFile(const std::string &file_path) } // Escribe en el fichero - file << "## VERSION\n"; file << "version=" << options.version << "\n"; file << "\n## CONTROL\n"; - file << "## keys = CURSOR | OPQA | WASD\n"; file << "keys=" << static_cast(options.keys) << "\n"; + file << "\n## WINDOW\n"; + file << "window.zoom=" << options.window.zoom << "\n"; + file << "\n## VIDEO\n"; file << "video.mode=" << options.video.mode << "\n"; - file << "window.zoom=" << options.window.zoom << "\n"; file << "video.filter=" << static_cast(options.video.filter) << "\n"; file << "video.shaders=" << boolToString(options.video.shaders) << "\n"; file << "video.vertical_sync=" << boolToString(options.video.vertical_sync) << "\n"; diff --git a/source/options.h b/source/options.h index 5a0e3b6..f21d6e9 100644 --- a/source/options.h +++ b/source/options.h @@ -6,14 +6,6 @@ #include "utils.h" #include "screen.h" -constexpr int DEFAULT_WINDOW_WIDTH = 320; // Ancho de la ventana por defecto -constexpr int DEFAULT_WINDOW_HEIGHT = 240; // Alto de la ventana por defecto -constexpr int DEFAULT_WINDOW_ZOOM = 2; // Zoom de la ventana por defecto -constexpr int DEFAULT_VIDEO_MODE = 0; // Modo de pantalla completa por defecto -constexpr int DEFAULT_BORDER_WIDTH = 32; // Ancho del borde por defecto -constexpr int DEFAULT_BORDER_HEIGHT = 24; // Alto del borde por defecto -constexpr Palette DEFAULT_PALETTE = Palette::ZXSPECTRUM; // Paleta por defecto - // Secciones del programa enum class Section { @@ -60,6 +52,29 @@ enum class ControlScheme WASD }; +// Constantes +constexpr int DEFAULT_GAME_WIDTH = 256; // Ancho de la ventana por defecto +constexpr int DEFAULT_GAME_HEIGHT = 192; // Alto de la ventana por defecto +constexpr int DEFAULT_WINDOW_ZOOM = 2; // Zoom de la ventana por defecto +constexpr int DEFAULT_VIDEO_MODE = 0; // Modo de pantalla completa por defecto +constexpr ScreenFilter DEFAULT_VIDEO_FILTER = ScreenFilter::NEAREST; // Filtro por defecto +constexpr bool DEFAULT_VIDEO_VERTICAL_SYNC = true; // Vsync activado por defecto +constexpr bool DEFAULT_VIDEO_SHADERS = false; // Shaders desactivados por defecto +constexpr bool DEFAULT_VIDEO_INTEGER_SCALE = true; // Escalado entero activado por defecto +constexpr bool DEFAULT_VIDEO_KEEP_ASPECT = true; // Mantener aspecto activado por defecto +constexpr bool DEFAULT_BORDER_ENABLED = true; // Borde activado por defecto +constexpr int DEFAULT_BORDER_WIDTH = 32; // Ancho del borde por defecto +constexpr int DEFAULT_BORDER_HEIGHT = 24; // Alto del borde por defecto +constexpr Palette DEFAULT_PALETTE = Palette::ZXSPECTRUM; // Paleta por defecto +constexpr Section DEFAULT_SECTION = Section::LOGO; // Sección por defecto +constexpr Subsection DEFAULT_SUBSECTION = Subsection::LOGO_TO_INTRO; // Subsección por defecto +constexpr ControlScheme DEFAULT_CONTROL_SCHEME = ControlScheme::CURSOR; // Control por defecto +constexpr NotificationPosition DEFAULT_NOTIFICATION_POSITION = NotificationPosition::UPPER_LEFT; // Posición de las notificaciones por defecto +constexpr bool DEFAULT_NOTIFICATION_SOUND = true; // Sonido de las notificaciones por defecto +const Color DEFAULT_NOTIFICATION_COLOR = Color(48, 48, 48); // Color de las notificaciones por defecto +constexpr bool DEFAULT_CONSOLE = false; // Consola desactivada por defecto +constexpr std::string DEFAULT_VERSION = "v1.09"; // Versión por defecto + // Estructura para las opciones de las notificaciones struct OptionsNotification { @@ -69,36 +84,32 @@ struct OptionsNotification // Constructor por defecto OptionsNotification() - { - pos = NotificationPosition::UPPER_LEFT; - sound = true; - color = {48, 48, 48}; - } + : pos(DEFAULT_NOTIFICATION_POSITION), + sound(DEFAULT_NOTIFICATION_SOUND), + color(DEFAULT_NOTIFICATION_COLOR) {} // Constructor OptionsNotification(NotificationPosition p, bool s, Color c) - { - pos = p; - sound = s; - color = c; - } + : pos(p), + sound(s), + color(c) {} // Método que devuelve la posición horizontal std::string getHorizontalPosition() const { switch (pos) { - case NotificationPosition::UPPER_LEFT: - case NotificationPosition::MIDDLE_LEFT: - case NotificationPosition::BOTTOM_LEFT: - return "LEFT"; - case NotificationPosition::UPPER_CENTER: - case NotificationPosition::BOTTOM_CENTER: - return "CENTER"; - case NotificationPosition::UPPER_RIGHT: - case NotificationPosition::MIDDLE_RIGHT: - case NotificationPosition::BOTTOM_RIGHT: - return "RIGHT"; + case NotificationPosition::UPPER_LEFT: + case NotificationPosition::MIDDLE_LEFT: + case NotificationPosition::BOTTOM_LEFT: + return "LEFT"; + case NotificationPosition::UPPER_CENTER: + case NotificationPosition::BOTTOM_CENTER: + return "CENTER"; + case NotificationPosition::UPPER_RIGHT: + case NotificationPosition::MIDDLE_RIGHT: + case NotificationPosition::BOTTOM_RIGHT: + return "RIGHT"; } return "UNKNOWN"; } @@ -108,17 +119,17 @@ struct OptionsNotification { switch (pos) { - case NotificationPosition::UPPER_LEFT: - case NotificationPosition::UPPER_CENTER: - case NotificationPosition::UPPER_RIGHT: - return "UPPER"; - case NotificationPosition::MIDDLE_LEFT: - case NotificationPosition::MIDDLE_RIGHT: - return "MIDDLE"; - case NotificationPosition::BOTTOM_LEFT: - case NotificationPosition::BOTTOM_CENTER: - case NotificationPosition::BOTTOM_RIGHT: - return "BOTTOM"; + case NotificationPosition::UPPER_LEFT: + case NotificationPosition::UPPER_CENTER: + case NotificationPosition::UPPER_RIGHT: + return "UPPER"; + case NotificationPosition::MIDDLE_LEFT: + case NotificationPosition::MIDDLE_RIGHT: + return "MIDDLE"; + case NotificationPosition::BOTTOM_LEFT: + case NotificationPosition::BOTTOM_CENTER: + case NotificationPosition::BOTTOM_RIGHT: + return "BOTTOM"; } return "UNKNOWN"; } @@ -132,17 +143,13 @@ struct SectionState // Constructor por defecto SectionState() - { - section = Section::LOGO; - subsection = Subsection::LOGO_TO_INTRO; - } + : section(DEFAULT_SECTION), + subsection(DEFAULT_SUBSECTION) {} // Constructor SectionState(Section s, Subsection ss) - { - section = s; - subsection = ss; - } + : section(s), + subsection(ss) {} }; // Estructura para albergar trucos @@ -164,18 +171,14 @@ struct Cheat : infinite_lives(CheatState::DISABLED), invincible(CheatState::DISABLED), jail_is_open(CheatState::DISABLED), - alternate_skin(CheatState::DISABLED) - { - } + alternate_skin(CheatState::DISABLED) {} // Constructor Cheat(CheatState il, CheatState i, CheatState je, CheatState as) : infinite_lives(il), invincible(i), jail_is_open(je), - alternate_skin(as) - { - } + alternate_skin(as) {} // Método para comprobar si alguno de los tres primeros trucos está activo bool enabled() const @@ -195,43 +198,29 @@ struct OptionsStats // Constructor por defecto OptionsStats() - { - rooms = 0; - items = 0; - worst_nightmare = ""; - } + : rooms(0), + items(0), + worst_nightmare("") {} // Constructor OptionsStats(int r, int i, std::string wn) - { - rooms = r; - items = i; - worst_nightmare = wn; - } + : rooms(r), + items(i), + worst_nightmare(wn) {} }; -// Estructura con opciones de la pantalla -struct OptionsWindows +// Estructura con opciones de la ventana +struct OptionsWindow { - int width; // Ancho de la ventana - int height; // Alto de la ventana - int zoom; // Zoom de la ventana + int zoom; // Zoom de la ventana // Constructor por defecto - OptionsWindows() - { - width = DEFAULT_WINDOW_WIDTH; - height = DEFAULT_WINDOW_HEIGHT; - zoom = DEFAULT_WINDOW_ZOOM; - } + OptionsWindow() + : zoom(DEFAULT_WINDOW_ZOOM) {} // Constructor - OptionsWindows(int w, int h, int z) - { - width = w; - height = h; - zoom = z; - } + OptionsWindow(int z) + : zoom(z) {} }; // Estructura para gestionar el borde de la pantalla @@ -243,19 +232,15 @@ struct Border // Constructor por defecto Border() - { - enabled = true; - width = DEFAULT_BORDER_WIDTH; - height = DEFAULT_BORDER_HEIGHT; - } + : enabled(DEFAULT_BORDER_ENABLED), + width(DEFAULT_BORDER_WIDTH), + height(DEFAULT_BORDER_HEIGHT) {} // Constructor Border(bool e, int w, int h) - { - enabled = e; - width = w; - height = h; - } + : enabled(e), + width(w), + height(h) {} }; // Estructura para las opciones de video @@ -272,50 +257,42 @@ struct OptionsVideo // Constructor por defecto OptionsVideo() - { - mode = DEFAULT_VIDEO_MODE; - filter = ScreenFilter::NEAREST; - vertical_sync = true; - shaders = false; - integer_scale = true; - keep_aspect = true; - border = Border(); - palette = DEFAULT_PALETTE; - } + : mode(DEFAULT_VIDEO_MODE), + filter(DEFAULT_VIDEO_FILTER), + vertical_sync(DEFAULT_VIDEO_VERTICAL_SYNC), + shaders(DEFAULT_VIDEO_SHADERS), + integer_scale(DEFAULT_VIDEO_INTEGER_SCALE), + keep_aspect(DEFAULT_VIDEO_KEEP_ASPECT), + border(Border()), + palette(DEFAULT_PALETTE) {} // Constructor OptionsVideo(Uint32 m, ScreenFilter f, bool vs, bool s, bool is, bool ka, Border b, Palette p) - { - mode = m; - filter = f; - vertical_sync = vs; - shaders = s; - integer_scale = is; - keep_aspect = ka; - border = b; - palette = p; - } + : mode(m), + filter(f), + vertical_sync(vs), + shaders(s), + integer_scale(is), + keep_aspect(ka), + border(b), + palette(p) {} }; // Estructura para las opciones de juego struct OptionsGame { - int width; // Ancho de la resolucion nativa del juego - int height; // Alto de la resolucion nativa del juego + int width; // Ancho de la resolucion del juego + int height; // Alto de la resolucion del juego // Constructor por defecto OptionsGame() - { - width = 320; - height = 240; - } + : width(DEFAULT_GAME_WIDTH), + height(DEFAULT_GAME_HEIGHT) {} // Constructor OptionsGame(int w, int h) - { - width = w; - height = h; - } + : width(w), + height(h) {} }; // Estructura con todas las opciones de configuración del programa @@ -328,39 +305,35 @@ struct Options OptionsVideo video; // Opciones de video OptionsStats stats; // Datos con las estadisticas de juego OptionsNotification notifications; // Opciones relativas a las notificaciones; - OptionsWindows window; // Opciones relativas a la ventana + OptionsWindow window; // Opciones relativas a la ventana ControlScheme keys; // Teclas usadas para jugar SectionState section; // Sección actual del programa // Constructor por defecto Options() - { - version = "v1.07"; - console = false; - cheats = Cheat(); - game = OptionsGame(); - video = OptionsVideo(); - stats = OptionsStats(); - notifications = OptionsNotification(); - window = OptionsWindows(); - keys = ControlScheme::CURSOR; - section = SectionState(); - } + : version(DEFAULT_VERSION), + console(DEFAULT_CONSOLE), + cheats(Cheat()), + game(OptionsGame()), + video(OptionsVideo()), + stats(OptionsStats()), + notifications(OptionsNotification()), + window(OptionsWindow()), + keys(DEFAULT_CONTROL_SCHEME), + section(SectionState()) {} // Constructor - Options(std::string cv, bool c, Cheat ch, OptionsGame g, OptionsVideo v, OptionsStats s, OptionsNotification n, OptionsWindows sw, ControlScheme k, SectionState sec) - { - version = cv; - console = c; - cheats = ch; - game = g; - video = v; - stats = s; - notifications = n; - window = sw; - keys = k; - section = sec; - } + Options(std::string cv, bool c, Cheat ch, OptionsGame g, OptionsVideo v, OptionsStats s, OptionsNotification n, OptionsWindow sw, ControlScheme k, SectionState sec) + : version(cv), + console(c), + cheats(ch), + game(g), + video(v), + stats(s), + notifications(n), + window(sw), + keys(k), + section(sec) {} }; extern Options options; diff --git a/source/screen.cpp b/source/screen.cpp index 48fcc79..18cf113 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -208,13 +208,11 @@ void Screen::setVideoMode(int videoMode) // Actualiza las opciones options.video.mode = videoMode; - options.window.width = window_width_; - options.window.height = window_height_; // Reinicia los shaders if (options.video.shaders) { - const std::string glsl_file = options.window.height == 192 ? "crtpi_192.glsl" : "crtpi_240.glsl"; + const std::string glsl_file = window_height_ == 192 ? "crtpi_192.glsl" : "crtpi_240.glsl"; std::ifstream f(Asset::get()->get(glsl_file).c_str()); std::string source((std::istreambuf_iterator(f)), std::istreambuf_iterator());