#pragma once #include // Para string #include // Para vector // --- Namespace Options: configuración del juego --- // Rellena los valores antes de llamar a Screen::init() y Audio::init() namespace Options { // Borde alrededor del área de juego (en pixels de la resolución lógica) struct Border { bool enabled{false}; // Activa el borde float width{0.0F}; // Ancho del borde (izquierda + derecha) float height{0.0F}; // Alto del borde (arriba + abajo) }; // Opciones de vídeo struct Video { bool fullscreen{false}; // Pantalla completa al arrancar int filter{0}; // Filtro de escalado: 0 = NEAREST, 1 = LINEAR bool vertical_sync{false}; // VSync bool postfx{false}; // Efectos PostFX (shaders) bool supersampling{false}; // Supersampling 3× para PostFX bool integer_scale{false}; // Escalado entero en fullscreen Border border{}; // Borde de pantalla std::string palette{}; // Nombre de la paleta activa (sin extensión) std::string palettes_path{}; // Directorio donde buscar ficheros .pal std::string info; // Info del modo de vídeo (rellenada por Screen) }; // Opciones de ventana struct Window { std::string caption{"Game"}; // Título de la ventana int zoom{2}; // Factor de zoom inicial int max_zoom{2}; // Máximo zoom (calculado por Screen) }; // Resolución lógica del juego (en pixels indexados) struct Game { float width{320.0F}; float height{180.0F}; }; // Opciones de música struct Music { bool enabled{true}; // Activa la música float volume{1.0F}; // Volumen (0.0 – 1.0) }; // Opciones de efectos de sonido struct Sound { bool enabled{true}; // Activa los efectos float volume{1.0F}; // Volumen (0.0 – 1.0) }; // Opciones de audio struct Audio { Music music{}; // Música Sound sound{}; // Efectos bool enabled{true}; // Activa el sistema de audio float volume{1.0F}; // Volumen global (0.0 – 1.0) }; // Preset de efectos PostFX struct PostFXPreset { std::string name; float vignette{0.6F}; // Viñeta (0 = ninguna, 1 = máxima) float scanlines{0.7F}; // Scanlines CRT float chroma{0.15F}; // Aberración cromática float mask{0.0F}; // Máscara de fósforo RGB float gamma{0.0F}; // Corrección gamma float curvature{0.0F}; // Distorsión barrel CRT float bleeding{0.0F}; // Sangrado de color NTSC float flicker{0.0F}; // Parpadeo de fósforo }; // Configuración de fuente de texto para Screen struct TextConfig { std::string surface_path{}; // Ruta al GIF con el bitmap de la fuente std::string fnt_path{}; // Ruta al fichero .fnt de definición de glifos }; // --- Variables globales (inicializa antes de arrancar el juego) --- inline Game game{}; inline Video video{}; inline Window window{}; inline Audio audio{}; inline TextConfig text_config{}; inline bool console{false}; // Imprime mensajes de debug por consola inline std::vector postfx_presets{}; inline int current_postfx_preset{0}; } // namespace Options