diff --git a/src/DotRecast.Detour/DtNavMeshQuery.cs b/src/DotRecast.Detour/DtNavMeshQuery.cs index e94c92d..871d098 100644 --- a/src/DotRecast.Detour/DtNavMeshQuery.cs +++ b/src/DotRecast.Detour/DtNavMeshQuery.cs @@ -154,22 +154,17 @@ namespace DotRecast.Detour return DtStatus.DT_SUCCESS; } - /** - * Returns random location on navmesh within the reach of specified location. Polygons are chosen weighted by area. - * The search runs in linear related to number of polygon. The location is not exactly constrained by the circle, - * but it limits the visited polygons. - * - * @param startRef - * The reference id of the polygon where the search starts. - * @param centerPos - * The center of the search circle. [(x, y, z)] - * @param maxRadius - * @param filter - * The polygon filter to apply to the query. - * @param frand - * Function returning a random number [0..1). - * @return Random location - */ + /// Returns random location on navmesh within the reach of specified location. + /// Polygons are chosen weighted by area. The search runs in linear related to number of polygon. + /// The location is not exactly constrained by the circle, but it limits the visited polygons. + /// @param[in] startRef The reference id of the polygon where the search starts. + /// @param[in] centerPos The center of the search circle. [(x, y, z)] + /// @param[in] maxRadius The radius of the search circle. [Units: wu] + /// @param[in] filter The polygon filter to apply to the query. + /// @param[in] frand Function returning a random number [0..1). + /// @param[out] randomRef The reference id of the random location. + /// @param[out] randomPt The random location. [(x, y, z)] + /// @returns The status flags for the query. public DtStatus FindRandomPointAroundCircle(long startRef, RcVec3f centerPos, float maxRadius, IDtQueryFilter filter, IRcRand frand, out long randomRef, out RcVec3f randomPt) { @@ -197,6 +192,18 @@ namespace DotRecast.Detour return FindRandomPointAroundCircle(startRef, centerPos, maxRadius, filter, frand, DtStrictDtPolygonByCircleConstraint.Shared, out randomRef, out randomPt); } + /// Returns random location on navmesh within the reach of specified location. + /// Polygons are chosen weighted by area. The search runs in linear related to number of polygon. + /// The location is not exactly constrained by the circle, but it limits the visited polygons. + /// @param[in] startRef The reference id of the polygon where the search starts. + /// @param[in] centerPos The center of the search circle. [(x, y, z)] + /// @param[in] maxRadius The radius of the search circle. [Units: wu] + /// @param[in] filter The polygon filter to apply to the query. + /// @param[in] frand Function returning a random number [0..1). + /// @param[in] constraint + /// @param[out] randomRef The reference id of the random location. + /// @param[out] randomPt The random location. [(x, y, z)] + /// @returns The status flags for the query. public DtStatus FindRandomPointAroundCircle(long startRef, RcVec3f centerPos, float maxRadius, IDtQueryFilter filter, IRcRand frand, IDtPolygonByCircleConstraint constraint, out long randomRef, out RcVec3f randomPt) @@ -393,13 +400,13 @@ namespace DotRecast.Detour /// /// @p pos does not have to be within the bounds of the polygon or navigation mesh. /// - /// See ClosestPointOnPolyBoundary() for a limited but faster option. + /// See closestPointOnPolyBoundary() for a limited but faster option. /// /// Finds the closest point on the specified polygon. - /// @param[in] ref The reference id of the polygon. - /// @param[in] pos The position to check. [(x, y, z)] - /// @param[out] closest - /// @param[out] posOverPoly + /// @param[in] ref The reference id of the polygon. + /// @param[in] pos The position to check. [(x, y, z)] + /// @param[out] closest The closest point on the polygon. [(x, y, z)] + /// @param[out] posOverPoly True of the position is over the polygon. /// @returns The status flags for the query. public DtStatus ClosestPointOnPoly(long refs, RcVec3f pos, out RcVec3f closest, out bool posOverPoly) { diff --git a/src/DotRecast.Recast/RcHeightfieldLayer.cs b/src/DotRecast.Recast/RcHeightfieldLayer.cs index 43b22d5..83971dd 100644 --- a/src/DotRecast.Recast/RcHeightfieldLayer.cs +++ b/src/DotRecast.Recast/RcHeightfieldLayer.cs @@ -6,48 +6,20 @@ namespace DotRecast.Recast /// @see rcHeightfieldLayerSet public class RcHeightfieldLayer { - public RcVec3f bmin = new RcVec3f(); - - /// < The minimum bounds in world space. [(x, y, z)] - public RcVec3f bmax = new RcVec3f(); - - /// < The maximum bounds in world space. [(x, y, z)] - public float cs; - - /// < The size of each cell. (On the xz-plane.) - public float ch; - - /// < The height of each cell. (The minimum increment along the y-axis.) - public int width; - - /// < The width of the heightfield. (Along the x-axis in cell units.) - public int height; - - /// < The height of the heightfield. (Along the z-axis in cell units.) - public int minx; - - /// < The minimum x-bounds of usable data. - public int maxx; - - /// < The maximum x-bounds of usable data. - public int miny; - - /// < The minimum y-bounds of usable data. (Along the z-axis.) - public int maxy; - - /// < The maximum y-bounds of usable data. (Along the z-axis.) - public int hmin; - - /// < The minimum height bounds of usable data. (Along the y-axis.) - public int hmax; - - /// < The maximum height bounds of usable data. (Along the y-axis.) - public int[] heights; - - /// < The heightfield. [Size: width * height] - public int[] areas; - - /// < Area ids. [Size: Same as #heights] - public int[] cons; /// < Packed neighbor connection information. [Size: Same as #heights] + public RcVec3f bmin = new RcVec3f(); // < The minimum bounds in world space. [(x, y, z)] + public RcVec3f bmax = new RcVec3f(); // < The maximum bounds in world space. [(x, y, z)] + public float cs; // < The size of each cell. (On the xz-plane.) + public float ch; // < The height of each cell. (The minimum increment along the y-axis.) + public int width; // < The width of the heightfield. (Along the x-axis in cell units.) + public int height; // < The height of the heightfield. (Along the z-axis in cell units.) + public int minx; // < The minimum x-bounds of usable data. + public int maxx; // < The maximum x-bounds of usable data. + public int miny; // < The minimum y-bounds of usable data. (Along the z-axis.) + public int maxy; // < The maximum y-bounds of usable data. (Along the z-axis.) + public int hmin; // < The minimum height bounds of usable data. (Along the y-axis.) + public int hmax; // < The maximum height bounds of usable data. (Along the y-axis.) + public int[] heights; // < The heightfield. [Size: width * height] + public int[] areas; // < Area ids. [Size: Same as #heights] + public int[] cons; // < Packed neighbor connection information. [Size: Same as #heights] } } \ No newline at end of file diff --git a/src/DotRecast.Recast/RcHeightfieldLayerSet.cs b/src/DotRecast.Recast/RcHeightfieldLayerSet.cs index 72f4347..5348302 100644 --- a/src/DotRecast.Recast/RcHeightfieldLayerSet.cs +++ b/src/DotRecast.Recast/RcHeightfieldLayerSet.cs @@ -18,7 +18,6 @@ freely, subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ -using DotRecast.Core.Numerics; namespace DotRecast.Recast { diff --git a/src/DotRecast.Recast/RcMeshDetails.cs b/src/DotRecast.Recast/RcMeshDetails.cs index f83b160..257f147 100644 --- a/src/DotRecast.Recast/RcMeshDetails.cs +++ b/src/DotRecast.Recast/RcMeshDetails.cs @@ -869,9 +869,7 @@ namespace DotRecast.Recast { if (@in[vj + 2] > @in[vi + 2]) { - int temp = vi; - vi = vj; - vj = temp; + (vi, vj) = (vj, vi); swapped = true; } } @@ -879,9 +877,7 @@ namespace DotRecast.Recast { if (@in[vj + 0] > @in[vi + 0]) { - int temp = vi; - vi = vj; - vj = temp; + (vi, vj) = (vj, vi); swapped = true; } } diff --git a/src/DotRecast.Recast/RcPolyMesh.cs b/src/DotRecast.Recast/RcPolyMesh.cs index f5bbdf6..48a547f 100644 --- a/src/DotRecast.Recast/RcPolyMesh.cs +++ b/src/DotRecast.Recast/RcPolyMesh.cs @@ -22,52 +22,26 @@ using DotRecast.Core.Numerics; namespace DotRecast.Recast { - /** Represents a polygon mesh suitable for use in building a navigation mesh. */ + /// Represents a polygon mesh suitable for use in building a navigation mesh. + /// @ingroup recast public class RcPolyMesh { - /** The mesh vertices. [Form: (x, y, z) coordinates * #nverts] */ - public int[] verts; + public int[] verts; // The mesh vertices. [Form: (x, y, z) coordinates * #nverts] + public int[] polys; // Polygon and neighbor data. [Length: #maxpolys * 2 * #nvp] + public int[] regs; // The region id assigned to each polygon. [Length: #maxpolys] + public int[] areas; // The area id assigned to each polygon. [Length: #maxpolys] + public int nverts; // The number of vertices. + public int npolys; // The number of polygons. + public int nvp; // The maximum number of vertices per polygon. + public int maxpolys; // The number of allocated polygons. + public int[] flags; // The user defined flags for each polygon. [Length: #maxpolys] + public RcVec3f bmin = new RcVec3f(); // The minimum bounds in world space. [(x, y, z)] + public RcVec3f bmax = new RcVec3f(); // The maximum bounds in world space. [(x, y, z)] - /** Polygon and neighbor data. [Length: #maxpolys * 2 * #nvp] */ - public int[] polys; + public float cs; // The size of each cell. (On the xz-plane.) + public float ch; // The height of each cell. (The minimum increment along the y-axis.) - /** The region id assigned to each polygon. [Length: #maxpolys] */ - public int[] regs; - - /** The area id assigned to each polygon. [Length: #maxpolys] */ - public int[] areas; - - /** The number of vertices. */ - public int nverts; - - /** The number of polygons. */ - public int npolys; - - /** The maximum number of vertices per polygon. */ - public int nvp; - - /** The number of allocated polygons. */ - public int maxpolys; - - /** The user defined flags for each polygon. [Length: #maxpolys] */ - public int[] flags; - - /** The minimum bounds in world space. [(x, y, z)] */ - public RcVec3f bmin = new RcVec3f(); - - /** The maximum bounds in world space. [(x, y, z)] */ - public RcVec3f bmax = new RcVec3f(); - - /** The size of each cell. (On the xz-plane.) */ - public float cs; - - /** The height of each cell. (The minimum increment along the y-axis.) */ - public float ch; - - /** The AABB border size used to generate the source data from which the mesh was derived. */ - public int borderSize; - - /** The max error of the polygon edges in the mesh. */ - public float maxEdgeError; + public int borderSize; // The AABB border size used to generate the source data from which the mesh was derived. + public float maxEdgeError; // The max error of the polygon edges in the mesh. } } \ No newline at end of file diff --git a/src/DotRecast.Recast/RcPolyMeshDetail.cs b/src/DotRecast.Recast/RcPolyMeshDetail.cs index 73ac597..e9e1b21 100644 --- a/src/DotRecast.Recast/RcPolyMeshDetail.cs +++ b/src/DotRecast.Recast/RcPolyMeshDetail.cs @@ -20,28 +20,16 @@ freely, subject to the following restrictions: namespace DotRecast.Recast { - /** - * Contains triangle meshes that represent detailed height data associated with the polygons in its associated polygon - * mesh object. - */ + /// Contains triangle meshes that represent detailed height data associated + /// with the polygons in its associated polygon mesh object. + /// @ingroup recast public class RcPolyMeshDetail { - /** The sub-mesh data. [Size: 4*#nmeshes] */ - public int[] meshes; - - /** The mesh vertices. [Size: 3*#nverts] */ - public float[] verts; - - /** The mesh triangles. [Size: 4*#ntris] */ - public int[] tris; - - /** The number of sub-meshes defined by #meshes. */ - public int nmeshes; - - /** The number of vertices in #verts. */ - public int nverts; - - /** The number of triangles in #tris. */ - public int ntris; + public int[] meshes; //< The sub-mesh data. [Size: 4*#nmeshes] + public float[] verts; //< The mesh vertices. [Size: 3*#nverts] + public int[] tris; //< The mesh triangles. [Size: 4*#ntris] + public int nmeshes; //< The number of sub-meshes defined by #meshes. + public int nverts; //< The number of vertices in #verts. + public int ntris; //< The number of triangles in #tris. } } \ No newline at end of file diff --git a/src/DotRecast.Recast/RcRasterizations.cs b/src/DotRecast.Recast/RcRasterizations.cs index 730db2a..b757f3d 100644 --- a/src/DotRecast.Recast/RcRasterizations.cs +++ b/src/DotRecast.Recast/RcRasterizations.cs @@ -372,7 +372,7 @@ namespace DotRecast.Recast AddSpan(heightfield, x, z, spanMinCellIndex, spanMaxCellIndex, areaID, flagMergeThreshold); } } - + return true; } @@ -421,10 +421,10 @@ namespace DotRecast.Recast /// @param[in] flagMergeThreshold The distance where the walkable flag is favored over the non-walkable flag. /// [Limit: >= 0] [Units: vx] /// @returns True if the operation completed successfully. - public static void RasterizeTriangles(RcTelemetry ctx, float[] verts, int[] tris, int[] triAreaIDs, int numTris, + public static void RasterizeTriangles(RcTelemetry context, float[] verts, int[] tris, int[] triAreaIDs, int numTris, RcHeightfield heightfield, int flagMergeThreshold) { - using var timer = ctx.ScopedTimer(RcTimerLabel.RC_TIMER_RASTERIZE_TRIANGLES); + using var timer = context.ScopedTimer(RcTimerLabel.RC_TIMER_RASTERIZE_TRIANGLES); float inverseCellSize = 1.0f / heightfield.cs; float inverseCellHeight = 1.0f / heightfield.ch; @@ -438,28 +438,25 @@ namespace DotRecast.Recast } } - /** - * Rasterizes a triangle list into the specified heightfield. Expects each triangle to be specified as three - * sequential vertices of 3 floats. Spans will only be added for triangles that overlap the heightfield grid. - * - * @param heightfield - * An initialized heightfield. - * @param verts - * The vertices. [(x, y, z) * numVerts] - * @param areaIds - * The area id's of the triangles. [Limit: <= WALKABLE_AREA] [Size: numTris] - * @param tris - * The triangle indices. [(vertA, vertB, vertC) * nt] - * @param numTris - * The number of triangles. - * @param flagMergeThreshold - * The distance where the walkable flag is favored over the non-walkable flag. [Limit: >= 0] [Units: vx] - * @see Heightfield - */ - public static void RasterizeTriangles(RcHeightfield heightfield, float[] verts, int[] areaIds, int numTris, - int flagMergeThreshold, RcTelemetry ctx) + /// Rasterizes a triangle list into the specified heightfield. + /// + /// Expects each triangle to be specified as three sequential vertices of 3 floats. + /// + /// Spans will only be added for triangles that overlap the heightfield grid. + /// + /// @see rcHeightfield + /// @ingroup recast + /// @param[in,out] context The build context to use during the operation. + /// @param[in] verts The triangle vertices. [(ax, ay, az, bx, by, bz, cx, by, cx) * @p nt] + /// @param[in] triAreaIDs The area id's of the triangles. [Limit: <= #RC_WALKABLE_AREA] [Size: @p nt] + /// @param[in] numTris The number of triangles. + /// @param[in,out] heightfield An initialized heightfield. + /// @param[in] flagMergeThreshold The distance where the walkable flag is favored over the non-walkable flag. + /// [Limit: >= 0] [Units: vx] + /// @returns True if the operation completed successfully. + public static void RasterizeTriangles(RcTelemetry context, float[] verts, int[] triAreaIDs, int numTris, RcHeightfield heightfield, int flagMergeThreshold) { - using var timer = ctx.ScopedTimer(RcTimerLabel.RC_TIMER_RASTERIZE_TRIANGLES); + using var timer = context.ScopedTimer(RcTimerLabel.RC_TIMER_RASTERIZE_TRIANGLES); float inverseCellSize = 1.0f / heightfield.cs; float inverseCellHeight = 1.0f / heightfield.ch; @@ -468,7 +465,7 @@ namespace DotRecast.Recast int v0 = (triIndex * 3 + 0); int v1 = (triIndex * 3 + 1); int v2 = (triIndex * 3 + 2); - RasterizeTri(verts, v0, v1, v2, areaIds[triIndex], heightfield, heightfield.bmin, heightfield.bmax, heightfield.cs, + RasterizeTri(verts, v0, v1, v2, triAreaIDs[triIndex], heightfield, heightfield.bmin, heightfield.bmax, heightfield.cs, inverseCellSize, inverseCellHeight, flagMergeThreshold); } }