mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 15:50:20 +00:00
Tighten WMO collision detection when inside buildings
When inside a WMO, use: - Smaller sweep step size (0.20 vs 0.35) for more frequent collision checks - Tighter player radius (0.45 vs 0.50) for less claustrophobic corridors - Stronger push response (0.12 vs 0.08 max) for more responsive walls Prevents clipping through walls in tight indoor spaces while keeping outdoor movement smooth.
This commit is contained in:
parent
d49b69a3a8
commit
b48802855b
3 changed files with 13 additions and 7 deletions
|
|
@ -444,13 +444,16 @@ void CameraController::update(float deltaTime) {
|
|||
|
||||
// Sweep collisions in small steps to reduce tunneling through thin walls/floors.
|
||||
// Skip entirely when stationary to avoid wasting collision calls.
|
||||
// Use tighter steps when inside WMO for more precise collision.
|
||||
{
|
||||
glm::vec3 startPos = *followTarget;
|
||||
glm::vec3 desiredPos = targetPos;
|
||||
float moveDist = glm::length(desiredPos - startPos);
|
||||
|
||||
if (moveDist > 0.01f) {
|
||||
int sweepSteps = std::max(1, std::min(5, static_cast<int>(std::ceil(moveDist / 0.35f))));
|
||||
// Smaller step size when inside buildings for tighter collision
|
||||
float stepSize = cachedInsideWMO ? 0.20f : 0.35f;
|
||||
int sweepSteps = std::max(1, std::min(8, static_cast<int>(std::ceil(moveDist / stepSize))));
|
||||
glm::vec3 stepPos = startPos;
|
||||
glm::vec3 stepDelta = (desiredPos - startPos) / static_cast<float>(sweepSteps);
|
||||
|
||||
|
|
@ -459,7 +462,7 @@ void CameraController::update(float deltaTime) {
|
|||
|
||||
if (wmoRenderer) {
|
||||
glm::vec3 adjusted;
|
||||
if (wmoRenderer->checkWallCollision(stepPos, candidate, adjusted)) {
|
||||
if (wmoRenderer->checkWallCollision(stepPos, candidate, adjusted, cachedInsideWMO)) {
|
||||
candidate.x = adjusted.x;
|
||||
candidate.y = adjusted.y;
|
||||
// Accept upward Z correction (ramps), reject downward
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue