forked from jaildesigner-jailgames/jaildoctors_dilemma
Afinada un poc mes la classe Options
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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<int>(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<int>(options.video.filter) << "\n";
|
||||
file << "video.shaders=" << boolToString(options.video.shaders) << "\n";
|
||||
file << "video.vertical_sync=" << boolToString(options.video.vertical_sync) << "\n";
|
||||
|
||||
267
source/options.h
267
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;
|
||||
|
||||
@@ -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<char>(f)), std::istreambuf_iterator<char>());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user