#pragma once #include namespace wowee { namespace pipeline { class AssetManager; } namespace audio { class MusicManager; class FootstepManager; class ActivitySoundManager; class MountSoundManager; class NpcVoiceManager; class AmbientSoundManager; class UiSoundManager; class CombatSoundManager; class SpellSoundManager; class MovementSoundManager; /// Coordinates all audio subsystems. /// Extracted from Renderer to separate audio lifecycle from rendering. /// Owned by Application; Renderer and UI components access through Application. class AudioCoordinator { public: AudioCoordinator(); ~AudioCoordinator(); /// Initialize the audio engine and all managers. /// @return true if audio is available (engine initialized successfully) bool initialize(); /// Initialize managers that need AssetManager (music lookups, sound banks). void initializeWithAssets(pipeline::AssetManager* assetManager); /// Shutdown all audio managers and engine. void shutdown(); // Accessors for all audio managers (same interface as Renderer had) MusicManager* getMusicManager() { return musicManager_.get(); } FootstepManager* getFootstepManager() { return footstepManager_.get(); } ActivitySoundManager* getActivitySoundManager() { return activitySoundManager_.get(); } MountSoundManager* getMountSoundManager() { return mountSoundManager_.get(); } NpcVoiceManager* getNpcVoiceManager() { return npcVoiceManager_.get(); } AmbientSoundManager* getAmbientSoundManager() { return ambientSoundManager_.get(); } UiSoundManager* getUiSoundManager() { return uiSoundManager_.get(); } CombatSoundManager* getCombatSoundManager() { return combatSoundManager_.get(); } SpellSoundManager* getSpellSoundManager() { return spellSoundManager_.get(); } MovementSoundManager* getMovementSoundManager() { return movementSoundManager_.get(); } private: std::unique_ptr musicManager_; std::unique_ptr footstepManager_; std::unique_ptr activitySoundManager_; std::unique_ptr mountSoundManager_; std::unique_ptr npcVoiceManager_; std::unique_ptr ambientSoundManager_; std::unique_ptr uiSoundManager_; std::unique_ptr combatSoundManager_; std::unique_ptr spellSoundManager_; std::unique_ptr movementSoundManager_; bool audioAvailable_ = false; }; } // namespace audio } // namespace wowee