Recast: optimize alignPortalLimits

Only calculate shiftAmount if we are going to shift the portal left or right.
This commit is contained in:
Kawe Mazidjatari 2024-11-01 16:07:49 +01:00
parent e2197dd3fe
commit b47b52dd08

View File

@ -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
{