From 6343ceb151d04f409bae311718b50cd07ebf34b4 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Wed, 25 Mar 2026 15:23:31 -0700 Subject: [PATCH] refactor: extract updateTimers() from GameHandler::update() Move 164 lines of timer/pending-state logic into updateTimers(): auction delay, quest accept timeouts, money delta, GO loot retries, name query resync, loot money notifications, auto-inspect throttling. update() is now ~430 lines (down from original 704). --- include/game/game_handler.hpp | 1 + src/game/game_handler.cpp | 65 +++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/include/game/game_handler.hpp b/include/game/game_handler.hpp index c6cc8536..5fb28bc4 100644 --- a/include/game/game_handler.hpp +++ b/include/game/game_handler.hpp @@ -2315,6 +2315,7 @@ public: */ void update(float deltaTime); void updateNetworking(float deltaTime); + void updateTimers(float deltaTime); /** * Reset DBC-backed caches so they reload from new expansion data. diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 74e313d9..6f145d52 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -928,36 +928,7 @@ void GameHandler::updateNetworking(float deltaTime) { } } -void GameHandler::update(float deltaTime) { - // Fire deferred char-create callback (outside ImGui render) - if (pendingCharCreateResult_) { - pendingCharCreateResult_ = false; - if (charCreateCallback_) { - charCreateCallback_(pendingCharCreateSuccess_, pendingCharCreateMsg_); - } - } - - if (!socket) { - return; - } - - updateNetworking(deltaTime); - if (!socket) return; // disconnect() may have been called - - // Validate target still exists - if (targetGuid != 0 && !entityManager.hasEntity(targetGuid)) { - clearTarget(); - } - - // Detect combat state transitions → fire PLAYER_REGEN_DISABLED / PLAYER_REGEN_ENABLED - { - bool combatNow = isInCombat(); - if (combatNow != wasCombat_) { - wasCombat_ = combatNow; - fireAddonEvent(combatNow ? "PLAYER_REGEN_DISABLED" : "PLAYER_REGEN_ENABLED", {}); - } - } - +void GameHandler::updateTimers(float deltaTime) { if (auctionSearchDelayTimer_ > 0.0f) { auctionSearchDelayTimer_ -= deltaTime; if (auctionSearchDelayTimer_ < 0.0f) auctionSearchDelayTimer_ = 0.0f; @@ -1122,6 +1093,40 @@ void GameHandler::update(float deltaTime) { LOG_DEBUG("Sent CMSG_INSPECT for player 0x", std::hex, guid, std::dec); } } +} + +void GameHandler::update(float deltaTime) { + // Fire deferred char-create callback (outside ImGui render) + if (pendingCharCreateResult_) { + pendingCharCreateResult_ = false; + if (charCreateCallback_) { + charCreateCallback_(pendingCharCreateSuccess_, pendingCharCreateMsg_); + } + } + + if (!socket) { + return; + } + + updateNetworking(deltaTime); + if (!socket) return; // disconnect() may have been called + + // Validate target still exists + if (targetGuid != 0 && !entityManager.hasEntity(targetGuid)) { + clearTarget(); + } + + // Detect combat state transitions → fire PLAYER_REGEN_DISABLED / PLAYER_REGEN_ENABLED + { + bool combatNow = isInCombat(); + if (combatNow != wasCombat_) { + wasCombat_ = combatNow; + fireAddonEvent(combatNow ? "PLAYER_REGEN_DISABLED" : "PLAYER_REGEN_ENABLED", {}); + } + } + + updateTimers(deltaTime); + // Send periodic heartbeat if in world if (state == WorldState::IN_WORLD) {