mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Recast: small optimization for traverse link algorithm
Only calculate edge directions and normals when we are sure this is going to get used.
This commit is contained in:
parent
3e7c7cb7da
commit
065150158a
@ -865,11 +865,6 @@ dtStatus dtNavMesh::connectTraverseLinks(const dtTileRef tileRef, const dtTraver
|
||||
float baseTmax;
|
||||
rdCalcSubEdgeArea2D(basePolySpos, basePolyEpos, baseDetailPolyEdgeSpos, baseDetailPolyEdgeEpos, baseTmin, baseTmax);
|
||||
|
||||
float baseEdgeDir[3];
|
||||
rdVsub(baseEdgeDir, baseDetailPolyEdgeEpos, baseDetailPolyEdgeSpos);
|
||||
|
||||
float baseEdgeNorm[3];
|
||||
rdCalcEdgeNormal2D(baseEdgeDir, baseEdgeNorm);
|
||||
float basePolyEdgeMid[3];
|
||||
rdVsad(basePolyEdgeMid, baseDetailPolyEdgeSpos, baseDetailPolyEdgeEpos, 0.5f);
|
||||
|
||||
@ -917,6 +912,11 @@ dtStatus dtNavMesh::connectTraverseLinks(const dtTileRef tileRef, const dtTraver
|
||||
neis[0] = baseTile;
|
||||
}
|
||||
|
||||
float baseEdgeDir[3];
|
||||
rdVsub(baseEdgeDir, baseDetailPolyEdgeEpos, baseDetailPolyEdgeSpos);
|
||||
|
||||
float baseEdgeNorm[3];
|
||||
rdCalcEdgeNormal2D(baseEdgeDir, baseEdgeNorm);
|
||||
|
||||
for (int n = nneis - 1; n >= 0; --n)
|
||||
{
|
||||
@ -1028,9 +1028,6 @@ dtStatus dtNavMesh::connectTraverseLinks(const dtTileRef tileRef, const dtTraver
|
||||
float landEdgeDir[3];
|
||||
rdVsub(landEdgeDir, landDetailPolyEdgeEpos, landDetailPolyEdgeSpos);
|
||||
|
||||
float landEdgeNorm[3];
|
||||
rdCalcEdgeNormal2D(landEdgeDir, landEdgeNorm);
|
||||
|
||||
const float elevation = rdMathFabsf(basePolyEdgeMid[2] - landPolyEdgeMid[2]);
|
||||
const float slopeAngle = rdMathFabsf(rdCalcSlopeAngle(basePolyEdgeMid, landPolyEdgeMid));
|
||||
const bool baseOverlaps = rdCalcEdgeOverlap2D(baseDetailPolyEdgeSpos, baseDetailPolyEdgeEpos, landDetailPolyEdgeSpos, landDetailPolyEdgeEpos, baseEdgeDir) > params.minEdgeOverlap;
|
||||
@ -1050,6 +1047,9 @@ dtStatus dtNavMesh::connectTraverseLinks(const dtTileRef tileRef, const dtTraver
|
||||
if (linkedTraverseType && (rdBitCellBit(traverseType) & *linkedTraverseType))
|
||||
continue;
|
||||
|
||||
float landEdgeNorm[3];
|
||||
rdCalcEdgeNormal2D(landEdgeDir, landEdgeNorm);
|
||||
|
||||
const bool basePolyHigher = basePolyEdgeMid[2] > landPolyEdgeMid[2];
|
||||
const float* const lowerEdgeMid = basePolyHigher ? landPolyEdgeMid : basePolyEdgeMid;
|
||||
const float* const higherEdgeMid = basePolyHigher ? basePolyEdgeMid : landPolyEdgeMid;
|
||||
|
Loading…
x
Reference in New Issue
Block a user