Audio: corregida la logica

This commit is contained in:
2025-06-13 18:57:48 +02:00
parent 5f52560ab5
commit 9b7da383ea
2 changed files with 57 additions and 30 deletions

View File

@@ -43,40 +43,40 @@ Audio::~Audio() { JA_Quit(); }
// Reproduce la música
void Audio::playMusic(const std::string &name, const int loop)
{
music_name_ = name;
music_loop_ = loop;
music_.name = name;
music_.loop = loop;
if (enabled_ && music_enabled_)
if (music_enabled_ && music_.state != MusicState::PLAYING)
{
if (JA_GetMusicState() == JA_MUSIC_STOPPED)
{
JA_PlayMusic(Resource::get()->getMusic(name), loop);
}
JA_PlayMusic(Resource::get()->getMusic(name), loop);
music_.state = MusicState::PLAYING;
}
}
// Pausa la música
void Audio::pauseMusic()
{
if (enabled_ && music_enabled_)
if (music_enabled_ && music_.state == MusicState::PLAYING)
{
JA_PauseMusic();
music_.state = MusicState::PAUSED;
}
}
// Detiene la música
void Audio::stopMusic()
{
if (enabled_ && music_enabled_)
if (music_enabled_)
{
JA_StopMusic();
music_.state = MusicState::STOPPED;
}
}
// Reproduce un sonido
void Audio::playSound(const std::string &name)
{
if (enabled_ && sound_enabled_)
if (sound_enabled_)
{
JA_PlaySound(Resource::get()->getSound(name));
}
@@ -85,7 +85,7 @@ void Audio::playSound(const std::string &name)
// Detiene todos los sonidos
void Audio::stopAllSounds()
{
if (enabled_ && sound_enabled_)
if (sound_enabled_)
{
JA_StopChannel(-1);
}
@@ -94,7 +94,7 @@ void Audio::stopAllSounds()
// Realiza un fundido de salida de la música
void Audio::fadeOutMusic(int milliseconds)
{
if (enabled_ && music_enabled_)
if (music_enabled_)
{
JA_FadeOutMusic(milliseconds);
}
@@ -103,7 +103,7 @@ void Audio::fadeOutMusic(int milliseconds)
// Establece el volumen de los sonidos
void Audio::setSoundVolume(int sound_volume)
{
if (enabled_ && sound_enabled_)
if (sound_enabled_)
{
sound_volume = std::clamp(sound_volume, 0, 100);
const float CONVERTED_VOLUME = (sound_volume / 100.0f) * (options.audio.volume / 100.0f);
@@ -114,7 +114,7 @@ void Audio::setSoundVolume(int sound_volume)
// Establece el volumen de la música
void Audio::setMusicVolume(int music_volume)
{
if (enabled_ && music_enabled_)
if (music_enabled_)
{
music_volume = std::clamp(music_volume, 0, 100);
const float CONVERTED_VOLUME = (music_volume / 100.0f) * (options.audio.volume / 100.0f);
@@ -127,13 +127,23 @@ void Audio::applySettings()
{
setSoundVolume(options.audio.sound.volume);
setMusicVolume(options.audio.music.volume);
bool const PREVIOUS_ENABLED = enabled_; // Guarda el estado actual
enable(options.audio.enabled); // Modifica enabled_
// Solo ejecuta la acción si el estado ha cambiado
if (PREVIOUS_ENABLED != enabled_)
{
enabled_ ? JA_PlayMusic(Resource::get()->getMusic(music_name_), music_loop_) : JA_StopMusic();
}
enable(options.audio.enabled);
}
// Establecer estado general
void Audio::enable(bool value)
{
enabled_ = value;
switch (enabled_)
{
case true:
setSoundVolume(options.audio.sound.volume);
setMusicVolume(options.audio.music.volume);
break;
case false:
setSoundVolume(0);
setMusicVolume(0);
break;
}
}