diff --git a/source/core/audio/audio.cpp b/source/core/audio/audio.cpp index 600bbe4..5fc2b2b 100644 --- a/source/core/audio/audio.cpp +++ b/source/core/audio/audio.cpp @@ -134,19 +134,19 @@ auto Audio::getRealMusicState() -> MusicState { } // Establece el volumen de los sonidos -void Audio::setSoundVolume(int sound_volume, Group group) const { +void Audio::setSoundVolume(float sound_volume, Group group) const { if (sound_enabled_) { sound_volume = std::clamp(sound_volume, MIN_VOLUME, MAX_VOLUME); - const float CONVERTED_VOLUME = (sound_volume / 100.0F) * (Options::audio.volume / 100.0F); + const float CONVERTED_VOLUME = sound_volume * Options::audio.volume; JA_SetSoundVolume(CONVERTED_VOLUME, static_cast(group)); } } // Establece el volumen de la música -void Audio::setMusicVolume(int music_volume) const { +void Audio::setMusicVolume(float music_volume) const { if (music_enabled_) { music_volume = std::clamp(music_volume, MIN_VOLUME, MAX_VOLUME); - const float CONVERTED_VOLUME = (music_volume / 100.0F) * (Options::audio.volume / 100.0F); + const float CONVERTED_VOLUME = music_volume * Options::audio.volume; JA_SetMusicVolume(CONVERTED_VOLUME); } } diff --git a/source/core/audio/audio.hpp b/source/core/audio/audio.hpp index b6892f6..e2dab7a 100644 --- a/source/core/audio/audio.hpp +++ b/source/core/audio/audio.hpp @@ -20,9 +20,9 @@ class Audio { }; // --- Constantes --- - static constexpr int MAX_VOLUME = 100; // Volumen máximo - static constexpr int MIN_VOLUME = 0; // Volumen mínimo - static constexpr int FREQUENCY = 48000; // Frecuencia de audio + static constexpr float MAX_VOLUME = 1.0F; // Volumen máximo + static constexpr float MIN_VOLUME = 0.0F; // Volumen mínimo + static constexpr int FREQUENCY = 48000; // Frecuencia de audio // --- Métodos de singleton --- static void init(); // Inicializa el objeto Audio @@ -42,9 +42,9 @@ class Audio { void fadeOutMusic(int milliseconds) const; // Fundido de salida de la música // --- Control de Sonidos --- - void playSound(const std::string& name, Group group = Group::GAME) const; // Reproducir sonido puntual por nombre + void playSound(const std::string& name, Group group = Group::GAME) const; // Reproducir sonido puntual por nombre void playSound(struct JA_Sound_t* sound, Group group = Group::GAME) const; // Reproducir sonido puntual por puntero - void stopAllSounds() const; // Detener todos los sonidos + void stopAllSounds() const; // Detener todos los sonidos // --- Configuración General --- void enable(bool value); // Establecer estado general @@ -64,8 +64,8 @@ class Audio { void toggleMusic() { music_enabled_ = !music_enabled_; } // Alternar estado de música // --- Control de Volumen --- - void setSoundVolume(int volume, Group group = Group::ALL) const; // Ajustar volumen de efectos - void setMusicVolume(int volume) const; // Ajustar volumen de música + void setSoundVolume(float volume, Group group = Group::ALL) const; // Ajustar volumen de efectos + void setMusicVolume(float volume) const; // Ajustar volumen de música // --- Getters para debug --- [[nodiscard]] auto isEnabled() const -> bool { return enabled_; } @@ -78,14 +78,12 @@ class Audio { private: // --- Estructuras privadas --- struct Music { - MusicState state; // Estado actual de la música (reproduciendo, detenido, en pausa) - std::string name; // Última pista de música reproducida - bool loop; // Indica si la última pista de música se debe reproducir en bucle + MusicState state{MusicState::STOPPED}; // Estado actual de la música (reproduciendo, detenido, en pausa) + std::string name; // Última pista de música reproducida + bool loop{false}; // Indica si la última pista de música se debe reproducir en bucle // Constructor para inicializar la música con valores predeterminados - Music() - : state(MusicState::STOPPED), - loop(false) {} + Music() = default; // Constructor para inicializar con valores específicos Music(MusicState init_state, std::string init_name, bool init_loop) diff --git a/source/core/resources/resource.cpp b/source/core/resources/resource.cpp index f8dab43..12a74f7 100644 --- a/source/core/resources/resource.cpp +++ b/source/core/resources/resource.cpp @@ -341,7 +341,7 @@ void Resource::createText() { std::cout << "\n>> CREATING TEXT_OBJECTS" << '\n'; std::vector resources = { - {"debug", "debug.gif", "debug.txt"}, + {"aseprite", "aseprite.gif", "aseprite.txt"}, {"gauntlet", "gauntlet.gif", "gauntlet.txt"}, {"smb2", "smb2.gif", "smb2.txt"}, {"subatomic", "subatomic.gif", "subatomic.txt"}, diff --git a/source/game/defaults.hpp b/source/game/defaults.hpp index 05160fd..89cb840 100644 --- a/source/game/defaults.hpp +++ b/source/game/defaults.hpp @@ -27,13 +27,13 @@ constexpr int WINDOW_ZOOM = 2; // Zoom de la ventana por defecto // ============================================================================= // VIDEO // ============================================================================= -constexpr bool VIDEO_MODE = false; // Modo de pantalla completa por defecto (false = ventana) +constexpr bool VIDEO_MODE = false; // Modo de pantalla completa por defecto (false = ventana) constexpr ScreenFilter VIDEO_FILTER = ScreenFilter::NEAREST; // Filtro por defecto -constexpr bool VIDEO_VERTICAL_SYNC = true; // Vsync activado por defecto -constexpr bool VIDEO_SHADERS = false; // Shaders desactivados por defecto -constexpr bool VIDEO_INTEGER_SCALE = true; // Escalado entero activado por defecto -constexpr bool VIDEO_KEEP_ASPECT = true; // Mantener aspecto activado por defecto -constexpr const char* PALETTE_NAME = "zx-spectrum"; // Paleta por defecto +constexpr bool VIDEO_VERTICAL_SYNC = true; // Vsync activado por defecto +constexpr bool VIDEO_SHADERS = false; // Shaders desactivados por defecto +constexpr bool VIDEO_INTEGER_SCALE = true; // Escalado entero activado por defecto +constexpr bool VIDEO_KEEP_ASPECT = true; // Mantener aspecto activado por defecto +constexpr const char* PALETTE_NAME = "zx-spectrum"; // Paleta por defecto // ============================================================================= // BORDER @@ -45,22 +45,22 @@ constexpr int BORDER_HEIGHT = 24; // Alto del borde por defecto // ============================================================================= // AUDIO // ============================================================================= -constexpr int AUDIO_VOLUME = 100; // Volumen por defecto +constexpr float AUDIO_VOLUME = 1.0F; // Volumen por defecto constexpr bool AUDIO_ENABLED = true; // Audio por defecto // MUSIC -constexpr int MUSIC_VOLUME = 80; // Volumen por defecto de la musica +constexpr float MUSIC_VOLUME = 0.8F; // Volumen por defecto de la musica constexpr bool MUSIC_ENABLED = true; // Musica habilitada por defecto // SOUND -constexpr int SOUND_VOLUME = 100; // Volumen por defecto de los efectos de sonido +constexpr float SOUND_VOLUME = 1.0F; // Volumen por defecto de los efectos de sonido constexpr bool SOUND_ENABLED = true; // Sonido habilitado por defecto // ============================================================================= // NOTIFICATIONS // ============================================================================= -constexpr bool NOTIFICATION_SOUND = true; // Sonido de las notificaciones por defecto -const Uint8 NOTIFICATION_COLOR = static_cast(PaletteColor::BLUE); // Color de las notificaciones por defecto +constexpr bool NOTIFICATION_SOUND = true; // Sonido de las notificaciones por defecto +const Uint8 NOTIFICATION_COLOR = static_cast(PaletteColor::BLUE); // Color de las notificaciones por defecto // ============================================================================= // CONTROL @@ -70,7 +70,7 @@ constexpr Options::ControlScheme CONTROL_SCHEME = Options::ControlScheme::CURSOR // ============================================================================= // OTHER // ============================================================================= -constexpr bool CONSOLE = false; // Consola desactivada por defecto -constexpr const char* VERSION = "1.10"; // Versión por defecto +constexpr bool CONSOLE = false; // Consola desactivada por defecto +constexpr const char* VERSION = "1.10"; // Versión por defecto } // namespace GameDefaults diff --git a/source/game/options.hpp b/source/game/options.hpp index aa35dbc..4edaf24 100644 --- a/source/game/options.hpp +++ b/source/game/options.hpp @@ -11,16 +11,6 @@ // --- Namespace Options: gestión de configuración y opciones del juego --- namespace Options { - -// ============================================================================= -// VOLUME HELPERS - Conversión de volumen 0-100 a 0-128 -// ============================================================================= -namespace VolumeHelpers { -constexpr auto convertVolume(int volume_percent) -> int { - return (volume_percent * 128) / 100; -} -} // namespace VolumeHelpers - // Tipos de control de teclado enum class ControlScheme { CURSOR, @@ -113,9 +103,9 @@ struct Window { // Estructura para gestionar el borde de la pantalla struct Border { - bool enabled{GameDefaults::BORDER_ENABLED}; // Indica si se ha de mostrar el borde - float width{GameDefaults::BORDER_WIDTH}; // Ancho del borde - float height{GameDefaults::BORDER_HEIGHT}; // Alto del borde + bool enabled{GameDefaults::BORDER_ENABLED}; // Indica si se ha de mostrar el borde + float width{GameDefaults::BORDER_WIDTH}; // Ancho del borde + float height{GameDefaults::BORDER_HEIGHT}; // Alto del borde // Constructor por defecto Border() = default; @@ -129,15 +119,15 @@ struct Border { // Estructura para las opciones de video struct Video { - bool fullscreen{GameDefaults::VIDEO_MODE}; // Contiene el valor del modo de pantalla completa - ScreenFilter filter{GameDefaults::VIDEO_FILTER}; // Filtro usado para el escalado de la imagen - bool vertical_sync{GameDefaults::VIDEO_VERTICAL_SYNC}; // Indica si se quiere usar vsync o no - bool shaders{GameDefaults::VIDEO_SHADERS}; // Indica si se van a usar shaders o no - bool integer_scale{GameDefaults::VIDEO_INTEGER_SCALE}; // Indica si el escalado de la imagen ha de ser entero en el modo a pantalla completa - bool keep_aspect{GameDefaults::VIDEO_KEEP_ASPECT}; // Indica si se ha de mantener la relación de aspecto al poner el modo a pantalla completa - Border border; // Borde de la pantalla - std::string palette{GameDefaults::PALETTE_NAME}; // Paleta de colores a usar en el juego - std::string info; // Información sobre el modo de vídeo + bool fullscreen{GameDefaults::VIDEO_MODE}; // Contiene el valor del modo de pantalla completa + ScreenFilter filter{GameDefaults::VIDEO_FILTER}; // Filtro usado para el escalado de la imagen + bool vertical_sync{GameDefaults::VIDEO_VERTICAL_SYNC}; // Indica si se quiere usar vsync o no + bool shaders{GameDefaults::VIDEO_SHADERS}; // Indica si se van a usar shaders o no + bool integer_scale{GameDefaults::VIDEO_INTEGER_SCALE}; // Indica si el escalado de la imagen ha de ser entero en el modo a pantalla completa + bool keep_aspect{GameDefaults::VIDEO_KEEP_ASPECT}; // Indica si se ha de mantener la relación de aspecto al poner el modo a pantalla completa + Border border; // Borde de la pantalla + std::string palette{GameDefaults::PALETTE_NAME}; // Paleta de colores a usar en el juego + std::string info; // Información sobre el modo de vídeo // Constructor por defecto Video() = default; @@ -156,60 +146,48 @@ struct Video { // Estructura para las opciones de musica struct Music { - bool enabled{GameDefaults::MUSIC_ENABLED}; // Indica si la música suena o no - int volume{VolumeHelpers::convertVolume(GameDefaults::MUSIC_VOLUME)}; // Volumen al que suena la música (0 a 128 internamente) + bool enabled{GameDefaults::MUSIC_ENABLED}; // Indica si la música suena o no + float volume{GameDefaults::MUSIC_VOLUME}; // Volumen al que suena la música // Constructor por defecto Music() = default; // Constructor con parámetros - Music(bool is_enabled, int volume_percent) + Music(bool is_enabled, float volume_percent) : enabled(is_enabled), - volume(VolumeHelpers::convertVolume(volume_percent)) {} - - // Método para establecer el volumen - void setVolume(int volume_percent) { - volume_percent = std::clamp(volume_percent, 0, 100); - volume = VolumeHelpers::convertVolume(volume_percent); - } + volume(volume_percent) {} }; // Estructura para las opciones de sonido struct Sound { - bool enabled{GameDefaults::SOUND_ENABLED}; // Indica si los sonidos suenan o no - int volume{VolumeHelpers::convertVolume(GameDefaults::SOUND_VOLUME)}; // Volumen al que suenan los sonidos (0 a 128 internamente) + bool enabled{GameDefaults::SOUND_ENABLED}; // Indica si los sonidos suenan o no + float volume{GameDefaults::SOUND_VOLUME}; // Volumen al que suenan los sonidos (0 a 128 internamente) // Constructor por defecto Sound() = default; // Constructor con parámetros - Sound(bool is_enabled, int volume_percent) + Sound(bool is_enabled, float volume_percent) : enabled(is_enabled), - volume(VolumeHelpers::convertVolume(volume_percent)) {} - - // Método para establecer el volumen - void setVolume(int volume_percent) { - volume_percent = std::clamp(volume_percent, 0, 100); - volume = VolumeHelpers::convertVolume(volume_percent); - } + volume(volume_percent) {} }; // Estructura para las opciones de audio struct Audio { - Music music; // Opciones para la música - Sound sound; // Opciones para los efectos de sonido - bool enabled{GameDefaults::AUDIO_ENABLED}; // Indica si el audio está activo o no - int volume{VolumeHelpers::convertVolume(GameDefaults::AUDIO_VOLUME)}; // Volumen al que suenan el audio (0-128 internamente) + Music music; // Opciones para la música + Sound sound; // Opciones para los efectos de sonido + bool enabled{GameDefaults::AUDIO_ENABLED}; // Indica si el audio está activo o no + float volume{GameDefaults::AUDIO_VOLUME}; // Volumen al que suenan el audio (0-128 internamente) // Constructor por defecto Audio() = default; // Constructor - Audio(Music audio_music, Sound audio_sound, bool is_enabled, int volume_percent) + Audio(Music audio_music, Sound audio_sound, bool is_enabled, float volume_percent) : music(audio_music), sound(audio_sound), enabled(is_enabled), - volume(VolumeHelpers::convertVolume(volume_percent)) {} + volume(volume_percent) {} }; // Estructura para las opciones de juego @@ -239,7 +217,7 @@ inline Audio audio{}; // Opciones relativas inline ControlScheme keys{GameDefaults::CONTROL_SCHEME}; // Teclas usadas para jugar // --- Funciones --- -void init(); // Crea e inicializa las opciones del programa +void init(); // Crea e inicializa las opciones del programa auto loadFromFile(const std::string& file_path) -> bool; // Carga las opciones desde un fichero auto saveToFile(const std::string& file_path) -> bool; // Guarda las opciones a un fichero