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
@@ -6,9 +6,13 @@
|
||||
#include <string> // Per a string
|
||||
#include <utility> // Per a move
|
||||
|
||||
// Forward-declares per no incloure core/audio/jail_audio.hpp al header (conté
|
||||
// l'engine complet de streaming amb stb_vorbis).
|
||||
// Forward-declares per no incloure core/audio/jail_audio.hpp al header. Els
|
||||
// tres símbols (Music/Sound per al punter que exposa la API i Engine per al
|
||||
// std::unique_ptr<Engine> membre) s'usen només per punter al header, així que
|
||||
// el forward-decl basta. El ~Audio() en .cpp veu la definició completa i
|
||||
// instancia correctament el dtor de l'unique_ptr.
|
||||
namespace Ja {
|
||||
class Engine;
|
||||
struct Music;
|
||||
struct Sound;
|
||||
} // namespace Ja
|
||||
@@ -126,9 +130,10 @@ class Audio {
|
||||
// --- Variables membre ---
|
||||
static std::unique_ptr<Audio> instance; // Instància única d'Audio
|
||||
|
||||
Config config_{}; // Configuració injectada (volums, enables)
|
||||
Music music_; // Estat de la música
|
||||
bool enabled_{true}; // Estat general de l'àudio
|
||||
bool sound_enabled_{true}; // Estat dels efectes de so
|
||||
bool music_enabled_{true}; // Estat de la música
|
||||
std::unique_ptr<Ja::Engine> engine_; // Motor de baix nivell (owned); viu mentre Audio viu.
|
||||
Config config_{}; // Configuració injectada (volums, enables)
|
||||
Music music_; // Estat de la música (nom + loop cachejats)
|
||||
bool enabled_{true}; // Estat general de l'àudio
|
||||
bool sound_enabled_{true}; // Estat dels efectes de so
|
||||
bool music_enabled_{true}; // Estat de la música
|
||||
};
|
||||
Reference in new issue
Block a user