refactor(core/audio): Audio owns the engine (migration)
Audio guanya un std::unique_ptr<Ja::Engine> engine_ com a membre privat. Es construeix a initSDLAudio amb els defaults de Defaults::Audio; es destrueix sol al ~Audio (cap Ja::quit() explícit). Totes les crides Ja::funcióN(...) d'audio.cpp passen a engine_->funcióN: - playMusicInternal: crossfadeMusic/stopMusic/playMusic - pauseMusic, resumeMusic, stopMusic, fadeOutMusic - playSound x2, stopAllSounds - setSoundVolume, setMusicVolume - getMusicState (via instance->engine_ — és static però pot arribar-hi) Les free functions forwarder del commit 2 (Ja::init/quit/update/playMusic/ pauseMusic/resumeMusic/stopMusic/fadeOutMusic/crossfadeMusic/ getMusicState/setMusicVolume/enableMusic i els equivalents de so) es retiren del .hpp i del .cpp: ja no les crida ningú. Queden com a free functions permanents (les usa Resource::Cache): loadMusic (x2), loadSound, deleteMusic, deleteSound. Aquests darrers consulten Engine::active() per notificar el motor abans d'alliberar. audio.hpp forward-declara també `class Ja::Engine` perquè engine_ és un std::unique_ptr i el dtor es defineix out-of-line al .cpp (= default) — així no cal incloure jail_audio.hpp al header. Els NOLINT(readability-make-member-function-const) d'audio.cpp es mantenen amb raó actualitzada: std::unique_ptr::operator-> retorna T* (no const T*), per tant clang-tidy veu un mètode d'Audio que podria ser const encara que muti l'Engine via el punter. La mutació és real; el NOLINT segueix sent honest. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
1d124e967d
commit
961a59c460
4 files changed
+50
-165
No files matched your search
@@ -178,35 +178,6 @@ namespace Ja {
|
||||
static Engine* active_;
|
||||
};
|
||||
|
||||
// --- Lifecycle forwarders ---
|
||||
// Compat amb els callers actuals. Creen/destrueixen l'Engine únic via
|
||||
// make_unique emmagatzemat al propi .cpp. Al commit següent Audio agafarà
|
||||
// ownership directe i aquests forwarders desapareixeran per a la capa de
|
||||
// control; els de música/so romanen només el temps de la migració.
|
||||
void init(int freq, SDL_AudioFormat format, int num_channels);
|
||||
void quit();
|
||||
void update();
|
||||
|
||||
// --- Music API forwarders (temporal, eliminats al commit 3) ---
|
||||
void playMusic(Music* music, int loop = -1);
|
||||
void pauseMusic();
|
||||
void resumeMusic();
|
||||
void stopMusic();
|
||||
void fadeOutMusic(int milliseconds);
|
||||
void crossfadeMusic(Music* music, int crossfade_ms, int loop = -1);
|
||||
[[nodiscard]] auto getMusicState() -> MusicState;
|
||||
auto setMusicVolume(float volume) -> float;
|
||||
void enableMusic(bool value);
|
||||
|
||||
// --- Sound API forwarders (temporal, eliminats al commit 3) ---
|
||||
auto playSound(Sound* sound, int loop = 0, int group = 0) -> int;
|
||||
auto playSoundOnChannel(Sound* sound, int channel, int loop = 0, int group = 0) -> int;
|
||||
void pauseChannel(int channel);
|
||||
void resumeChannel(int channel);
|
||||
void stopChannel(int channel);
|
||||
auto setSoundVolume(float volume, int group = -1) -> float;
|
||||
void enableSound(bool value);
|
||||
|
||||
// --- Factories i destructors (permanents) ---
|
||||
// No depenen de l'estat del motor: loadMusic/loadSound només construeixen
|
||||
// objectes, deleteMusic/deleteSound consulten Engine::active() per parar
|
||||
|
||||
Reference in new issue
Block a user