From b47b52dd08f85f9d1488ae47ebda221a51ccdf9a Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:07:49 +0100 Subject: [PATCH] Recast: optimize alignPortalLimits Only calculate shiftAmount if we are going to shift the portal left or right. --- .../recast/Detour/Source/DetourNavMesh.cpp | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/thirdparty/recast/Detour/Source/DetourNavMesh.cpp b/src/thirdparty/recast/Detour/Source/DetourNavMesh.cpp index aaef4e4d..50e3bdc6 100644 --- a/src/thirdparty/recast/Detour/Source/DetourNavMesh.cpp +++ b/src/thirdparty/recast/Detour/Source/DetourNavMesh.cpp @@ -128,18 +128,21 @@ static void alignPortalLimits(const float* portal1Pos, const float* portal1Norm, float cross[3]; rdVcross(cross, delta, portal1Norm); - const float span = portalTmax-portalTmin; - const float shiftAmount = maxAlign * rdMathFabsf(cross[2]) * span; + if (maxAlign > 0 && (cross[2] < 0 || cross[2] > 0)) + { + const float span = portalTmax-portalTmin; + const float shiftAmount = maxAlign*rdMathFabsf(cross[2]) * span; - if (cross[2] < 0) - { - outPortalTmin = rdMin(portalTmax, portalTmin+shiftAmount); - outPortalTmax = rdMin(1.0f, portalTmax+shiftAmount); - } - else if (cross[2] > 0) - { - outPortalTmin = rdMax(0.0f, portalTmin-shiftAmount); - outPortalTmax = rdMax(portalTmin, portalTmax-shiftAmount); + if (cross[2] < 0) + { + outPortalTmin = rdMin(portalTmax, portalTmin+shiftAmount); + outPortalTmax = rdMin(1.0f, portalTmax+shiftAmount); + } + else // On right side. + { + outPortalTmin = rdMax(0.0f, portalTmin-shiftAmount); + outPortalTmax = rdMax(portalTmin, portalTmax-shiftAmount); + } } else {