#include "audio/audio_coordinator.hpp" #include "audio/audio_engine.hpp" #include "audio/music_manager.hpp" #include "audio/footstep_manager.hpp" #include "audio/activity_sound_manager.hpp" #include "audio/mount_sound_manager.hpp" #include "audio/npc_voice_manager.hpp" #include "audio/ambient_sound_manager.hpp" #include "audio/ui_sound_manager.hpp" #include "audio/combat_sound_manager.hpp" #include "audio/spell_sound_manager.hpp" #include "audio/movement_sound_manager.hpp" #include "pipeline/asset_manager.hpp" #include "core/logger.hpp" namespace wowee { namespace audio { AudioCoordinator::AudioCoordinator() = default; AudioCoordinator::~AudioCoordinator() { shutdown(); } bool AudioCoordinator::initialize() { // Initialize AudioEngine (singleton) if (!AudioEngine::instance().initialize()) { LOG_WARNING("Failed to initialize AudioEngine - audio will be disabled"); audioAvailable_ = false; return false; } audioAvailable_ = true; // Create all audio managers (initialized later with asset manager) musicManager_ = std::make_unique(); footstepManager_ = std::make_unique(); activitySoundManager_ = std::make_unique(); mountSoundManager_ = std::make_unique(); npcVoiceManager_ = std::make_unique(); ambientSoundManager_ = std::make_unique(); uiSoundManager_ = std::make_unique(); combatSoundManager_ = std::make_unique(); spellSoundManager_ = std::make_unique(); movementSoundManager_ = std::make_unique(); LOG_INFO("AudioCoordinator initialized with ", 10, " audio managers"); return true; } void AudioCoordinator::initializeWithAssets(pipeline::AssetManager* assetManager) { if (!audioAvailable_ || !assetManager) return; if (musicManager_) musicManager_->initialize(assetManager); if (footstepManager_) footstepManager_->initialize(assetManager); if (activitySoundManager_) activitySoundManager_->initialize(assetManager); if (mountSoundManager_) mountSoundManager_->initialize(assetManager); if (npcVoiceManager_) npcVoiceManager_->initialize(assetManager); if (ambientSoundManager_) ambientSoundManager_->initialize(assetManager); if (uiSoundManager_) uiSoundManager_->initialize(assetManager); if (combatSoundManager_) combatSoundManager_->initialize(assetManager); if (spellSoundManager_) spellSoundManager_->initialize(assetManager); if (movementSoundManager_) movementSoundManager_->initialize(assetManager); LOG_INFO("AudioCoordinator initialized with asset manager"); } void AudioCoordinator::shutdown() { // Reset all managers first (they may reference AudioEngine) movementSoundManager_.reset(); spellSoundManager_.reset(); combatSoundManager_.reset(); uiSoundManager_.reset(); ambientSoundManager_.reset(); npcVoiceManager_.reset(); mountSoundManager_.reset(); activitySoundManager_.reset(); footstepManager_.reset(); musicManager_.reset(); // Shutdown audio engine last if (audioAvailable_) { AudioEngine::instance().shutdown(); audioAvailable_ = false; } LOG_INFO("AudioCoordinator shutdown complete"); } } // namespace audio } // namespace wowee