fix(render): code quality cleanup

Magic number elimination:
- Create protocol_constants.hpp, warden_constants.hpp,
  render_constants.hpp, ui_constants.hpp
- Replace ~55 magic numbers across game_handler, warden_handler,
  m2_renderer_render

Reduce nesting depth:
- Extract 5 parseEffect* methods from handleSpellLogExecute
  (max indent 52 → 16 cols)
- Extract resolveSpellSchool/playSpellCastSound/playSpellImpactSound
  from 3× duplicate audio blocks in handleSpellGo
- Flatten SMSG_INVENTORY_CHANGE_FAILURE with early-return guards
- Extract drawScreenEdgeVignette() for 3 duplicate vignette blocks

DRY extract patterns:
- Replace 12 compound expansion checks with isPreWotlk() across
  movement_handler (9), chat_handler (1), social_handler (1)

const to constexpr:
- Promote 23+ static const arrays/scalars to static constexpr across
  12 source files

Error handling:
- Convert PIN auth from exceptions to std::optional<PinProof>
- Add [[nodiscard]] to 15+ initialize/parse methods
- Wrap ~20 unchecked initialize() calls with LOG_WARNING/LOG_ERROR

Signed-off-by: Pavel Okhlopkov <pavel.okhlopkov@flant.com>
This commit is contained in:
Pavel Okhlopkov 2026-04-06 22:43:13 +03:00
parent 2e8856bacd
commit 97106bd6ae
41 changed files with 849 additions and 424 deletions

View file

@ -531,19 +531,24 @@ bool Renderer::initialize(core::Window* win) {
lensFlare = nullptr;
weather = std::make_unique<Weather>();
weather->initialize(vkCtx, perFrameSetLayout);
if (!weather->initialize(vkCtx, perFrameSetLayout))
LOG_WARNING("Weather effect initialization failed (non-fatal)");
lightning = std::make_unique<Lightning>();
lightning->initialize(vkCtx, perFrameSetLayout);
if (!lightning->initialize(vkCtx, perFrameSetLayout))
LOG_WARNING("Lightning effect initialization failed (non-fatal)");
swimEffects = std::make_unique<SwimEffects>();
swimEffects->initialize(vkCtx, perFrameSetLayout);
if (!swimEffects->initialize(vkCtx, perFrameSetLayout))
LOG_WARNING("Swim effect initialization failed (non-fatal)");
mountDust = std::make_unique<MountDust>();
mountDust->initialize(vkCtx, perFrameSetLayout);
if (!mountDust->initialize(vkCtx, perFrameSetLayout))
LOG_WARNING("Mount dust effect initialization failed (non-fatal)");
chargeEffect = std::make_unique<ChargeEffect>();
chargeEffect->initialize(vkCtx, perFrameSetLayout);
if (!chargeEffect->initialize(vkCtx, perFrameSetLayout))
LOG_WARNING("Charge effect initialization failed (non-fatal)");
levelUpEffect = std::make_unique<LevelUpEffect>();
@ -1451,7 +1456,8 @@ void Renderer::runDeferredWorldInitStep(float deltaTime) {
if (audioCoordinator_->getMovementSoundManager()) audioCoordinator_->getMovementSoundManager()->initialize(cachedAssetManager);
break;
case 5:
if (questMarkerRenderer) questMarkerRenderer->initialize(vkCtx, perFrameSetLayout, cachedAssetManager);
if (questMarkerRenderer && !questMarkerRenderer->initialize(vkCtx, perFrameSetLayout, cachedAssetManager))
LOG_WARNING("Quest marker renderer re-init failed (non-fatal)");
break;
default:
deferredWorldInitPending_ = false;
@ -1930,7 +1936,8 @@ bool Renderer::initializeRenderers(pipeline::AssetManager* assetManager, const s
// Create M2, WMO, and Character renderers
if (!m2Renderer) {
m2Renderer = std::make_unique<M2Renderer>();
m2Renderer->initialize(vkCtx, perFrameSetLayout, assetManager);
if (!m2Renderer->initialize(vkCtx, perFrameSetLayout, assetManager))
LOG_ERROR("M2Renderer initialization failed");
if (swimEffects) {
swimEffects->setM2Renderer(m2Renderer.get());
}
@ -1959,21 +1966,26 @@ bool Renderer::initializeRenderers(pipeline::AssetManager* assetManager, const s
}
if (!wmoRenderer) {
wmoRenderer = std::make_unique<WMORenderer>();
wmoRenderer->initialize(vkCtx, perFrameSetLayout, assetManager);
if (!wmoRenderer->initialize(vkCtx, perFrameSetLayout, assetManager))
LOG_ERROR("WMORenderer initialization failed");
if (shadowRenderPass != VK_NULL_HANDLE) {
wmoRenderer->initializeShadow(shadowRenderPass);
if (!wmoRenderer->initializeShadow(shadowRenderPass))
LOG_WARNING("WMO shadow pipeline initialization failed");
}
}
// Initialize shadow pipelines for M2 if not yet done
if (m2Renderer && shadowRenderPass != VK_NULL_HANDLE && !m2Renderer->hasShadowPipeline()) {
m2Renderer->initializeShadow(shadowRenderPass);
if (!m2Renderer->initializeShadow(shadowRenderPass))
LOG_WARNING("M2 shadow pipeline initialization failed");
}
if (!characterRenderer) {
characterRenderer = std::make_unique<CharacterRenderer>();
characterRenderer->initialize(vkCtx, perFrameSetLayout, assetManager);
if (!characterRenderer->initialize(vkCtx, perFrameSetLayout, assetManager))
LOG_ERROR("CharacterRenderer initialization failed");
if (shadowRenderPass != VK_NULL_HANDLE) {
characterRenderer->initializeShadow(shadowRenderPass);
if (!characterRenderer->initializeShadow(shadowRenderPass))
LOG_WARNING("Character shadow pipeline initialization failed");
}
}
@ -2068,7 +2080,8 @@ bool Renderer::initializeRenderers(pipeline::AssetManager* assetManager, const s
audioCoordinator_->getMovementSoundManager()->initialize(assetManager);
}
if (questMarkerRenderer) {
questMarkerRenderer->initialize(vkCtx, perFrameSetLayout, assetManager);
if (!questMarkerRenderer->initialize(vkCtx, perFrameSetLayout, assetManager))
LOG_WARNING("Quest marker renderer initialization failed (non-fatal)");
}
if (envFlagEnabled("WOWEE_PREWARM_ZONE_MUSIC", false)) {
@ -2261,7 +2274,8 @@ bool Renderer::loadTerrainArea(const std::string& mapName, int centerX, int cent
audioCoordinator_->getMovementSoundManager()->initialize(cachedAssetManager);
}
if (questMarkerRenderer && cachedAssetManager) {
questMarkerRenderer->initialize(vkCtx, perFrameSetLayout, cachedAssetManager);
if (!questMarkerRenderer->initialize(vkCtx, perFrameSetLayout, cachedAssetManager))
LOG_WARNING("Quest marker renderer re-init failed (non-fatal)");
}
} else {
deferredWorldInitPending_ = true;