mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-04 12:13:51 +00:00
chore(renderer): extract AnimationController and remove audio pass-throughs
Extract ~1,500 lines of character animation state from Renderer into a dedicated
AnimationController class, and complete the AudioCoordinator migration by removing
all 10 audio pass-through getters from Renderer.
AnimationController:
- New: include/rendering/animation_controller.hpp (182 lines)
- New: src/rendering/animation_controller.cpp (1,703 lines)
- Moves: locomotion state machine (50+ members), mount animation (40+ members),
emote system, footstep triggering, surface detection, melee combat animations
- Renderer holds std::unique_ptr<AnimationController> and delegates completely
- AnimationController accesses audio via renderer_->getAudioCoordinator()
Audio caller migration:
- Migrate ~60 external callers from renderer->getXManager() to AudioCoordinator
directly, grouped by access pattern:
- UIServices: settings_panel, game_screen, toast_manager, chat_panel,
combat_ui, window_manager
- GameServices: game_handler, spell_handler, inventory_handler, quest_handler,
social_handler, combat_handler
- Application singleton: application.cpp, auth_screen.cpp, lua_engine.cpp
- Remove 10 pass-through getter definitions from renderer.cpp
- Remove 10 pass-through getter declarations from renderer.hpp
- Remove individual audio manager forward declarations from renderer.hpp
- Redirect 69 internal renderer.cpp audio calls to audioCoordinator_ directly
- game_handler.cpp: withSoundManager template uses services_.audioCoordinator;
MFP changed from &Renderer::getUiSoundManager to &AudioCoordinator::getUiSoundManager
- GameServices struct: add AudioCoordinator* audioCoordinator member
- settings_panel: applyAudioVolumes(Renderer*) -> applyAudioVolumes(AudioCoordinator*)
This commit is contained in:
parent
5ef600098a
commit
5af9f7aa4b
22 changed files with 2208 additions and 1958 deletions
|
|
@ -14,6 +14,7 @@
|
|||
#include "rendering/character_renderer.hpp"
|
||||
#include "rendering/camera.hpp"
|
||||
#include "rendering/camera_controller.hpp"
|
||||
#include "audio/audio_coordinator.hpp"
|
||||
#include "audio/audio_engine.hpp"
|
||||
#include "audio/music_manager.hpp"
|
||||
#include "game/zone_manager.hpp"
|
||||
|
|
@ -285,8 +286,8 @@ void GameScreen::render(game::GameHandler& gameHandler) {
|
|||
uiErrors_.push_back({msg, 0.0f});
|
||||
if (uiErrors_.size() > 5) uiErrors_.erase(uiErrors_.begin());
|
||||
// Play error sound for each new error (rate-limited by deque cap of 5)
|
||||
if (auto* r = services_.renderer) {
|
||||
if (auto* sfx = r->getUiSoundManager()) sfx->playError();
|
||||
if (auto* ac = services_.audioCoordinator) {
|
||||
if (auto* sfx = ac->getUiSoundManager()) sfx->playError();
|
||||
}
|
||||
});
|
||||
uiErrorCallbackSet_ = true;
|
||||
|
|
@ -345,9 +346,9 @@ void GameScreen::render(game::GameHandler& gameHandler) {
|
|||
|
||||
// Apply saved volume settings once when audio managers first become available
|
||||
if (!settingsPanel_.volumeSettingsApplied_) {
|
||||
auto* renderer = services_.renderer;
|
||||
if (renderer && renderer->getUiSoundManager()) {
|
||||
settingsPanel_.applyAudioVolumes(renderer);
|
||||
auto* ac = services_.audioCoordinator;
|
||||
if (ac && ac->getUiSoundManager()) {
|
||||
settingsPanel_.applyAudioVolumes(ac);
|
||||
settingsPanel_.volumeSettingsApplied_ = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -6525,38 +6526,38 @@ void GameScreen::renderMinimapMarkers(game::GameHandler& gameHandler) {
|
|||
}
|
||||
|
||||
auto applyMuteState = [&]() {
|
||||
auto* activeRenderer = services_.renderer;
|
||||
auto* ac = services_.audioCoordinator;
|
||||
float masterScale = settingsPanel_.soundMuted_ ? 0.0f : static_cast<float>(settingsPanel_.pendingMasterVolume) / 100.0f;
|
||||
audio::AudioEngine::instance().setMasterVolume(masterScale);
|
||||
if (!activeRenderer) return;
|
||||
if (auto* music = activeRenderer->getMusicManager()) {
|
||||
if (!ac) return;
|
||||
if (auto* music = ac->getMusicManager()) {
|
||||
music->setVolume(settingsPanel_.pendingMusicVolume);
|
||||
}
|
||||
if (auto* ambient = activeRenderer->getAmbientSoundManager()) {
|
||||
if (auto* ambient = ac->getAmbientSoundManager()) {
|
||||
ambient->setVolumeScale(settingsPanel_.pendingAmbientVolume / 100.0f);
|
||||
}
|
||||
if (auto* ui = activeRenderer->getUiSoundManager()) {
|
||||
if (auto* ui = ac->getUiSoundManager()) {
|
||||
ui->setVolumeScale(settingsPanel_.pendingUiVolume / 100.0f);
|
||||
}
|
||||
if (auto* combat = activeRenderer->getCombatSoundManager()) {
|
||||
if (auto* combat = ac->getCombatSoundManager()) {
|
||||
combat->setVolumeScale(settingsPanel_.pendingCombatVolume / 100.0f);
|
||||
}
|
||||
if (auto* spell = activeRenderer->getSpellSoundManager()) {
|
||||
if (auto* spell = ac->getSpellSoundManager()) {
|
||||
spell->setVolumeScale(settingsPanel_.pendingSpellVolume / 100.0f);
|
||||
}
|
||||
if (auto* movement = activeRenderer->getMovementSoundManager()) {
|
||||
if (auto* movement = ac->getMovementSoundManager()) {
|
||||
movement->setVolumeScale(settingsPanel_.pendingMovementVolume / 100.0f);
|
||||
}
|
||||
if (auto* footstep = activeRenderer->getFootstepManager()) {
|
||||
if (auto* footstep = ac->getFootstepManager()) {
|
||||
footstep->setVolumeScale(settingsPanel_.pendingFootstepVolume / 100.0f);
|
||||
}
|
||||
if (auto* npcVoice = activeRenderer->getNpcVoiceManager()) {
|
||||
if (auto* npcVoice = ac->getNpcVoiceManager()) {
|
||||
npcVoice->setVolumeScale(settingsPanel_.pendingNpcVoiceVolume / 100.0f);
|
||||
}
|
||||
if (auto* mount = activeRenderer->getMountSoundManager()) {
|
||||
if (auto* mount = ac->getMountSoundManager()) {
|
||||
mount->setVolumeScale(settingsPanel_.pendingMountVolume / 100.0f);
|
||||
}
|
||||
if (auto* activity = activeRenderer->getActivitySoundManager()) {
|
||||
if (auto* activity = ac->getActivitySoundManager()) {
|
||||
activity->setVolumeScale(settingsPanel_.pendingActivityVolume / 100.0f);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue