refactor(core/audio): factoritzar overloads playMusic (DUP-01)
Els dos playMusic compartien el dispatch crossfade-vs-stop+play i l'actualització de music_.state/loop. S'extreu playMusicInternal privat que rep el Ja::Music* ja resolt i fa el camí comú. Cada overload es queda només amb el seu gating propi: la variant per nom fa early-return si ja sona la mateixa pista i posa music_.name; la variant per punter buida el nom (PATCH-02 recuperarà el filename del propi Ja::Music). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
a6cd12a944
commit
256a232a95
3 files changed
+13
-15
No files matched your search
@@ -30,7 +30,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 |
|
||||||
|----|---------------|----------|-----------|--------|-------|
|
|----|---------------|----------|-----------|--------|-------|
|
||||||
| DUP-01 | `audio.cpp:58-101` | Dos `playMusic` (nombre/puntero) repiten el bloque crossfade/stop+play | Menor | PENDING | Extraer `playMusicInternal(Ja::Music*, loop, crossfade_ms)` privado |
|
| DUP-01 | `audio.cpp:58-101` | Dos `playMusic` (nombre/puntero) repiten el bloque crossfade/stop+play | Menor | DONE | `playMusicInternal(Ja::Music*, loop, crossfade_ms)` privat; els dos overloads fan gating + name-handling i deleguen el dispatch |
|
||||||
| DUP-02 | `audio.cpp:172-185` | `setSoundVolume`/`setMusicVolume` idéntica estructura de clamp+gate+producto | Menor | PENDING | Helper `effectiveVolume(bool, float)` |
|
| DUP-02 | `audio.cpp:172-185` | `setSoundVolume`/`setMusicVolume` idéntica estructura de clamp+gate+producto | Menor | PENDING | Helper `effectiveVolume(bool, float)` |
|
||||||
| DUP-03 | `jail_audio.hpp:196-222` | `updateOutgoingFade`/`updateIncomingFade` comparten la curva lineal | Menor | PENDING | Helper `fadeProgress(FadeState&) -> float` |
|
| DUP-03 | `jail_audio.hpp:196-222` | `updateOutgoingFade`/`updateIncomingFade` comparten la curva lineal | Menor | PENDING | Helper `fadeProgress(FadeState&) -> float` |
|
||||||
| DUP-04 | `jail_audio.hpp:391-471` | `fadeOutMusic`/`crossfadeMusic` repiten "destruir outgoing + pre-fill + robar stream + reset vorbis" | Importante | PENDING | Función privada `stealCurrentIntoOutgoing(int ms)` |
|
| DUP-04 | `jail_audio.hpp:391-471` | `fadeOutMusic`/`crossfadeMusic` repiten "destruir outgoing + pre-fill + robar stream + reset vorbis" | Importante | PENDING | Función privada `stealCurrentIntoOutgoing(int ms)` |
|
||||||
|
|||||||
@@ -75,24 +75,22 @@ void Audio::playMusic(const std::string& name, const int loop, const int crossfa
|
|||||||
auto* resource = AudioResource::getMusic(name);
|
auto* resource = AudioResource::getMusic(name);
|
||||||
if (resource == nullptr) { return; }
|
if (resource == nullptr) { return; }
|
||||||
|
|
||||||
if (crossfade_ms > 0 && music_.state == MusicState::PLAYING) {
|
playMusicInternal(resource, loop, crossfade_ms);
|
||||||
Ja::crossfadeMusic(resource, crossfade_ms, loop);
|
|
||||||
} else {
|
|
||||||
if (music_.state == MusicState::PLAYING) {
|
|
||||||
Ja::stopMusic();
|
|
||||||
}
|
|
||||||
Ja::playMusic(resource, loop);
|
|
||||||
}
|
|
||||||
|
|
||||||
music_.name = name;
|
music_.name = name;
|
||||||
music_.loop = NEW_LOOP;
|
|
||||||
music_.state = MusicState::PLAYING;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reproduce la música por puntero (con crossfade opcional)
|
// Reproduce la música por puntero (con crossfade opcional)
|
||||||
void Audio::playMusic(Ja::Music* music, const int loop, const int crossfade_ms) {
|
void Audio::playMusic(Ja::Music* music, const int loop, const int crossfade_ms) {
|
||||||
if (!music_enabled_ || music == nullptr) { return; }
|
if (!music_enabled_ || music == nullptr) { return; }
|
||||||
|
|
||||||
|
playMusicInternal(music, loop, crossfade_ms);
|
||||||
|
music_.name.clear(); // nom desconegut quan es passa per punter (PATCH-02 el recuperarà de music->filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Camí comú dels dos overloads: fa el dispatch crossfade vs stop+play i
|
||||||
|
// actualitza state/loop. Els callers s'encarreguen del gating (music_enabled_,
|
||||||
|
// nullptr, same-track early return) i d'actualitzar music_.name.
|
||||||
|
void Audio::playMusicInternal(Ja::Music* music, const int loop, const int crossfade_ms) {
|
||||||
if (crossfade_ms > 0 && music_.state == MusicState::PLAYING) {
|
if (crossfade_ms > 0 && music_.state == MusicState::PLAYING) {
|
||||||
Ja::crossfadeMusic(music, crossfade_ms, loop);
|
Ja::crossfadeMusic(music, crossfade_ms, loop);
|
||||||
} else {
|
} else {
|
||||||
@@ -102,7 +100,6 @@ void Audio::playMusic(Ja::Music* music, const int loop, const int crossfade_ms)
|
|||||||
Ja::playMusic(music, loop);
|
Ja::playMusic(music, loop);
|
||||||
}
|
}
|
||||||
|
|
||||||
music_.name.clear(); // nom desconegut quan es passa per punter
|
|
||||||
music_.loop = (loop != 0);
|
music_.loop = (loop != 0);
|
||||||
music_.state = MusicState::PLAYING;
|
music_.state = MusicState::PLAYING;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,8 +124,9 @@ class Audio {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// --- Métodos ---
|
// --- Métodos ---
|
||||||
explicit Audio(const Config& config); // Constructor privat: rep la config
|
explicit Audio(const Config& config); // Constructor privat: rep la config
|
||||||
void initSDLAudio(); // Inicializa SDL Audio
|
void initSDLAudio(); // Inicializa SDL Audio
|
||||||
|
void playMusicInternal(Ja::Music* music, int loop, int crossfade_ms); // Camí comú dels dos overloads de playMusic
|
||||||
|
|
||||||
// --- Variables miembro ---
|
// --- Variables miembro ---
|
||||||
static std::unique_ptr<Audio> instance; // Instància única d'Audio
|
static std::unique_ptr<Audio> instance; // Instància única d'Audio
|
||||||
|
|||||||
Reference in new issue
Block a user