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:
JailDesignerandClaude Opus 4.7 committed 2026-04-20 11:59:26 +02:00
1 parent a6cd12a944
commit 256a232a95
3 files changed
+13 -15

No files matched your search

+9 -12
View File
@@ -75,24 +75,22 @@ void Audio::playMusic(const std::string& name, const int loop, const int crossfa
auto* resource = AudioResource::getMusic(name);
if (resource == nullptr) { return; }
if (crossfade_ms > 0 && music_.state == MusicState::PLAYING) {
Ja::crossfadeMusic(resource, crossfade_ms, loop);
} else {
if (music_.state == MusicState::PLAYING) {
Ja::stopMusic();
}
Ja::playMusic(resource, loop);
}
playMusicInternal(resource, loop, crossfade_ms);
music_.name = name;
music_.loop = NEW_LOOP;
music_.state = MusicState::PLAYING;
}
// Reproduce la música por puntero (con crossfade opcional)
void Audio::playMusic(Ja::Music* music, const int loop, const int crossfade_ms) {
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) {
Ja::crossfadeMusic(music, crossfade_ms, loop);
} else {
@@ -102,7 +100,6 @@ void Audio::playMusic(Ja::Music* music, const int loop, const int crossfade_ms)
Ja::playMusic(music, loop);
}
music_.name.clear(); // nom desconegut quan es passa per punter
music_.loop = (loop != 0);
music_.state = MusicState::PLAYING;
}