#pragma once #include // Para SDL_GameControllerButton #include // Para Uint8 #include "manage_hiscore_table.h" #include // Para vector #include enum class InputType : int; enum class ScreenFilter : int; enum class ScreenVideoMode : int; namespace lang { enum class Code : int; } // Dificultad del juego enum class GameDifficulty { EASY = 0, NORMAL = 1, HARD = 2, }; // Estructura para las opciones de la ventana struct OptionsWindow { int size; // Contiene el valor por el que se multiplica el tamaño de la ventana }; // Estructura con opciones para el video struct OptionsVideo { OptionsWindow window; // Opciones para la ventana del programa ScreenVideoMode mode; // Contiene el valor del modo de pantalla completa ScreenFilter filter; // Filtro usado para el escalado de la imagen bool v_sync; // Indica si se quiere usar vsync o no bool integer_scale; // Indica si se va a usar el escalado entero bool shaders; // Indica si se van a usar shaders para los filtros de video }; // Estructura para las opciones de musica struct OptionsMusic { 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 OptionsSound { bool enabled; // Indica si los sonidos suenan o no int volume; // Volumen al que suenan los sonidos }; // Estructura para las opciones de audio struct OptionsAudio { OptionsMusic music; // Opciones para la música OptionsSound sound; // Opciones para los efectos de sonido bool enabled; // Indica si el audio está activo o no int volume; // Volumen al que suenan el audio }; // Estructura para las opciones del juego struct OptionsGame { GameDifficulty difficulty; // Dificultad del juego lang::Code language; // Idioma usado en el juego bool autofire; // Indica si el jugador ha de pulsar repetidamente para disparar o basta con mantener pulsado std::vector hi_score_table; // Tabla con las mejores puntuaciones }; // Estructura para los controles del juego struct OptionsController { int index; // Indice en el vector de mandos int player_id; // Jugador asociado al mando Uint8 device_type; // Indica si se utilizará teclado o mando o ambos std::string name; // Nombre del dispositivo bool plugged; // Indica si el mando se encuentra conectado std::vector inputs; // Listado de inputs std::vector buttons; // Listado de botones asignados a cada input }; // Estructura con todas las opciones de configuración del programa struct Options { OptionsGame game; // Opciones para el propio juego OptionsVideo video; // Opciones relativas a la clase screen OptionsAudio audio; // Opciones para el audio std::vector controller; // Opciones con las asignaciones del mando para cada jugador }; // Variables extern Options options; // Carga el fichero de configuración bool loadOptionsFile(std::string file_path); // Guarda el fichero de configuración bool saveOptionsFile(std::string file_path); // Convierte valores de 0 a 100 en valores de 0 a 128 int to_JA_volume(int vol);