Afinada un poc mes la classe Options

This commit is contained in:
2025-02-23 20:02:55 +01:00
parent 2ee0c70319
commit 5bb5be9c33
4 changed files with 127 additions and 156 deletions

View File

@@ -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;