Fix interior WMO floor gaps, water exit stair clipping, NPC equipment, portal animation

- Fix Stormwind barracks floor: interior WMO groups named "facade" were
  incorrectly marked as LOD shells and hidden when close. Add !isIndoor
  guard to all LOD detection conditions so interior groups always render.
- Fix water exit stair clipping: anchor lastGroundZ to current position
  on swim exit, set grounded=true for full step-up budget, add upward
  velocity boost to clear stair lip geometry.
- Re-enable NPC humanoid equipment geosets (kEnableNpcHumanoidOverrides)
  so guards render with proper armor instead of underwear.
- Keep instance portal GameObjects animated (spinning/glowing) instead
  of freezing all GO animations indiscriminately.
- Fix equipment disappearing after instance round-trip by resetting
  dirty tracking on world reload.
- Fix multi-doodad-set loading: load both set 0 (global) and placement-
  specific doodad set, with dedup to avoid double-loading.
- Clear placedWmoIds in softReset/unloadAll to prevent stale dedup.
- Apply MODF rotation to instance WMOs, snap player to WMO floor.
- Re-enable rebuildSpatialIndex in setInstanceTransform.
- Store precomputeFloorCache results in precomputed grid.
- Add F8 debug key for WMO floor diagnostics at player position.
- Expand mapIdToName with all Classic/TBC/WotLK instance map IDs.
This commit is contained in:
Kelsi 2026-03-04 19:47:01 -08:00
parent bec7a678aa
commit 16d44c5bb3
6 changed files with 285 additions and 28 deletions

View file

@ -659,7 +659,17 @@ void CameraController::update(float deltaTime) {
grounded = false;
} else {
// Exiting water — give a small upward boost to help climb onto shore.
// Exiting water — boost upward to help climb onto shore/stairs.
if (wasSwimming) {
// Anchor lastGroundZ to current position so WMO floor probes
// start from a sensible height instead of stale pre-swim values.
lastGroundZ = targetPos.z;
grounded = true; // Treat as grounded so step-up budget is full
// Small upward boost to clear stair lip geometry
if (verticalVelocity < 1.5f) {
verticalVelocity = 1.5f;
}
}
swimming = false;
if (glm::length(movement) > 0.001f) {