From ad44b3f0102e824c96f79ebce65e834a7bc61228 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Tue, 2 Jul 2024 00:59:17 +0200 Subject: [PATCH] Recast: variable name cleanup and improve documentation Renamed variables to accommodate the XZ -> XY change. Also fixed a dead URL to point to an archived version to maintain documentation. --- src/thirdparty/recast/Recast/Include/Recast.h | 4 +-- .../recast/Recast/Source/Recast.cpp | 22 +++++++-------- .../recast/Recast/Source/RecastContour.cpp | 28 +++++++++---------- .../recast/Recast/Source/RecastFilter.cpp | 18 ++++++------ .../recast/Recast/Source/RecastMesh.cpp | 27 ++++-------------- 5 files changed, 41 insertions(+), 58 deletions(-) diff --git a/src/thirdparty/recast/Recast/Include/Recast.h b/src/thirdparty/recast/Recast/Include/Recast.h index 7fe4007e..749e530f 100644 --- a/src/thirdparty/recast/Recast/Include/Recast.h +++ b/src/thirdparty/recast/Recast/Include/Recast.h @@ -1093,7 +1093,7 @@ int rcGetHeightFieldSpanCount(rcContext* context, const rcHeightfield& heightfie /// @param[out] compactHeightfield The resulting compact heightfield. (Must be pre-allocated.) /// @returns True if the operation completed successfully. bool rcBuildCompactHeightfield(rcContext* context, int walkableHeight, int walkableClimb, - rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield); + const rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield); /// Erodes the walkable area within the heightfield by the specified radius. /// @ingroup recast @@ -1281,7 +1281,7 @@ bool rcBuildHeightfieldLayers(rcContext* ctx, rcCompactHeightfield& chf, /// @param[out] cset The resulting contour set. (Must be pre-allocated.) /// @param[in] buildFlags The build flags. (See: #rcBuildContoursFlags) /// @returns True if the operation completed successfully. -bool rcBuildContours(rcContext* ctx, rcCompactHeightfield& chf, +bool rcBuildContours(rcContext* ctx, const rcCompactHeightfield& chf, float maxError, int maxEdgeLen, rcContourSet& cset, int buildFlags = RC_CONTOUR_TESS_WALL_EDGES); diff --git a/src/thirdparty/recast/Recast/Source/Recast.cpp b/src/thirdparty/recast/Recast/Source/Recast.cpp index f927d690..85d5c08f 100644 --- a/src/thirdparty/recast/Recast/Source/Recast.cpp +++ b/src/thirdparty/recast/Recast/Source/Recast.cpp @@ -401,19 +401,19 @@ int rcGetHeightFieldSpanCount(rcContext* context, const rcHeightfield& heightfie } bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, const int walkableClimb, - rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield) + const rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield) { rcAssert(context); rcScopedTimer timer(context, RC_TIMER_BUILD_COMPACTHEIGHTFIELD); const int xSize = heightfield.width; - const int zSize = heightfield.height; + const int ySize = heightfield.height; const int spanCount = rcGetHeightFieldSpanCount(context, heightfield); // Fill in header. compactHeightfield.width = xSize; - compactHeightfield.height = zSize; + compactHeightfield.height = ySize; compactHeightfield.spanCount = spanCount; compactHeightfield.walkableHeight = walkableHeight; compactHeightfield.walkableClimb = walkableClimb; @@ -423,13 +423,13 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con compactHeightfield.bmax[2] += walkableHeight * heightfield.ch; compactHeightfield.cs = heightfield.cs; compactHeightfield.ch = heightfield.ch; - compactHeightfield.cells = (rcCompactCell*)rcAlloc(sizeof(rcCompactCell) * xSize * zSize, RC_ALLOC_PERM); + compactHeightfield.cells = (rcCompactCell*)rcAlloc(sizeof(rcCompactCell) * xSize * ySize, RC_ALLOC_PERM); if (!compactHeightfield.cells) { - context->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.cells' (%d)", xSize * zSize); + context->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.cells' (%d)", xSize * ySize); return false; } - memset(compactHeightfield.cells, 0, sizeof(rcCompactCell) * xSize * zSize); + memset(compactHeightfield.cells, 0, sizeof(rcCompactCell) * xSize * ySize); compactHeightfield.spans = (rcCompactSpan*)rcAlloc(sizeof(rcCompactSpan) * spanCount, RC_ALLOC_PERM); if (!compactHeightfield.spans) { @@ -449,7 +449,7 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con // Fill in cells and spans. int currentCellIndex = 0; - const int numColumns = xSize * zSize; + const int numColumns = xSize * ySize; for (int columnIndex = 0; columnIndex < numColumns; ++columnIndex) { const rcSpan* span = heightfield.spans[columnIndex]; @@ -483,11 +483,11 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con const int MAX_LAYERS = RC_NOT_CONNECTED - 1; int maxLayerIndex = 0; const int zStride = xSize; // for readability - for (int z = 0; z < zSize; ++z) + for (int y = 0; y < ySize; ++y) { for (int x = 0; x < xSize; ++x) { - const rcCompactCell& cell = compactHeightfield.cells[x + z * zStride]; + const rcCompactCell& cell = compactHeightfield.cells[x + y * zStride]; for (int i = (int)cell.index, ni = (int)(cell.index + cell.count); i < ni; ++i) { rcCompactSpan& span = compactHeightfield.spans[i]; @@ -496,9 +496,9 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con { rcSetCon(span, dir, RC_NOT_CONNECTED); const int neighborX = x + rcGetDirOffsetX(dir); - const int neighborZ = z + rcGetDirOffsetY(dir); + const int neighborZ = y + rcGetDirOffsetY(dir); // First check that the neighbour cell is in bounds. - if (neighborX < 0 || neighborZ < 0 || neighborX >= xSize || neighborZ >= zSize) + if (neighborX < 0 || neighborZ < 0 || neighborX >= xSize || neighborZ >= ySize) { continue; } diff --git a/src/thirdparty/recast/Recast/Source/RecastContour.cpp b/src/thirdparty/recast/Recast/Source/RecastContour.cpp index 3bbc9ed4..0d5e3112 100644 --- a/src/thirdparty/recast/Recast/Source/RecastContour.cpp +++ b/src/thirdparty/recast/Recast/Source/RecastContour.cpp @@ -101,7 +101,7 @@ static int getCornerHeight(int x, int y, int i, int dir, } static void walkContour(int x, int y, int i, - rcCompactHeightfield& chf, + const rcCompactHeightfield& chf, unsigned char* flags, rcIntArray& points) { // Choose the first non-connected edge @@ -183,16 +183,16 @@ static void walkContour(int x, int y, int i, } } -static float distancePtSeg(const int x, const int z, - const int px, const int pz, +static float distancePtSeg(const int x, const int y, + const int px, const int py, const int qx, const int qz) { float pqx = (float)(qx - px); - float pqz = (float)(qz - pz); + float pqz = (float)(qz - py); float dx = (float)(x - px); - float dz = (float)(z - pz); + float dy = (float)(y - py); float d = pqx*pqx + pqz*pqz; - float t = pqx*dx + pqz*dz; + float t = pqx*dx + pqz*dy; if (d > 0) t /= d; if (t < 0) @@ -201,9 +201,9 @@ static float distancePtSeg(const int x, const int z, t = 1; dx = px + t*pqx - x; - dz = pz + t*pqz - z; + dy = py + t*pqz - y; - return dx*dx + dz*dz; + return dx*dx + dy*dy; } static void simplifyContour(rcIntArray& points, rcIntArray& simplified, @@ -512,7 +512,7 @@ static bool intersectProp(const int* a, const int* b, const int* c, const int* d } // Returns T iff (a,b,c) are collinear and point c lies -// on the closed segement ab. +// on the closed segment ab. static bool between(const int* a, const int* b, const int* c) { if (!collinear(a, b, c)) @@ -541,7 +541,7 @@ static bool vequal(const int* a, const int* b) return a[0] == b[0] && a[1] == b[1]; } -static bool intersectSegCountour(const int* d0, const int* d1, int i, int n, const int* verts) +static bool intersectSegContour(const int* d0, const int* d1, int i, int n, const int* verts) { // For each edge (k,k+1) of P for (int k = 0; k < n; k++) @@ -749,7 +749,7 @@ static void mergeRegionHoles(rcContext* ctx, rcContourRegion& region) for (int iter = 0; iter < hole->nverts; iter++) { // Find potential diagonals. - // The 'best' vertex must be in the cone described by 3 cosequtive vertices of the outline. + // The 'best' vertex must be in the cone described by 3 consecutive vertices of the outline. // ..o j-1 // | // | * best @@ -777,9 +777,9 @@ static void mergeRegionHoles(rcContext* ctx, rcContourRegion& region) for (int j = 0; j < ndiags; j++) { const int* pt = &outline->verts[diags[j].vert*4]; - bool intersect = intersectSegCountour(pt, corner, diags[j].vert, outline->nverts, outline->verts); + bool intersect = intersectSegContour(pt, corner, diags[j].vert, outline->nverts, outline->verts); for (int k = i; k < region.nholes && !intersect; k++) - intersect |= intersectSegCountour(pt, corner, -1, region.holes[k].contour->nverts, region.holes[k].contour->verts); + intersect |= intersectSegContour(pt, corner, -1, region.holes[k].contour->nverts, region.holes[k].contour->verts); if (!intersect) { index = diags[j].vert; @@ -820,7 +820,7 @@ static void mergeRegionHoles(rcContext* ctx, rcContourRegion& region) /// See the #rcConfig documentation for more information on the configuration parameters. /// /// @see rcAllocContourSet, rcCompactHeightfield, rcContourSet, rcConfig -bool rcBuildContours(rcContext* ctx, rcCompactHeightfield& chf, +bool rcBuildContours(rcContext* ctx, const rcCompactHeightfield& chf, const float maxError, const int maxEdgeLen, rcContourSet& cset, const int buildFlags) { diff --git a/src/thirdparty/recast/Recast/Source/RecastFilter.cpp b/src/thirdparty/recast/Recast/Source/RecastFilter.cpp index dd44a8f9..114ccf89 100644 --- a/src/thirdparty/recast/Recast/Source/RecastFilter.cpp +++ b/src/thirdparty/recast/Recast/Source/RecastFilter.cpp @@ -28,9 +28,9 @@ void rcFilterLowHangingWalkableObstacles(rcContext* context, const int walkableC rcScopedTimer timer(context, RC_TIMER_FILTER_LOW_OBSTACLES); const int xSize = heightfield.width; - const int zSize = heightfield.height; + const int ySize = heightfield.height; - for (int z = 0; z < zSize; ++z) + for (int y = 0; y < ySize; ++y) { for (int x = 0; x < xSize; ++x) { @@ -38,7 +38,7 @@ void rcFilterLowHangingWalkableObstacles(rcContext* context, const int walkableC bool previousWasWalkable = false; unsigned char previousArea = RC_NULL_AREA; - for (rcSpan* span = heightfield.spans[x + z * xSize]; span != NULL; previousSpan = span, span = span->next) + for (rcSpan* span = heightfield.spans[x + y * xSize]; span != NULL; previousSpan = span, span = span->next) { const bool walkable = span->area != RC_NULL_AREA; // If current span is not walkable, but there is walkable @@ -71,11 +71,11 @@ void rcFilterLedgeSpans(rcContext* context, const int walkableHeight, const int const int MAX_HEIGHT = 0xffff; // TODO (graham): Move this to a more visible constant and update usages. // Mark border spans. - for (int z = 0; z < zSize; ++z) + for (int y = 0; y < zSize; ++y) { for (int x = 0; x < xSize; ++x) { - for (rcSpan* span = heightfield.spans[x + z * xSize]; span; span = span->next) + for (rcSpan* span = heightfield.spans[x + y * xSize]; span; span = span->next) { // Skip non walkable spans. if (span->area == RC_NULL_AREA) @@ -96,7 +96,7 @@ void rcFilterLedgeSpans(rcContext* context, const int walkableHeight, const int for (int direction = 0; direction < 4; ++direction) { int dx = x + rcGetDirOffsetX(direction); - int dy = z + rcGetDirOffsetY(direction); + int dy = y + rcGetDirOffsetY(direction); // Skip neighbours which are out of bounds. if (dx < 0 || dy < 0 || dx >= xSize || dy >= zSize) { @@ -161,16 +161,16 @@ void rcFilterWalkableLowHeightSpans(rcContext* context, const int walkableHeight rcScopedTimer timer(context, RC_TIMER_FILTER_WALKABLE); const int xSize = heightfield.width; - const int zSize = heightfield.height; + const int ySize = heightfield.height; const int MAX_HEIGHT = 0xffff; // Remove walkable flag from spans which do not have enough // space above them for the agent to stand there. - for (int z = 0; z < zSize; ++z) + for (int y = 0; y < ySize; ++y) { for (int x = 0; x < xSize; ++x) { - for (rcSpan* span = heightfield.spans[x + z*xSize]; span; span = span->next) + for (rcSpan* span = heightfield.spans[x + y*xSize]; span; span = span->next) { const int bot = (int)(span->smax); const int top = span->next ? (int)(span->next->smin) : MAX_HEIGHT; diff --git a/src/thirdparty/recast/Recast/Source/RecastMesh.cpp b/src/thirdparty/recast/Recast/Source/RecastMesh.cpp index c68eb148..178df6e6 100644 --- a/src/thirdparty/recast/Recast/Source/RecastMesh.cpp +++ b/src/thirdparty/recast/Recast/Source/RecastMesh.cpp @@ -35,7 +35,7 @@ static bool buildMeshAdjacency(unsigned short* polys, const int npolys, const int nverts, const int vertsPerPoly) { // Based on code by Eric Lengyel from: - // http://www.terathon.com/code/edges.php + // https://web.archive.org/web/20080704083314/http://www.terathon.com/code/edges.php int maxEdgeCount = npolys*vertsPerPoly; unsigned short* firstEdge = (unsigned short*)rcAlloc(sizeof(unsigned short)*(nverts + maxEdgeCount), RC_ALLOC_TEMP); @@ -217,7 +217,7 @@ static bool intersectProp(const int* a, const int* b, const int* c, const int* d #if REVERSE_DIRECTION return xorb(right(a,b,c), right(a,b,d)) && xorb(right(c,d,a), right(c,d,b)); #else - return xorb(left(a, b, c), left(a, b, d)) && xorb(left(c, d, a), left(c, d, b)); + return xorb(left(a,b,c), left(a,b,d)) && xorb(left(c,d,a), left(c,d,b)); #endif } @@ -1044,27 +1044,11 @@ static bool removeVertex(rcContext* ctx, rcPolyMesh& mesh, const unsigned short return true; } -void copy_flip_poly_mesh(unsigned short* input,unsigned short *output,int max_idx) -{ - //find actual vertex count - int cidx = 0; - for (int i = 0; i < max_idx; i++) - if (input[i] != 0xffff) - cidx++; - else - break; - - //copy it out - for (int i = 0; i < cidx; i++) - { - output[i] = input[cidx - i-1]; - } -} /// @par /// /// @note If the mesh data is to be used to construct a Detour navigation mesh, then the upper -/// limit must be retricted to <= #DT_VERTS_PER_POLYGON. +/// limit must be restricted to <= #DT_VERTS_PER_POLYGON. /// /// @see rcAllocPolyMesh, rcContourSet, rcPolyMesh, rcConfig bool rcBuildPolyMesh(rcContext* ctx, rcContourSet& cset, const int nvp, rcPolyMesh& mesh) @@ -1290,7 +1274,6 @@ bool rcBuildPolyMesh(rcContext* ctx, rcContourSet& cset, const int nvp, rcPolyMe { unsigned short* p = &mesh.polys[mesh.npolys*nvp*2]; unsigned short* q = &polys[j*nvp]; - //copy_flip_poly_mesh(q, p, nvp); for (int k = 0; k < nvp; ++k) p[k] = q[k]; mesh.regs[mesh.npolys] = cont.reg; @@ -1507,7 +1490,7 @@ bool rcMergePolyMeshes(rcContext* ctx, rcPolyMesh** meshes, const int nmeshes, r for (int j = 0; j < pmesh->nverts; ++j) { unsigned short* v = &pmesh->verts[j*3]; - vremap[j] = addVertex(v[0]+ox, v[1] + oy, v[2], + vremap[j] = addVertex(v[0]+ox, v[1]+oy, v[2], mesh.verts, firstVert, nextVert, mesh.nverts); } @@ -1691,7 +1674,7 @@ void flip_neis_direction(unsigned short* arr, int count) p[nvp+j] = 0x8000 | 3; */ } -void rcFlipPolyMesh(rcPolyMesh& mesh) +void rcFlipPolyMesh(rcPolyMesh& /*mesh*/) { #if !REVERSE_DIRECTION for (int i = 0; i < mesh.npolys; i++)