mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-05 04:33:51 +00:00
refactor: add withSoundManager() template to reduce renderer boilerplate
Add GameHandler::withSoundManager() that encapsulates the repeated getInstance()->getRenderer()->getSoundManager() null-check chain. Replace 6 call sites, with helper available for future consolidation of remaining 25 sites.
This commit is contained in:
parent
a0267e6e95
commit
ea15740e17
2 changed files with 15 additions and 22 deletions
|
|
@ -2000,6 +2000,9 @@ public:
|
||||||
void fireAddonEvent(const std::string& event, const std::vector<std::string>& args = {}) {
|
void fireAddonEvent(const std::string& event, const std::vector<std::string>& args = {}) {
|
||||||
if (addonEventCallback_) addonEventCallback_(event, args);
|
if (addonEventCallback_) addonEventCallback_(event, args);
|
||||||
}
|
}
|
||||||
|
// Convenience: invoke a callback with a sound manager obtained from the renderer.
|
||||||
|
template<typename ManagerGetter, typename Callback>
|
||||||
|
void withSoundManager(ManagerGetter getter, Callback cb);
|
||||||
|
|
||||||
// Reputation change toast: factionName, delta, new standing
|
// Reputation change toast: factionName, delta, new standing
|
||||||
using RepChangeCallback = std::function<void(const std::string& factionName, int32_t delta, int32_t standing)>;
|
using RepChangeCallback = std::function<void(const std::string& factionName, int32_t delta, int32_t standing)>;
|
||||||
|
|
|
||||||
|
|
@ -615,6 +615,12 @@ static QuestQueryRewards tryParseQuestRewards(const std::vector<uint8_t>& data,
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
template<typename ManagerGetter, typename Callback>
|
||||||
|
void GameHandler::withSoundManager(ManagerGetter getter, Callback cb) {
|
||||||
|
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
||||||
|
if (auto* mgr = (renderer->*getter)()) cb(mgr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GameHandler::GameHandler() {
|
GameHandler::GameHandler() {
|
||||||
LOG_DEBUG("GameHandler created");
|
LOG_DEBUG("GameHandler created");
|
||||||
|
|
@ -1687,9 +1693,7 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
std::string msg = "Received: " + link;
|
std::string msg = "Received: " + link;
|
||||||
if (count > 1) msg += " x" + std::to_string(count);
|
if (count > 1) msg += " x" + std::to_string(count);
|
||||||
addSystemChatMessage(msg);
|
addSystemChatMessage(msg);
|
||||||
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
withSoundManager(&rendering::Renderer::getUiSoundManager, [](auto* sfx) { sfx->playLootItem(); });
|
||||||
if (auto* sfx = renderer->getUiSoundManager()) sfx->playLootItem();
|
|
||||||
}
|
|
||||||
if (itemLootCallback_) itemLootCallback_(itemId, count, quality, itemName);
|
if (itemLootCallback_) itemLootCallback_(itemId, count, quality, itemName);
|
||||||
fireAddonEvent("CHAT_MSG_LOOT", {msg, "", std::to_string(itemId), std::to_string(count)});
|
fireAddonEvent("CHAT_MSG_LOOT", {msg, "", std::to_string(itemId), std::to_string(count)});
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2879,9 +2883,7 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
addSystemChatMessage("You have learned " + name + ".");
|
addSystemChatMessage("You have learned " + name + ".");
|
||||||
else
|
else
|
||||||
addSystemChatMessage("Spell learned.");
|
addSystemChatMessage("Spell learned.");
|
||||||
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
withSoundManager(&rendering::Renderer::getUiSoundManager, [](auto* sfx) { sfx->playQuestActivate(); });
|
||||||
if (auto* sfx = renderer->getUiSoundManager()) sfx->playQuestActivate();
|
|
||||||
}
|
|
||||||
fireAddonEvent("TRAINER_UPDATE", {});
|
fireAddonEvent("TRAINER_UPDATE", {});
|
||||||
fireAddonEvent("SPELLS_CHANGED", {});
|
fireAddonEvent("SPELLS_CHANGED", {});
|
||||||
};
|
};
|
||||||
|
|
@ -2901,9 +2903,7 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
else if (errorCode != 0) msg += " (error " + std::to_string(errorCode) + ")";
|
else if (errorCode != 0) msg += " (error " + std::to_string(errorCode) + ")";
|
||||||
addUIError(msg);
|
addUIError(msg);
|
||||||
addSystemChatMessage(msg);
|
addSystemChatMessage(msg);
|
||||||
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
withSoundManager(&rendering::Renderer::getUiSoundManager, [](auto* sfx) { sfx->playError(); });
|
||||||
if (auto* sfx = renderer->getUiSoundManager()) sfx->playError();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Minimap ping
|
// Minimap ping
|
||||||
|
|
@ -2922,9 +2922,7 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
ping.age = 0.0f;
|
ping.age = 0.0f;
|
||||||
minimapPings_.push_back(ping);
|
minimapPings_.push_back(ping);
|
||||||
if (senderGuid != playerGuid) {
|
if (senderGuid != playerGuid) {
|
||||||
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
withSoundManager(&rendering::Renderer::getUiSoundManager, [](auto* sfx) { sfx->playMinimapPing(); });
|
||||||
if (auto* sfx = renderer->getUiSoundManager()) sfx->playMinimapPing();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
dispatchTable_[Opcode::SMSG_ZONE_UNDER_ATTACK] = [this](network::Packet& packet) {
|
dispatchTable_[Opcode::SMSG_ZONE_UNDER_ATTACK] = [this](network::Packet& packet) {
|
||||||
|
|
@ -3791,11 +3789,7 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
craftQueueRemaining_ = 0;
|
craftQueueRemaining_ = 0;
|
||||||
queuedSpellId_ = 0;
|
queuedSpellId_ = 0;
|
||||||
queuedSpellTarget_ = 0;
|
queuedSpellTarget_ = 0;
|
||||||
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
withSoundManager(&rendering::Renderer::getSpellSoundManager, [](auto* ssm) { ssm->stopPrecast(); });
|
||||||
if (auto* ssm = renderer->getSpellSoundManager()) {
|
|
||||||
ssm->stopPrecast();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (spellCastAnimCallback_) {
|
if (spellCastAnimCallback_) {
|
||||||
spellCastAnimCallback_(playerGuid, false, false);
|
spellCastAnimCallback_(playerGuid, false, false);
|
||||||
}
|
}
|
||||||
|
|
@ -18437,11 +18431,7 @@ void GameHandler::handleCastFailed(network::Packet& packet) {
|
||||||
queuedSpellTarget_ = 0;
|
queuedSpellTarget_ = 0;
|
||||||
|
|
||||||
// Stop precast sound — spell failed before completing
|
// Stop precast sound — spell failed before completing
|
||||||
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
withSoundManager(&rendering::Renderer::getSpellSoundManager, [](auto* ssm) { ssm->stopPrecast(); });
|
||||||
if (auto* ssm = renderer->getSpellSoundManager()) {
|
|
||||||
ssm->stopPrecast();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show failure reason in the UIError overlay and in chat
|
// Show failure reason in the UIError overlay and in chat
|
||||||
int powerType = -1;
|
int powerType = -1;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue