refactor(core/audio): quitar const que mentia en 6 mètodes (INCONS-01)

playSound (x2), stopAllSounds, fadeOutMusic, setSoundVolume i
setMusicVolume es declaraven const però mutaven l'estat global de Ja::*
(channels[], outgoing_music, music_volume, sound_volume[]). El const no
protegia res: el compilador no detectava les mutacions perquè anaven a
globals, no a membres, i podia induir a error a qui llegia el header.

Els callers externs van via Audio* (no Audio const*), així que el canvi
és source-compatible.

Clang-tidy falla amb readability-make-member-function-const perquè
tampoc veu la mutació — és exactament el símptoma que motiva el
hallazgo. S'afegeix NOLINT localitzat a cada mètode amb la raó. Quan
s'executi COUP-01 (encapsular Ja::* en classe membre) els NOLINT
cauran sols perquè la mutació serà visible al compilador.

effectiveVolume es queda const — és un càlcul pur sobre els membres.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
JailDesignerandClaude Opus 4.7 committed 2026-04-20 12:10:44 +02:00
1 parent 6a1ed37242
commit 964ff104ce
3 files changed
+19 -13

No files matched your search

+1 -1
View File
@@ -70,7 +70,7 @@ Los IDs se mantienen estables una vez asignados. Cada entrada apunta al(los) fic
| ID | Fichero:línea | Hallazgo | Severidad | Estado | Notas | | ID | Fichero:línea | Hallazgo | Severidad | Estado | Notas |
|----|---------------|----------|-----------|--------|-------| |----|---------------|----------|-----------|--------|-------|
| INCONS-01 | `audio.cpp:128,135,142,149,172,180` | Métodos `const` que mutan globals de `Ja` (const miente) | Importante | PENDING | Quitar `const`; propagar a la declaración | | INCONS-01 | `audio.cpp:128,135,142,149,172,180` | Métodos `const` que mutan globals de `Ja` (const miente) | Importante | DONE | `const` tret de 6 mètodes (`playSound` x2, `stopAllSounds`, `fadeOutMusic`, `setSoundVolume`, `setMusicVolume`). `effectiveVolume` es queda `const` (pur sobre membres). Cap caller extern via `const Audio*` |
| INCONS-02 | `audio.hpp:44-48` + `jail_audio.hpp:44-50` | Dos `MusicState` paralelos + `getRealMusicState` como puente | Importante | PENDING | Un enum único; eliminar `getRealMusicState` | | INCONS-02 | `audio.hpp:44-48` + `jail_audio.hpp:44-50` | Dos `MusicState` paralelos + `getRealMusicState` como puente | Importante | PENDING | Un enum único; eliminar `getRealMusicState` |
| INCONS-03 | `audio.cpp` varios | Comentarios mezclan catalán y español | Menor | PENDING | Unificar a catalán | | INCONS-03 | `audio.cpp` varios | Comentarios mezclan catalán y español | Menor | PENDING | Unificar a catalán |
| INCONS-04 | `audio.hpp:70,78` | `playMusic` `loop=-1` vs `playSound` `loop=0` | Menor | WONTFIX | Convención razonable (música loop / sonido one-shot); documentar | | INCONS-04 | `audio.hpp:70,78` | `playMusic` `loop=-1` vs `playSound` `loop=0` | Menor | WONTFIX | Convención razonable (música loop / sonido one-shot); documentar |
+12 -6
View File
@@ -129,28 +129,32 @@ void Audio::stopMusic() {
} }
// Reproduce un sonido por nombre // Reproduce un sonido por nombre
void Audio::playSound(const std::string& name, Group group) const { // NOLINTNEXTLINE(readability-make-member-function-const) — muta globals de Ja::channels
void Audio::playSound(const std::string& name, Group group) {
if (sound_enabled_) { if (sound_enabled_) {
Ja::playSound(AudioResource::getSound(name), 0, static_cast<int>(group)); Ja::playSound(AudioResource::getSound(name), 0, static_cast<int>(group));
} }
} }
// Reproduce un sonido por puntero directo // Reproduce un sonido por puntero directo
void Audio::playSound(Ja::Sound* sound, Group group) const { // NOLINTNEXTLINE(readability-make-member-function-const) — muta globals de Ja::channels
void Audio::playSound(Ja::Sound* sound, Group group) {
if (sound_enabled_ && sound != nullptr) { if (sound_enabled_ && sound != nullptr) {
Ja::playSound(sound, 0, static_cast<int>(group)); Ja::playSound(sound, 0, static_cast<int>(group));
} }
} }
// Detiene todos los sonidos // Detiene todos los sonidos
void Audio::stopAllSounds() const { // NOLINTNEXTLINE(readability-make-member-function-const) — muta globals de Ja::channels
void Audio::stopAllSounds() {
if (sound_enabled_) { if (sound_enabled_) {
Ja::stopChannel(-1); Ja::stopChannel(-1);
} }
} }
// Realiza un fundido de salida de la música // Realiza un fundido de salida de la música
void Audio::fadeOutMusic(int milliseconds) const { // NOLINTNEXTLINE(readability-make-member-function-const) — muta Ja::outgoing_music/incoming_fade
void Audio::fadeOutMusic(int milliseconds) {
if (music_enabled_ && getRealMusicState() == MusicState::PLAYING) { if (music_enabled_ && getRealMusicState() == MusicState::PLAYING) {
Ja::fadeOutMusic(milliseconds); Ja::fadeOutMusic(milliseconds);
} }
@@ -181,12 +185,14 @@ auto Audio::effectiveVolume(float volume, bool channel_enabled) const -> float {
} }
// Estableix el volum dels sons (float 0.0..1.0) // Estableix el volum dels sons (float 0.0..1.0)
void Audio::setSoundVolume(float sound_volume, Group group) const { // NOLINTNEXTLINE(readability-make-member-function-const) — muta Ja::sound_volume[] i canals actius
void Audio::setSoundVolume(float sound_volume, Group group) {
Ja::setSoundVolume(effectiveVolume(sound_volume, sound_enabled_), static_cast<int>(group)); Ja::setSoundVolume(effectiveVolume(sound_volume, sound_enabled_), static_cast<int>(group));
} }
// Estableix el volum de la música (float 0.0..1.0) // Estableix el volum de la música (float 0.0..1.0)
void Audio::setMusicVolume(float music_volume) const { // NOLINTNEXTLINE(readability-make-member-function-const) — muta Ja::music_volume i stream actual
void Audio::setMusicVolume(float music_volume) {
Ja::setMusicVolume(effectiveVolume(music_volume, music_enabled_)); Ja::setMusicVolume(effectiveVolume(music_volume, music_enabled_));
} }
+6 -6
View File
@@ -69,16 +69,16 @@ class Audio {
void pauseMusic(); // Pausar reproducción de música void pauseMusic(); // Pausar reproducción de música
void resumeMusic(); // Continua la música pausada void resumeMusic(); // Continua la música pausada
void stopMusic(); // Detener completamente la música void stopMusic(); // Detener completamente la música
void fadeOutMusic(int milliseconds) const; // Fundido de salida de la música void fadeOutMusic(int milliseconds); // Fundido de salida de la música (muta globals de Ja)
// --- Control de sonidos --- // --- 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); // Reproducir sonido puntual por nombre (muta globals de Ja)
void playSound(Ja::Sound* sound, Group group = Group::GAME) const; // Reproducir sonido puntual por puntero void playSound(Ja::Sound* sound, Group group = Group::GAME); // Reproducir sonido puntual por puntero (muta globals de Ja)
void stopAllSounds() const; // Detener todos los sonidos void stopAllSounds(); // Detener todos los sonidos (muta globals de Ja)
// --- Control de volumen (API interna: float 0.0..1.0) --- // --- Control de volumen (API interna: float 0.0..1.0) ---
void setSoundVolume(float volume, Group group = Group::ALL) const; // Ajustar volumen de efectos void setSoundVolume(float volume, Group group = Group::ALL); // Ajustar volumen de efectos
void setMusicVolume(float volume) const; // Ajustar volumen de música void setMusicVolume(float volume); // Ajustar volumen de música
// --- Helpers de conversió per a la capa de presentació --- // --- Helpers de conversió per a la capa de presentació ---
// UI (menús, notificacions) manega enters 0..100; internament viu float 0..1. // UI (menús, notificacions) manega enters 0..100; internament viu float 0..1.