changed class names by c++ recastnavigation

This commit is contained in:
ikpil 2023-06-08 20:53:03 +09:00
parent 5ab6aaba56
commit b2a631a8fc
74 changed files with 486 additions and 491 deletions

View File

@ -1,6 +1,6 @@
namespace DotRecast.Core
{
public class Edge
public class RcEdge
{
public int[] vert = new int[2];
public int[] polyEdge = new int[2];

View File

@ -38,6 +38,6 @@ namespace DotRecast.Detour.Dynamic.Colliders
return _bounds;
}
public abstract void Rasterize(Heightfield hf, Telemetry telemetry);
public abstract void Rasterize(RcHeightfield hf, Telemetry telemetry);
}
}

View File

@ -60,7 +60,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
return bounds;
}
public override void Rasterize(Heightfield hf, Telemetry telemetry)
public override void Rasterize(RcHeightfield hf, Telemetry telemetry)
{
RecastFilledVolumeRasterization.RasterizeBox(
hf, center, halfEdges, area, (int)Math.Floor(flagMergeThreshold / hf.ch), telemetry);

View File

@ -36,7 +36,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
this.radius = radius;
}
public override void Rasterize(Heightfield hf, Telemetry telemetry)
public override void Rasterize(RcHeightfield hf, Telemetry telemetry)
{
RecastFilledVolumeRasterization.RasterizeCapsule(hf, start, end, radius, area, (int)Math.Floor(flagMergeThreshold / hf.ch),
telemetry);

View File

@ -66,7 +66,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
return bounds;
}
public void Rasterize(Heightfield hf, Telemetry telemetry)
public void Rasterize(RcHeightfield hf, Telemetry telemetry)
{
foreach (var c in colliders)
c.Rasterize(hf, telemetry);

View File

@ -40,7 +40,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
this.triangles = triangles;
}
public override void Rasterize(Heightfield hf, Telemetry telemetry)
public override void Rasterize(RcHeightfield hf, Telemetry telemetry)
{
RecastFilledVolumeRasterization.RasterizeConvex(hf, vertices, triangles, area,
(int)Math.Floor(flagMergeThreshold / hf.ch), telemetry);

View File

@ -36,7 +36,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
this.radius = radius;
}
public override void Rasterize(Heightfield hf, Telemetry telemetry)
public override void Rasterize(RcHeightfield hf, Telemetry telemetry)
{
RecastFilledVolumeRasterization.RasterizeCylinder(hf, start, end, radius, area, (int)Math.Floor(flagMergeThreshold / hf.ch),
telemetry);

View File

@ -23,6 +23,6 @@ namespace DotRecast.Detour.Dynamic.Colliders
public interface ICollider
{
float[] Bounds();
void Rasterize(Heightfield hf, Telemetry telemetry);
void Rasterize(RcHeightfield hf, Telemetry telemetry);
}
}

View File

@ -34,7 +34,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
this.radius = radius;
}
public override void Rasterize(Heightfield hf, Telemetry telemetry)
public override void Rasterize(RcHeightfield hf, Telemetry telemetry)
{
RecastFilledVolumeRasterization.RasterizeSphere(hf, center, radius, area, (int)Math.Floor(flagMergeThreshold / hf.ch),
telemetry);

View File

@ -56,7 +56,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
return bounds;
}
public override void Rasterize(Heightfield hf, Telemetry telemetry)
public override void Rasterize(RcHeightfield hf, Telemetry telemetry)
{
for (int i = 0; i < triangles.Length; i += 3)
{

View File

@ -88,7 +88,7 @@ namespace DotRecast.Detour.Dynamic
return new VoxelQuery(navMeshParams.orig, navMeshParams.tileWidth, navMeshParams.tileHeight, LookupHeightfield);
}
private Heightfield LookupHeightfield(int x, int z)
private RcHeightfield LookupHeightfield(int x, int z)
{
return GetTileAt(x, z)?.checkpoint.heightfield;
}

View File

@ -46,7 +46,7 @@ namespace DotRecast.Detour.Dynamic
{
if (dirty)
{
Heightfield heightfield = BuildHeightfield(config, telemetry);
RcHeightfield heightfield = BuildHeightfield(config, telemetry);
RecastBuilderResult r = BuildRecast(builder, config, voxelTile, heightfield, telemetry);
NavMeshDataCreateParams option = NavMeshCreateParams(voxelTile.tileX, voxelTile.tileZ, voxelTile.cellSize,
voxelTile.cellHeight, config, r);
@ -57,10 +57,10 @@ namespace DotRecast.Detour.Dynamic
return false;
}
private Heightfield BuildHeightfield(DynamicNavMeshConfig config, Telemetry telemetry)
private RcHeightfield BuildHeightfield(DynamicNavMeshConfig config, Telemetry telemetry)
{
ICollection<long> rasterizedColliders = checkpoint != null ? checkpoint.colliders : ImmutableHashSet<long>.Empty;
Heightfield heightfield = checkpoint != null ? checkpoint.heightfield : voxelTile.Heightfield();
RcHeightfield heightfield = checkpoint != null ? checkpoint.heightfield : voxelTile.Heightfield();
foreach (var (cid, c) in colliders)
{
if (!rasterizedColliders.Contains(cid))
@ -79,9 +79,9 @@ namespace DotRecast.Detour.Dynamic
}
private RecastBuilderResult BuildRecast(RecastBuilder builder, DynamicNavMeshConfig config, VoxelTile vt,
Heightfield heightfield, Telemetry telemetry)
RcHeightfield heightfield, Telemetry telemetry)
{
RecastConfig rcConfig = new RecastConfig(config.useTiles, config.tileSizeX, config.tileSizeZ, vt.borderSize,
RcConfig rcConfig = new RcConfig(config.useTiles, config.tileSizeX, config.tileSizeZ, vt.borderSize,
config.partitionType, vt.cellSize, vt.cellHeight, config.walkableSlopeAngle, true, true, true,
config.walkableHeight, config.walkableRadius, config.walkableClimb, config.minRegionArea, config.regionMergeArea,
config.maxEdgeLen, config.maxSimplificationError,
@ -119,8 +119,8 @@ namespace DotRecast.Detour.Dynamic
private NavMeshDataCreateParams NavMeshCreateParams(int tilex, int tileZ, float cellSize, float cellHeight,
DynamicNavMeshConfig config, RecastBuilderResult rcResult)
{
PolyMesh m_pmesh = rcResult.GetMesh();
PolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
RcPolyMesh m_pmesh = rcResult.GetMesh();
RcPolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
NavMeshDataCreateParams option = new NavMeshDataCreateParams();
for (int i = 0; i < m_pmesh.npolys; ++i)
{

View File

@ -23,28 +23,28 @@ namespace DotRecast.Detour.Dynamic
{
public class DynamicTileCheckpoint
{
public readonly Heightfield heightfield;
public readonly RcHeightfield heightfield;
public readonly ISet<long> colliders;
public DynamicTileCheckpoint(Heightfield heightfield, ISet<long> colliders)
public DynamicTileCheckpoint(RcHeightfield heightfield, ISet<long> colliders)
{
this.colliders = colliders;
this.heightfield = Clone(heightfield);
}
private Heightfield Clone(Heightfield source)
private RcHeightfield Clone(RcHeightfield source)
{
Heightfield clone = new Heightfield(source.width, source.height, source.bmin, source.bmax, source.cs,
RcHeightfield clone = new RcHeightfield(source.width, source.height, source.bmin, source.bmax, source.cs,
source.ch, source.borderSize);
for (int z = 0, pz = 0; z < source.height; z++, pz += source.width)
{
for (int x = 0; x < source.width; x++)
{
Span span = source.spans[pz + x];
Span prevCopy = null;
RcSpan span = source.spans[pz + x];
RcSpan prevCopy = null;
while (span != null)
{
Span copy = new Span();
RcSpan copy = new RcSpan();
copy.smin = span.smin;
copy.smax = span.smax;
copy.area = span.area;

View File

@ -61,17 +61,17 @@ namespace DotRecast.Detour.Dynamic.Io
tiles.Add(tile);
}
public RecastConfig GetConfig(VoxelTile tile, PartitionType partitionType, int maxPolyVerts, int regionMergeSize,
public RcConfig GetConfig(VoxelTile tile, PartitionType partitionType, int maxPolyVerts, int regionMergeSize,
bool filterLowHangingObstacles, bool filterLedgeSpans, bool filterWalkableLowHeightSpans,
AreaModification walkbableAreaMod, bool buildMeshDetail, float detailSampleDist, float detailSampleMaxError)
{
return new RecastConfig(useTiles, tileSizeX, tileSizeZ, tile.borderSize, partitionType, cellSize, tile.cellHeight,
return new RcConfig(useTiles, tileSizeX, tileSizeZ, tile.borderSize, partitionType, cellSize, tile.cellHeight,
walkableSlopeAngle, filterLowHangingObstacles, filterLedgeSpans, filterWalkableLowHeightSpans, walkableHeight,
walkableRadius, walkableClimb, minRegionArea, regionMergeArea, maxEdgeLen, maxSimplificationError, maxPolyVerts,
buildMeshDetail, detailSampleDist, detailSampleMaxError, walkbableAreaMod);
}
public static VoxelFile From(RecastConfig config, List<RecastBuilderResult> results)
public static VoxelFile From(RcConfig config, List<RecastBuilderResult> results)
{
VoxelFile f = new VoxelFile();
f.version = 1;
@ -146,7 +146,7 @@ namespace DotRecast.Detour.Dynamic.Io
};
foreach (VoxelTile vt in mesh.VoxelTiles())
{
Heightfield heightfield = vt.Heightfield();
RcHeightfield heightfield = vt.Heightfield();
f.tiles.Add(new VoxelTile(vt.tileX, vt.tileZ, heightfield));
f.bounds[0] = Math.Min(f.bounds[0], vt.boundsMin.x);
f.bounds[1] = Math.Min(f.bounds[1], vt.boundsMin.y);

View File

@ -51,7 +51,7 @@ namespace DotRecast.Detour.Dynamic.Io
spanData = ToByteArray(buffer, width, depth, VoxelFile.PREFERRED_BYTE_ORDER);
}
public VoxelTile(int tileX, int tileZ, Heightfield heightfield)
public VoxelTile(int tileX, int tileZ, RcHeightfield heightfield)
{
this.tileX = tileX;
this.tileZ = tileZ;
@ -65,25 +65,25 @@ namespace DotRecast.Detour.Dynamic.Io
spanData = SerializeSpans(heightfield, VoxelFile.PREFERRED_BYTE_ORDER);
}
public Heightfield Heightfield()
public RcHeightfield Heightfield()
{
return VoxelFile.PREFERRED_BYTE_ORDER == RcByteOrder.BIG_ENDIAN ? HeightfieldBE() : HeightfieldLE();
}
private Heightfield HeightfieldBE()
private RcHeightfield HeightfieldBE()
{
Heightfield hf = new Heightfield(width, depth, boundsMin, boundsMax, cellSize, cellHeight, borderSize);
RcHeightfield hf = new RcHeightfield(width, depth, boundsMin, boundsMax, cellSize, cellHeight, borderSize);
int position = 0;
for (int z = 0, pz = 0; z < depth; z++, pz += width)
{
for (int x = 0; x < width; x++)
{
Span prev = null;
RcSpan prev = null;
int spanCount = ByteUtils.GetShortBE(spanData, position);
position += 2;
for (int s = 0; s < spanCount; s++)
{
Span span = new Span();
RcSpan span = new RcSpan();
span.smin = ByteUtils.GetIntBE(spanData, position);
position += 4;
span.smax = ByteUtils.GetIntBE(spanData, position);
@ -107,20 +107,20 @@ namespace DotRecast.Detour.Dynamic.Io
return hf;
}
private Heightfield HeightfieldLE()
private RcHeightfield HeightfieldLE()
{
Heightfield hf = new Heightfield(width, depth, boundsMin, boundsMax, cellSize, cellHeight, borderSize);
RcHeightfield hf = new RcHeightfield(width, depth, boundsMin, boundsMax, cellSize, cellHeight, borderSize);
int position = 0;
for (int z = 0, pz = 0; z < depth; z++, pz += width)
{
for (int x = 0; x < width; x++)
{
Span prev = null;
RcSpan prev = null;
int spanCount = ByteUtils.GetShortLE(spanData, position);
position += 2;
for (int s = 0; s < spanCount; s++)
{
Span span = new Span();
RcSpan span = new RcSpan();
span.smin = ByteUtils.GetIntLE(spanData, position);
position += 4;
span.smax = ByteUtils.GetIntLE(spanData, position);
@ -144,7 +144,7 @@ namespace DotRecast.Detour.Dynamic.Io
return hf;
}
private byte[] SerializeSpans(Heightfield heightfield, RcByteOrder order)
private byte[] SerializeSpans(RcHeightfield heightfield, RcByteOrder order)
{
int[] counts = new int[heightfield.width * heightfield.height];
int totalCount = 0;
@ -152,7 +152,7 @@ namespace DotRecast.Detour.Dynamic.Io
{
for (int x = 0; x < heightfield.width; x++)
{
Span span = heightfield.spans[pz + x];
RcSpan span = heightfield.spans[pz + x];
while (span != null)
{
counts[pz + x]++;
@ -169,7 +169,7 @@ namespace DotRecast.Detour.Dynamic.Io
for (int x = 0; x < heightfield.width; x++)
{
position = ByteUtils.PutShort(counts[pz + x], data, position, order);
Span span = heightfield.spans[pz + x];
RcSpan span = heightfield.spans[pz + x];
while (span != null)
{
position = ByteUtils.PutInt(span.smin, data, position, order);

View File

@ -32,9 +32,9 @@ namespace DotRecast.Detour.Dynamic
private readonly RcVec3f origin;
private readonly float tileWidth;
private readonly float tileDepth;
private readonly Func<int, int, Heightfield> heightfieldProvider;
private readonly Func<int, int, RcHeightfield> heightfieldProvider;
public VoxelQuery(RcVec3f origin, float tileWidth, float tileDepth, Func<int, int, Heightfield> heightfieldProvider)
public VoxelQuery(RcVec3f origin, float tileWidth, float tileDepth, Func<int, int, RcHeightfield> heightfieldProvider)
{
this.origin = origin;
this.tileWidth = tileWidth;
@ -109,7 +109,7 @@ namespace DotRecast.Detour.Dynamic
private float? TraversHeightfield(int x, int z, RcVec3f start, RcVec3f end, float tMin, float tMax)
{
Heightfield hf = heightfieldProvider.Invoke(x, z);
RcHeightfield hf = heightfieldProvider.Invoke(x, z);
if (null != hf)
{
float tx = end.x - start.x;
@ -146,7 +146,7 @@ namespace DotRecast.Detour.Dynamic
float y2 = start.y + ty * (tMin + Math.Min(tMaxX, tMaxZ)) - hf.bmin.y;
float ymin = Math.Min(y1, y2) / hf.ch;
float ymax = Math.Max(y1, y2) / hf.ch;
Span span = hf.spans[sx + sz * hf.width];
RcSpan span = hf.spans[sx + sz * hf.width];
while (span != null)
{
if (span.smin <= ymin && span.smax >= ymax)

View File

@ -1,14 +1,14 @@
using System.Collections.Generic;
using DotRecast.Core;
using DotRecast.Recast;
using static DotRecast.Recast.RecastConstants;
using static DotRecast.Recast.RcConstants;
namespace DotRecast.Detour.Extras.Jumplink
{
public class EdgeExtractor
{
public JumpEdge[] ExtractEdges(PolyMesh mesh)
public JumpEdge[] ExtractEdges(RcPolyMesh mesh)
{
List<JumpEdge> edges = new List<JumpEdge>();
if (mesh != null)

View File

@ -7,7 +7,7 @@ namespace DotRecast.Detour.Extras.Jumplink
{
class TrajectorySampler
{
public void Sample(JumpLinkBuilderConfig acfg, Heightfield heightfield, EdgeSampler es)
public void Sample(JumpLinkBuilderConfig acfg, RcHeightfield heightfield, EdgeSampler es)
{
int nsamples = es.start.gsamples.Length;
for (int i = 0; i < nsamples; ++i)
@ -32,7 +32,7 @@ namespace DotRecast.Detour.Extras.Jumplink
}
}
private bool SampleTrajectory(JumpLinkBuilderConfig acfg, Heightfield solid, RcVec3f pa, RcVec3f pb, Trajectory tra)
private bool SampleTrajectory(JumpLinkBuilderConfig acfg, RcHeightfield solid, RcVec3f pa, RcVec3f pb, Trajectory tra)
{
float cs = Math.Min(acfg.cellSize, acfg.cellHeight);
float d = RcVec3f.Dist2D(pa, pb) + Math.Abs(pa.y - pb.y);
@ -50,7 +50,7 @@ namespace DotRecast.Detour.Extras.Jumplink
return true;
}
private bool CheckHeightfieldCollision(Heightfield solid, float x, float ymin, float ymax, float z)
private bool CheckHeightfieldCollision(RcHeightfield solid, float x, float ymin, float ymax, float z)
{
int w = solid.width;
int h = solid.height;
@ -65,7 +65,7 @@ namespace DotRecast.Detour.Extras.Jumplink
return false;
}
Span s = solid.spans[ix + iz * w];
RcSpan s = solid.spans[ix + iz * w];
if (s == null)
{
return false;

View File

@ -756,10 +756,10 @@ namespace DotRecast.Detour.TileCache
int nextEdge = nverts;
int edgeCount = 0;
Edge[] edges = new Edge[maxEdgeCount];
RcEdge[] edges = new RcEdge[maxEdgeCount];
for (int i = 0; i < maxEdgeCount; i++)
{
edges[i] = new Edge();
edges[i] = new RcEdge();
}
for (int i = 0; i < nverts; i++)
@ -778,7 +778,7 @@ namespace DotRecast.Detour.TileCache
: polys[t + j + 1];
if (v0 < v1)
{
Edge edge = edges[edgeCount];
RcEdge edge = edges[edgeCount];
edge.vert[0] = v0;
edge.vert[1] = v1;
edge.poly[0] = i;
@ -809,7 +809,7 @@ namespace DotRecast.Detour.TileCache
bool found = false;
for (int e = firstEdge[v1]; e != DT_TILECACHE_NULL_IDX; e = firstEdge[nextEdge + e])
{
Edge edge = edges[e];
RcEdge edge = edges[e];
if (edge.vert[1] == v0 && edge.poly[0] == edge.poly[1])
{
edge.poly[1] = i;
@ -822,7 +822,7 @@ namespace DotRecast.Detour.TileCache
if (!found)
{
// Matching edge not found, it is an open edge, add it.
Edge edge = edges[edgeCount];
RcEdge edge = edges[edgeCount];
edge.vert[0] = v1;
edge.vert[1] = v0;
edge.poly[0] = (short)i;
@ -868,7 +868,7 @@ namespace DotRecast.Detour.TileCache
for (int m = 0; m < edgeCount; ++m)
{
Edge e = edges[m];
RcEdge e = edges[m];
// Skip connected edges.
if (e.poly[0] != e.poly[1])
continue;
@ -908,7 +908,7 @@ namespace DotRecast.Detour.TileCache
for (int m = 0; m < edgeCount; ++m)
{
Edge e = edges[m];
RcEdge e = edges[m];
// Skip connected edges.
if (e.poly[0] != e.poly[1])
continue;
@ -939,7 +939,7 @@ namespace DotRecast.Detour.TileCache
// Store adjacency
for (int i = 0; i < edgeCount; ++i)
{
Edge e = edges[i];
RcEdge e = edges[i];
if (e.poly[0] != e.poly[1])
{
int p0 = e.poly[0] * maxVertsPerPoly * 2;

View File

@ -476,7 +476,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawCompactHeightfieldSolid(CompactHeightfield chf)
public void DebugDrawCompactHeightfieldSolid(RcCompactHeightfield chf)
{
float cs = chf.cs;
float ch = chf.ch;
@ -489,11 +489,11 @@ public class RecastDebugDraw : DebugDraw
{
float fx = chf.bmin.x + x * cs;
float fz = chf.bmin.z + y * cs;
CompactCell c = chf.cells[x + y * chf.width];
RcCompactCell c = chf.cells[x + y * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int area = chf.areas[i];
int color;
@ -501,7 +501,7 @@ public class RecastDebugDraw : DebugDraw
{
color = DuRGBA(0, 192, 255, 64);
}
else if (area == RecastConstants.RC_NULL_AREA)
else if (area == RcConstants.RC_NULL_AREA)
{
color = DuRGBA(0, 0, 0, 64);
}
@ -522,7 +522,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawRegionConnections(ContourSet cset)
public void DebugDrawRegionConnections(RcContourSet cset)
{
float alpha = 1f;
@ -536,7 +536,7 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour cont = cset.conts[i];
RcContour cont = cset.conts[i];
RcVec3f pos = GetContourCenter(cont, orig, cs, ch);
for (int j = 0; j < cont.nverts; ++j)
{
@ -546,7 +546,7 @@ public class RecastDebugDraw : DebugDraw
continue;
}
Contour cont2 = FindContourFromSet(cset, (short)cont.verts[v + 3]);
RcContour cont2 = FindContourFromSet(cset, (short)cont.verts[v + 3]);
if (cont2 != null)
{
RcVec3f pos2 = GetContourCenter(cont2, orig, cs, ch);
@ -563,7 +563,7 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour cont = cset.conts[i];
RcContour cont = cset.conts[i];
int col = DuDarkenCol(DuIntToCol(cont.reg, a));
RcVec3f pos = GetContourCenter(cont, orig, cs, ch);
Vertex(pos, col);
@ -572,7 +572,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
private RcVec3f GetContourCenter(Contour cont, RcVec3f orig, float cs, float ch)
private RcVec3f GetContourCenter(RcContour cont, RcVec3f orig, float cs, float ch)
{
RcVec3f center = new RcVec3f();
center.x = 0;
@ -601,7 +601,7 @@ public class RecastDebugDraw : DebugDraw
return center;
}
private Contour FindContourFromSet(ContourSet cset, int reg)
private RcContour FindContourFromSet(RcContourSet cset, int reg)
{
for (int i = 0; i < cset.conts.Count; ++i)
{
@ -614,7 +614,7 @@ public class RecastDebugDraw : DebugDraw
return null;
}
public void DebugDrawRawContours(ContourSet cset, float alpha)
public void DebugDrawRawContours(RcContourSet cset, float alpha)
{
RcVec3f orig = cset.bmin;
float cs = cset.cs;
@ -626,7 +626,7 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour c = cset.conts[i];
RcContour c = cset.conts[i];
int color = DuIntToCol(c.reg, a);
for (int j = 0; j < c.nrverts; ++j)
@ -662,7 +662,7 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour c = cset.conts[i];
RcContour c = cset.conts[i];
int color = DuDarkenCol(DuIntToCol(c.reg, a));
for (int j = 0; j < c.nrverts; ++j)
@ -673,7 +673,7 @@ public class RecastDebugDraw : DebugDraw
int v3 = c.rverts[j * 4 + 3];
float off = 0;
int colv = color;
if ((v3 & RecastConstants.RC_BORDER_VERTEX) != 0)
if ((v3 & RcConstants.RC_BORDER_VERTEX) != 0)
{
colv = DuRGBA(255, 255, 255, a);
off = ch * 2;
@ -689,7 +689,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawContours(ContourSet cset)
public void DebugDrawContours(RcContourSet cset)
{
float alpha = 1f;
RcVec3f orig = cset.bmin;
@ -702,7 +702,7 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour c = cset.conts[i];
RcContour c = cset.conts[i];
if (c.nverts == 0)
{
continue;
@ -720,7 +720,7 @@ public class RecastDebugDraw : DebugDraw
int vb0 = c.verts[j * 4];
int vb1 = c.verts[j * 4 + 1];
int vb2 = c.verts[j * 4 + 2];
int col = (va3 & RecastConstants.RC_AREA_BORDER) != 0 ? bcolor : color;
int col = (va3 & RcConstants.RC_AREA_BORDER) != 0 ? bcolor : color;
float fx = orig.x + va0 * cs;
float fy = orig.y + (va1 + 1 + (i & 1)) * ch;
@ -740,7 +740,7 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour c = cset.conts[i];
RcContour c = cset.conts[i];
int color = DuDarkenCol(DuIntToCol(c.reg, a));
for (int j = 0; j < c.nverts; ++j)
@ -751,7 +751,7 @@ public class RecastDebugDraw : DebugDraw
int v3 = c.verts[j * 4 + 3];
float off = 0;
int colv = color;
if ((v3 & RecastConstants.RC_BORDER_VERTEX) != 0)
if ((v3 & RcConstants.RC_BORDER_VERTEX) != 0)
{
colv = DuRGBA(255, 255, 255, a);
off = ch * 2;
@ -767,7 +767,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawHeightfieldSolid(Heightfield hf)
public void DebugDrawHeightfieldSolid(RcHeightfield hf)
{
if (!FrustumTest(hf.bmin, hf.bmax))
{
@ -792,7 +792,7 @@ public class RecastDebugDraw : DebugDraw
{
float fx = orig.x + x * cs;
float fz = orig.z + y * cs;
Span s = hf.spans[x + y * w];
RcSpan s = hf.spans[x + y * w];
while (s != null)
{
AppendBox(fx, orig.y + s.smin * ch, fz, fx + cs, orig.y + s.smax * ch, fz + cs, fcol);
@ -804,7 +804,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawHeightfieldWalkable(Heightfield hf)
public void DebugDrawHeightfieldWalkable(RcHeightfield hf)
{
RcVec3f orig = hf.bmin;
float cs = hf.cs;
@ -824,14 +824,14 @@ public class RecastDebugDraw : DebugDraw
{
float fx = orig.x + x * cs;
float fz = orig.z + y * cs;
Span s = hf.spans[x + y * w];
RcSpan s = hf.spans[x + y * w];
while (s != null)
{
if (s.area == SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WALKABLE)
{
fcol[0] = DuRGBA(64, 128, 160, 255);
}
else if (s.area == RecastConstants.RC_NULL_AREA)
else if (s.area == RcConstants.RC_NULL_AREA)
{
fcol[0] = DuRGBA(64, 64, 64, 255);
}
@ -849,7 +849,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawCompactHeightfieldRegions(CompactHeightfield chf)
public void DebugDrawCompactHeightfieldRegions(RcCompactHeightfield chf)
{
float cs = chf.cs;
float ch = chf.ch;
@ -862,11 +862,11 @@ public class RecastDebugDraw : DebugDraw
{
float fx = chf.bmin.x + x * cs;
float fz = chf.bmin.z + y * cs;
CompactCell c = chf.cells[x + y * chf.width];
RcCompactCell c = chf.cells[x + y * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
float fy = chf.bmin.y + (s.y) * ch;
int color;
if (s.reg != 0)
@ -889,7 +889,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawCompactHeightfieldDistance(CompactHeightfield chf)
public void DebugDrawCompactHeightfieldDistance(RcCompactHeightfield chf)
{
if (chf.dist == null)
{
@ -915,11 +915,11 @@ public class RecastDebugDraw : DebugDraw
{
float fx = chf.bmin.x + x * cs;
float fz = chf.bmin.z + y * cs;
CompactCell c = chf.cells[x + y * chf.width];
RcCompactCell c = chf.cells[x + y * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
float fy = chf.bmin.y + (s.y + 1) * ch;
char cd = (char)(chf.dist[i] * dscale);
int color = DuRGBA(cd, cd, cd, 255);
@ -934,7 +934,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawPolyMesh(PolyMesh mesh)
public void DebugDrawPolyMesh(RcPolyMesh mesh)
{
int nvp = mesh.nvp;
float cs = mesh.cs;
@ -953,7 +953,7 @@ public class RecastDebugDraw : DebugDraw
{
color = DuRGBA(0, 192, 255, 64);
}
else if (area == RecastConstants.RC_NULL_AREA)
else if (area == RcConstants.RC_NULL_AREA)
{
color = DuRGBA(0, 0, 0, 64);
}
@ -965,7 +965,7 @@ public class RecastDebugDraw : DebugDraw
int[] vi = new int[3];
for (int j = 2; j < nvp; ++j)
{
if (mesh.polys[p + j] == RecastConstants.RC_MESH_NULL_IDX)
if (mesh.polys[p + j] == RcConstants.RC_MESH_NULL_IDX)
{
break;
}
@ -996,7 +996,7 @@ public class RecastDebugDraw : DebugDraw
int p = i * nvp * 2;
for (int j = 0; j < nvp; ++j)
{
if (mesh.polys[p + j] == RecastConstants.RC_MESH_NULL_IDX)
if (mesh.polys[p + j] == RcConstants.RC_MESH_NULL_IDX)
{
break;
}
@ -1006,7 +1006,7 @@ public class RecastDebugDraw : DebugDraw
continue;
}
int nj = (j + 1 >= nvp || mesh.polys[p + j + 1] == RecastConstants.RC_MESH_NULL_IDX) ? 0 : j + 1;
int nj = (j + 1 >= nvp || mesh.polys[p + j + 1] == RcConstants.RC_MESH_NULL_IDX) ? 0 : j + 1;
int[] vi = { mesh.polys[p + j], mesh.polys[p + nj] };
for (int k = 0; k < 2; ++k)
@ -1030,7 +1030,7 @@ public class RecastDebugDraw : DebugDraw
int p = i * nvp * 2;
for (int j = 0; j < nvp; ++j)
{
if (mesh.polys[p + j] == RecastConstants.RC_MESH_NULL_IDX)
if (mesh.polys[p + j] == RcConstants.RC_MESH_NULL_IDX)
{
break;
}
@ -1040,7 +1040,7 @@ public class RecastDebugDraw : DebugDraw
continue;
}
int nj = (j + 1 >= nvp || mesh.polys[p + j + 1] == RecastConstants.RC_MESH_NULL_IDX) ? 0 : j + 1;
int nj = (j + 1 >= nvp || mesh.polys[p + j + 1] == RcConstants.RC_MESH_NULL_IDX) ? 0 : j + 1;
int[] vi = { mesh.polys[p + j], mesh.polys[p + nj] };
int col = colb;
@ -1076,7 +1076,7 @@ public class RecastDebugDraw : DebugDraw
End();
}
public void DebugDrawPolyMeshDetail(PolyMeshDetail dmesh)
public void DebugDrawPolyMeshDetail(RcPolyMeshDetail dmesh)
{
Begin(DebugDrawPrimitives.TRIS);

View File

@ -9,8 +9,8 @@ namespace DotRecast.Recast.DemoTool.Builder
float m_cellHeight, float m_agentHeight, float m_agentRadius, float m_agentMaxClimb,
RecastBuilderResult rcResult)
{
PolyMesh m_pmesh = rcResult.GetMesh();
PolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
RcPolyMesh m_pmesh = rcResult.GetMesh();
RcPolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
NavMeshDataCreateParams option = new NavMeshDataCreateParams();
for (int i = 0; i < m_pmesh.npolys; ++i)
{

View File

@ -53,7 +53,7 @@ namespace DotRecast.Recast.DemoTool.Builder
float detailSampleDist, float detailSampleMaxError, bool filterLowHangingObstacles, bool filterLedgeSpans,
bool filterWalkableLowHeightSpans)
{
RecastConfig cfg = new RecastConfig(partitionType, cellSize, cellHeight, agentMaxSlope, filterLowHangingObstacles,
RcConfig cfg = new RcConfig(partitionType, cellSize, cellHeight, agentMaxSlope, filterLowHangingObstacles,
filterLedgeSpans, filterWalkableLowHeightSpans, agentHeight, agentRadius, agentMaxClimb, regionMinSize,
regionMergeSize, edgeMaxLen, edgeMaxError, vertsPerPoly, detailSampleDist, detailSampleMaxError,
SampleAreaModifications.SAMPLE_AREAMOD_WALKABLE, true);

View File

@ -54,7 +54,7 @@ namespace DotRecast.Recast.DemoTool.Builder
int vertsPerPoly, float detailSampleDist, float detailSampleMaxError, bool filterLowHangingObstacles,
bool filterLedgeSpans, bool filterWalkableLowHeightSpans, int tileSize)
{
RecastConfig cfg = new RecastConfig(true, tileSize, tileSize, RecastConfig.CalcBorder(agentRadius, cellSize),
RcConfig cfg = new RcConfig(true, tileSize, tileSize, RcConfig.CalcBorder(agentRadius, cellSize),
partitionType, cellSize, cellHeight, agentMaxSlope, filterLowHangingObstacles, filterLedgeSpans,
filterWalkableLowHeightSpans, agentHeight, agentRadius, agentMaxClimb,
regionMinSize * regionMinSize * cellSize * cellSize,

View File

@ -2,12 +2,12 @@
namespace DotRecast.Recast
{
public class CompareDiagDist : IComparer<PotentialDiagonal>
public class CompareDiagDist : IComparer<RcPotentialDiagonal>
{
public int Compare(PotentialDiagonal va, PotentialDiagonal vb)
public int Compare(RcPotentialDiagonal va, RcPotentialDiagonal vb)
{
PotentialDiagonal a = va;
PotentialDiagonal b = vb;
RcPotentialDiagonal a = va;
RcPotentialDiagonal b = vb;
return a.dist.CompareTo(b.dist);
}
}

View File

@ -2,9 +2,9 @@
namespace DotRecast.Recast
{
public class CompareHoles : IComparer<ContourHole>
public class CompareHoles : IComparer<RcContourHole>
{
public int Compare(ContourHole a, ContourHole b)
public int Compare(RcContourHole a, RcContourHole b)
{
if (a.minx == b.minx)
{

View File

@ -1,9 +0,0 @@
namespace DotRecast.Recast
{
public class ContourRegion
{
public Contour outline;
public ContourHole[] holes;
public int nholes;
}
}

View File

@ -41,7 +41,7 @@ namespace DotRecast.Recast
return null;
}
private static float? Raycast(PolyMesh poly, PolyMeshDetail meshDetail, RcVec3f sp, RcVec3f sq)
private static float? Raycast(RcPolyMesh poly, RcPolyMeshDetail meshDetail, RcVec3f sp, RcVec3f sq)
{
if (meshDetail != null)
{

View File

@ -21,7 +21,7 @@ freely, subject to the following restrictions:
namespace DotRecast.Recast
{
/** Provides information on the content of a cell column in a compact heightfield. */
public class CompactCell
public class RcCompactCell
{
/** Index to the first span in the column. */
public int index;

View File

@ -23,7 +23,7 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
/** A compact, static heightfield representing unobstructed space. */
public class CompactHeightfield
public class RcCompactHeightfield
{
/** The width of the heightfield. (Along the x-axis in cell units.) */
public int width;
@ -62,10 +62,10 @@ namespace DotRecast.Recast
public float ch;
/** Array of cells. [Size: #width*#height] */
public CompactCell[] cells;
public RcCompactCell[] cells;
/** Array of spans. [Size: #spanCount] */
public CompactSpan[] spans;
public RcCompactSpan[] spans;
/** Array containing border distance data. [Size: #spanCount] */
public int[] dist;

View File

@ -21,7 +21,7 @@ freely, subject to the following restrictions:
namespace DotRecast.Recast
{
/** Represents a span of unobstructed space within a compact heightfield. */
public class CompactSpan
public class RcCompactSpan
{
/** The lower extent of the span. (Measured from the heightfield's base.) */
public int y;

View File

@ -22,9 +22,7 @@ using System;
namespace DotRecast.Recast
{
using static RecastConstants;
public class RecastConfig
public class RcConfig
{
public readonly PartitionType partitionType;
@ -118,7 +116,7 @@ namespace DotRecast.Recast
/**
* Non-tiled build configuration
*/
public RecastConfig(PartitionType partitionType, float cellSize, float cellHeight, float agentHeight, float agentRadius,
public RcConfig(PartitionType partitionType, float cellSize, float cellHeight, float agentHeight, float agentRadius,
float agentMaxClimb, float agentMaxSlope, int regionMinSize, int regionMergeSize, float edgeMaxLen,
float edgeMaxError, int vertsPerPoly, float detailSampleDist, float detailSampleMaxError,
AreaModification walkableAreaMod) : this(partitionType, cellSize, cellHeight, agentMaxSlope, true, true, true, agentHeight, agentRadius, agentMaxClimb,
@ -130,7 +128,7 @@ namespace DotRecast.Recast
/**
* Non-tiled build configuration
*/
public RecastConfig(PartitionType partitionType, float cellSize, float cellHeight, float agentMaxSlope,
public RcConfig(PartitionType partitionType, float cellSize, float cellHeight, float agentMaxSlope,
bool filterLowHangingObstacles, bool filterLedgeSpans, bool filterWalkableLowHeightSpans, float agentHeight,
float agentRadius, float agentMaxClimb, int regionMinSize, int regionMergeSize, float edgeMaxLen, float edgeMaxError,
int vertsPerPoly, float detailSampleDist, float detailSampleMaxError, AreaModification walkableAreaMod,
@ -142,7 +140,7 @@ namespace DotRecast.Recast
// Note: area = size*size in [Units: wu]
}
public RecastConfig(bool useTiles, int tileSizeX, int tileSizeZ, int borderSize, PartitionType partitionType,
public RcConfig(bool useTiles, int tileSizeX, int tileSizeZ, int borderSize, PartitionType partitionType,
float cellSize, float cellHeight, float agentMaxSlope, bool filterLowHangingObstacles, bool filterLedgeSpans,
bool filterWalkableLowHeightSpans, float agentHeight, float agentRadius, float agentMaxClimb, float minRegionArea,
float mergeRegionArea, float edgeMaxLen, float edgeMaxError, int vertsPerPoly, bool buildMeshDetail,

View File

@ -20,7 +20,7 @@ freely, subject to the following restrictions:
namespace DotRecast.Recast
{
public static class RecastConstants
public static class RcConstants
{
public const int RC_NULL_AREA = 0;
public const int RC_NOT_CONNECTED = 0x3f;

View File

@ -21,7 +21,7 @@ freely, subject to the following restrictions:
namespace DotRecast.Recast
{
/** Represents a simple, non-overlapping contour in field space. */
public class Contour
public class RcContour
{
/** Simplified contour vertex and connection data. [Size: 4 * #nverts] */
public int[] verts;

View File

@ -1,10 +1,10 @@
namespace DotRecast.Recast
{
public class ContourHole
public class RcContourHole
{
public int leftmost;
public int minx;
public int minz;
public Contour contour;
public RcContour contour;
}
}

View File

@ -0,0 +1,9 @@
namespace DotRecast.Recast
{
public class RcContourRegion
{
public RcContour outline;
public RcContourHole[] holes;
public int nholes;
}
}

View File

@ -24,10 +24,10 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
/** Represents a group of related contours. */
public class ContourSet
public class RcContourSet
{
/** A list of the contours in the set. */
public List<Contour> conts = new List<Contour>();
public List<RcContour> conts = new List<RcContour>();
/** The minimum bounds in world space. [(x, y, z)] */
public RcVec3f bmin = new RcVec3f();

View File

@ -1,6 +1,6 @@
namespace DotRecast.Recast
{
public class HeightPatch
public class RcHeightPatch
{
public int xmin;
public int ymin;

View File

@ -23,7 +23,7 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
/** Represents a heightfield layer within a layer set. */
public class Heightfield
public class RcHeightfield
{
/** The width of the heightfield. (Along the x-axis in cell units.) */
public readonly int width;
@ -44,12 +44,12 @@ namespace DotRecast.Recast
public readonly float ch;
/** Heightfield of spans (width*height). */
public readonly Span[] spans;
public readonly RcSpan[] spans;
/** Border size in cell units */
public readonly int borderSize;
public Heightfield(int width, int height, RcVec3f bmin, RcVec3f bmax, float cs, float ch, int borderSize)
public RcHeightfield(int width, int height, RcVec3f bmin, RcVec3f bmax, float cs, float ch, int borderSize)
{
this.width = width;
this.height = height;
@ -58,7 +58,7 @@ namespace DotRecast.Recast
this.cs = cs;
this.ch = ch;
this.borderSize = borderSize;
spans = new Span[width * height];
spans = new RcSpan[width * height];
}
}
}

View File

@ -4,7 +4,7 @@ namespace DotRecast.Recast
{
/// Represents a heightfield layer within a layer set.
/// @see rcHeightfieldLayerSet
public class HeightfieldLayer
public class RcHeightfieldLayer
{
public RcVec3f bmin = new RcVec3f();

View File

@ -25,8 +25,8 @@ namespace DotRecast.Recast
/// Represents a set of heightfield layers.
/// @ingroup recast
/// @see rcAllocHeightfieldLayerSet, rcFreeHeightfieldLayerSet
public class HeightfieldLayerSet
public class RcHeightfieldLayerSet
{
public HeightfieldLayer[] layers; /// < The layers in the set. [Size: #nlayers]
public RcHeightfieldLayer[] layers; /// < The layers in the set. [Size: #nlayers]
}
}

View File

@ -2,7 +2,7 @@
namespace DotRecast.Recast
{
public class LayerRegion
public class RcLayerRegion
{
public int id;
public int layerId;
@ -11,7 +11,7 @@ namespace DotRecast.Recast
public List<int> layers;
public List<int> neis;
public LayerRegion(int i)
public RcLayerRegion(int i)
{
id = i;
ymin = 0xFFFF;

View File

@ -23,7 +23,7 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
/** Represents a polygon mesh suitable for use in building a navigation mesh. */
public class PolyMesh
public class RcPolyMesh
{
/** The mesh vertices. [Form: (x, y, z) coordinates * #nverts] */
public int[] verts;

View File

@ -24,7 +24,7 @@ namespace DotRecast.Recast
* Contains triangle meshes that represent detailed height data associated with the polygons in its associated polygon
* mesh object.
*/
public class PolyMeshDetail
public class RcPolyMeshDetail
{
/** The sub-mesh data. [Size: 4*#nmeshes] */
public int[] meshes;

View File

@ -1,6 +1,6 @@
namespace DotRecast.Recast
{
public class PotentialDiagonal
public class RcPotentialDiagonal
{
public int dist;
public int vert;

View File

@ -2,7 +2,7 @@
namespace DotRecast.Recast
{
public class Region
public class RcRegion
{
public int spanCount; // Number of spans belonging to this region
public int id; // ID of the region
@ -15,7 +15,7 @@ namespace DotRecast.Recast
public List<int> connections;
public List<int> floors;
public Region(int i)
public RcRegion(int i)
{
id = i;
ymin = 0xFFFF;

View File

@ -21,7 +21,7 @@ freely, subject to the following restrictions:
namespace DotRecast.Recast
{
/** Represents a span in a heightfield. */
public class Span
public class RcSpan
{
/** The lower limit of the span. [Limit: &lt; smax] */
public int smin;
@ -33,6 +33,6 @@ namespace DotRecast.Recast
public int area;
/** The next span higher up in column. */
public Span next;
public RcSpan next;
}
}

View File

@ -1,6 +1,6 @@
namespace DotRecast.Recast
{
public class SweepSpan
public class RcSweepSpan
{
public int rid; // row id
public int id; // region id

View File

@ -23,7 +23,7 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
using static RecastConstants;
using static RcConstants;
public static class Recast
{

View File

@ -23,9 +23,9 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
using static RecastConstants;
using static RcConstants;
public class RecastArea
public static class RecastArea
{
/// @par
///
@ -35,7 +35,7 @@ namespace DotRecast.Recast
/// This method is usually called immediately after the heightfield has been built.
///
/// @see rcCompactHeightfield, rcBuildCompactHeightfield, rcConfig::walkableRadius
public static void ErodeWalkableArea(Telemetry ctx, int radius, CompactHeightfield chf)
public static void ErodeWalkableArea(Telemetry ctx, int radius, RcCompactHeightfield chf)
{
int w = chf.width;
int h = chf.height;
@ -48,7 +48,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
if (chf.areas[i] == RC_NULL_AREA)
@ -57,7 +57,7 @@ namespace DotRecast.Recast
}
else
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int nc = 0;
for (int dir = 0; dir < 4; ++dir)
{
@ -88,10 +88,10 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (RecastCommon.GetCon(s, 0) != RC_NOT_CONNECTED)
{
@ -99,7 +99,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(0);
int ay = y + RecastCommon.GetDirOffsetY(0);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 0);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
nd = Math.Min(dist[ai] + 2, 255);
if (nd < dist[i])
dist[i] = nd;
@ -122,7 +122,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(3);
int ay = y + RecastCommon.GetDirOffsetY(3);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 3);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
nd = Math.Min(dist[ai] + 2, 255);
if (nd < dist[i])
dist[i] = nd;
@ -147,10 +147,10 @@ namespace DotRecast.Recast
{
for (int x = w - 1; x >= 0; --x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (RecastCommon.GetCon(s, 2) != RC_NOT_CONNECTED)
{
@ -158,7 +158,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(2);
int ay = y + RecastCommon.GetDirOffsetY(2);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 2);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
nd = Math.Min(dist[ai] + 2, 255);
if (nd < dist[i])
dist[i] = nd;
@ -181,7 +181,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(1);
int ay = y + RecastCommon.GetDirOffsetY(1);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 1);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
nd = Math.Min(dist[ai] + 2, 255);
if (nd < dist[i])
dist[i] = nd;
@ -215,7 +215,7 @@ namespace DotRecast.Recast
/// such as #rcMarkBoxArea, #rcMarkConvexPolyArea, and #rcMarkCylinderArea.
///
/// @see rcCompactHeightfield
public bool MedianFilterWalkableArea(Telemetry ctx, CompactHeightfield chf)
public static bool MedianFilterWalkableArea(Telemetry ctx, RcCompactHeightfield chf)
{
int w = chf.width;
int h = chf.height;
@ -228,10 +228,10 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (chf.areas[i] == RC_NULL_AREA)
{
areas[i] = chf.areas[i];
@ -252,7 +252,7 @@ namespace DotRecast.Recast
if (chf.areas[ai] != RC_NULL_AREA)
nei[dir * 2 + 0] = chf.areas[ai];
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
int dir2 = (dir + 1) & 0x3;
if (RecastCommon.GetCon(@as, dir2) != RC_NOT_CONNECTED)
{
@ -283,7 +283,7 @@ namespace DotRecast.Recast
/// The value of spacial parameters are in world units.
///
/// @see rcCompactHeightfield, rcMedianFilterWalkableArea
public void MarkBoxArea(Telemetry ctx, float[] bmin, float[] bmax, AreaModification areaMod, CompactHeightfield chf)
public void MarkBoxArea(Telemetry ctx, float[] bmin, float[] bmax, AreaModification areaMod, RcCompactHeightfield chf)
{
ctx.StartTimer("MARK_BOX_AREA");
@ -316,10 +316,10 @@ namespace DotRecast.Recast
{
for (int x = minx; x <= maxx; ++x)
{
CompactCell c = chf.cells[x + z * chf.width];
RcCompactCell c = chf.cells[x + z * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (s.y >= miny && s.y <= maxy)
{
if (chf.areas[i] != RC_NULL_AREA)
@ -358,7 +358,7 @@ namespace DotRecast.Recast
///
/// @see rcCompactHeightfield, rcMedianFilterWalkableArea
public static void MarkConvexPolyArea(Telemetry ctx, float[] verts, float hmin, float hmax, AreaModification areaMod,
CompactHeightfield chf)
RcCompactHeightfield chf)
{
ctx.StartTimer("MARK_CONVEXPOLY_AREA");
@ -405,10 +405,10 @@ namespace DotRecast.Recast
{
for (int x = minx; x <= maxx; ++x)
{
CompactCell c = chf.cells[x + z * chf.width];
RcCompactCell c = chf.cells[x + z * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (chf.areas[i] == RC_NULL_AREA)
continue;
if (s.y >= miny && s.y <= maxy)
@ -430,7 +430,7 @@ namespace DotRecast.Recast
ctx.StopTimer("MARK_CONVEXPOLY_AREA");
}
int OffsetPoly(float[] verts, int nverts, float offset, float[] outVerts, int maxOutVerts)
public static int OffsetPoly(float[] verts, int nverts, float offset, float[] outVerts, int maxOutVerts)
{
float MITER_LIMIT = 1.20f;
@ -513,8 +513,7 @@ namespace DotRecast.Recast
/// The value of spacial parameters are in world units.
///
/// @see rcCompactHeightfield, rcMedianFilterWalkableArea
public void MarkCylinderArea(Telemetry ctx, float[] pos, float r, float h, AreaModification areaMod,
CompactHeightfield chf)
public static void MarkCylinderArea(Telemetry ctx, float[] pos, float r, float h, AreaModification areaMod, RcCompactHeightfield chf)
{
ctx.StartTimer("MARK_CYLINDER_AREA");
@ -557,10 +556,10 @@ namespace DotRecast.Recast
{
for (int x = minx; x <= maxx; ++x)
{
CompactCell c = chf.cells[x + z * chf.width];
RcCompactCell c = chf.cells[x + z * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (chf.areas[i] == RC_NULL_AREA)
continue;

View File

@ -41,7 +41,7 @@ namespace DotRecast.Recast
this.progressListener = progressListener;
}
public List<RecastBuilderResult> BuildTiles(IInputGeomProvider geom, RecastConfig cfg, TaskFactory taskFactory)
public List<RecastBuilderResult> BuildTiles(IInputGeomProvider geom, RcConfig cfg, TaskFactory taskFactory)
{
RcVec3f bmin = geom.GetMeshBoundsMin();
RcVec3f bmax = geom.GetMeshBoundsMax();
@ -60,7 +60,7 @@ namespace DotRecast.Recast
}
public Task BuildTilesAsync(IInputGeomProvider geom, RecastConfig cfg, int threads, List<RecastBuilderResult> results, TaskFactory taskFactory, CancellationToken cancellationToken)
public Task BuildTilesAsync(IInputGeomProvider geom, RcConfig cfg, int threads, List<RecastBuilderResult> results, TaskFactory taskFactory, CancellationToken cancellationToken)
{
RcVec3f bmin = geom.GetMeshBoundsMin();
RcVec3f bmax = geom.GetMeshBoundsMax();
@ -78,7 +78,7 @@ namespace DotRecast.Recast
return task;
}
private Task BuildSingleThreadAsync(IInputGeomProvider geom, RecastConfig cfg, RcVec3f bmin, RcVec3f bmax,
private Task BuildSingleThreadAsync(IInputGeomProvider geom, RcConfig cfg, RcVec3f bmin, RcVec3f bmax,
int tw, int th, List<RecastBuilderResult> results)
{
RcAtomicInteger counter = new RcAtomicInteger(0);
@ -93,7 +93,7 @@ namespace DotRecast.Recast
return Task.CompletedTask;
}
private Task BuildMultiThreadAsync(IInputGeomProvider geom, RecastConfig cfg, RcVec3f bmin, RcVec3f bmax,
private Task BuildMultiThreadAsync(IInputGeomProvider geom, RcConfig cfg, RcVec3f bmin, RcVec3f bmax,
int tw, int th, List<RecastBuilderResult> results, TaskFactory taskFactory, CancellationToken cancellationToken)
{
RcAtomicInteger counter = new RcAtomicInteger(0);
@ -143,7 +143,7 @@ namespace DotRecast.Recast
return Task.WhenAll(tasks.ToArray());
}
private RecastBuilderResult BuildTile(IInputGeomProvider geom, RecastConfig cfg, RcVec3f bmin, RcVec3f bmax, int tx,
private RecastBuilderResult BuildTile(IInputGeomProvider geom, RcConfig cfg, RcVec3f bmin, RcVec3f bmax, int tx,
int ty, RcAtomicInteger counter, int total)
{
RecastBuilderResult result = Build(geom, new RecastBuilderConfig(cfg, bmin, bmax, tx, ty));
@ -157,20 +157,20 @@ namespace DotRecast.Recast
public RecastBuilderResult Build(IInputGeomProvider geom, RecastBuilderConfig builderCfg)
{
RecastConfig cfg = builderCfg.cfg;
RcConfig cfg = builderCfg.cfg;
Telemetry ctx = new Telemetry();
//
// Step 1. Rasterize input polygon soup.
//
Heightfield solid = RecastVoxelization.BuildSolidHeightfield(geom, builderCfg, ctx);
RcHeightfield solid = RecastVoxelization.BuildSolidHeightfield(geom, builderCfg, ctx);
return Build(builderCfg.tileX, builderCfg.tileZ, geom, cfg, solid, ctx);
}
public RecastBuilderResult Build(int tileX, int tileZ, IConvexVolumeProvider geom, RecastConfig cfg, Heightfield solid,
public RecastBuilderResult Build(int tileX, int tileZ, IConvexVolumeProvider geom, RcConfig cfg, RcHeightfield solid,
Telemetry ctx)
{
FilterHeightfield(solid, cfg, ctx);
CompactHeightfield chf = BuildCompactHeightfield(geom, cfg, ctx, solid);
RcCompactHeightfield chf = BuildCompactHeightfield(geom, cfg, ctx, solid);
// Partition the heightfield so that we can use simple algorithm later
// to triangulate the walkable areas.
@ -235,20 +235,20 @@ namespace DotRecast.Recast
//
// Create contours.
ContourSet cset = RecastContour.BuildContours(ctx, chf, cfg.maxSimplificationError, cfg.maxEdgeLen,
RecastConstants.RC_CONTOUR_TESS_WALL_EDGES);
RcContourSet cset = RecastContour.BuildContours(ctx, chf, cfg.maxSimplificationError, cfg.maxEdgeLen,
RcConstants.RC_CONTOUR_TESS_WALL_EDGES);
//
// Step 6. Build polygons mesh from contours.
//
PolyMesh pmesh = RecastMesh.BuildPolyMesh(ctx, cset, cfg.maxVertsPerPoly);
RcPolyMesh pmesh = RecastMesh.BuildPolyMesh(ctx, cset, cfg.maxVertsPerPoly);
//
// Step 7. Create detail mesh which allows to access approximate height
// on each polygon.
//
PolyMeshDetail dmesh = cfg.buildMeshDetail
RcPolyMeshDetail dmesh = cfg.buildMeshDetail
? RecastMeshDetail.BuildPolyMeshDetail(ctx, pmesh, chf, cfg.detailSampleDist, cfg.detailSampleMaxError)
: null;
return new RecastBuilderResult(tileX, tileZ, solid, chf, cset, pmesh, dmesh, ctx);
@ -257,7 +257,7 @@ namespace DotRecast.Recast
/*
* Step 2. Filter walkable surfaces.
*/
private void FilterHeightfield(Heightfield solid, RecastConfig cfg, Telemetry ctx)
private void FilterHeightfield(RcHeightfield solid, RcConfig cfg, Telemetry ctx)
{
// Once all geometry is rasterized, we do initial pass of filtering to
// remove unwanted overhangs caused by the conservative rasterization
@ -281,13 +281,13 @@ namespace DotRecast.Recast
/*
* Step 3. Partition walkable surface to simple regions.
*/
private CompactHeightfield BuildCompactHeightfield(IConvexVolumeProvider volumeProvider, RecastConfig cfg, Telemetry ctx,
Heightfield solid)
private RcCompactHeightfield BuildCompactHeightfield(IConvexVolumeProvider volumeProvider, RcConfig cfg, Telemetry ctx,
RcHeightfield solid)
{
// Compact the heightfield so that it is faster to handle from now on.
// This will result more cache coherent data as well as the neighbours
// between walkable cells will be calculated.
CompactHeightfield chf = RecastCompact.BuildCompactHeightfield(ctx, cfg.walkableHeight, cfg.walkableClimb, solid);
RcCompactHeightfield chf = RecastCompact.BuildCompactHeightfield(ctx, cfg.walkableHeight, cfg.walkableClimb, solid);
// Erode the walkable area by agent radius.
RecastArea.ErodeWalkableArea(ctx, cfg.walkableRadius, chf);
@ -303,12 +303,12 @@ namespace DotRecast.Recast
return chf;
}
public HeightfieldLayerSet BuildLayers(IInputGeomProvider geom, RecastBuilderConfig builderCfg)
public RcHeightfieldLayerSet BuildLayers(IInputGeomProvider geom, RecastBuilderConfig builderCfg)
{
Telemetry ctx = new Telemetry();
Heightfield solid = RecastVoxelization.BuildSolidHeightfield(geom, builderCfg, ctx);
RcHeightfield solid = RecastVoxelization.BuildSolidHeightfield(geom, builderCfg, ctx);
FilterHeightfield(solid, builderCfg.cfg, ctx);
CompactHeightfield chf = BuildCompactHeightfield(geom, builderCfg.cfg, ctx, solid);
RcCompactHeightfield chf = BuildCompactHeightfield(geom, builderCfg.cfg, ctx, solid);
return RecastLayers.BuildHeightfieldLayers(ctx, chf, builderCfg.cfg.walkableHeight);
}
}

View File

@ -24,7 +24,7 @@ namespace DotRecast.Recast
{
public class RecastBuilderConfig
{
public readonly RecastConfig cfg;
public readonly RcConfig cfg;
public readonly int tileX;
public readonly int tileZ;
@ -41,11 +41,11 @@ namespace DotRecast.Recast
/** The maximum bounds of the field's AABB. [(x, y, z)] [Units: wu] **/
public readonly RcVec3f bmax = new RcVec3f();
public RecastBuilderConfig(RecastConfig cfg, RcVec3f bmin, RcVec3f bmax) : this(cfg, bmin, bmax, 0, 0)
public RecastBuilderConfig(RcConfig cfg, RcVec3f bmin, RcVec3f bmax) : this(cfg, bmin, bmax, 0, 0)
{
}
public RecastBuilderConfig(RecastConfig cfg, RcVec3f bmin, RcVec3f bmax, int tileX, int tileZ)
public RecastBuilderConfig(RcConfig cfg, RcVec3f bmin, RcVec3f bmax, int tileX, int tileZ)
{
this.tileX = tileX;
this.tileZ = tileZ;

View File

@ -4,14 +4,14 @@
{
public readonly int tileX;
public readonly int tileZ;
private readonly CompactHeightfield chf;
private readonly ContourSet cs;
private readonly PolyMesh pmesh;
private readonly PolyMeshDetail dmesh;
private readonly Heightfield solid;
private readonly RcCompactHeightfield chf;
private readonly RcContourSet cs;
private readonly RcPolyMesh pmesh;
private readonly RcPolyMeshDetail dmesh;
private readonly RcHeightfield solid;
private readonly Telemetry telemetry;
public RecastBuilderResult(int tileX, int tileZ, Heightfield solid, CompactHeightfield chf, ContourSet cs, PolyMesh pmesh, PolyMeshDetail dmesh, Telemetry ctx)
public RecastBuilderResult(int tileX, int tileZ, RcHeightfield solid, RcCompactHeightfield chf, RcContourSet cs, RcPolyMesh pmesh, RcPolyMeshDetail dmesh, Telemetry ctx)
{
this.tileX = tileX;
this.tileZ = tileZ;
@ -23,27 +23,27 @@
telemetry = ctx;
}
public PolyMesh GetMesh()
public RcPolyMesh GetMesh()
{
return pmesh;
}
public PolyMeshDetail GetMeshDetail()
public RcPolyMeshDetail GetMeshDetail()
{
return dmesh;
}
public CompactHeightfield GetCompactHeightfield()
public RcCompactHeightfield GetCompactHeightfield()
{
return chf;
}
public ContourSet GetContourSet()
public RcContourSet GetContourSet()
{
return cs;
}
public Heightfield GetSolidHeightfield()
public RcHeightfield GetSolidHeightfield()
{
return solid;
}

View File

@ -32,7 +32,7 @@ namespace DotRecast.Recast
/// @param[in] span The span to update.
/// @param[in] direction The direction to set. [Limits: 0 <= value < 4]
/// @param[in] neighborIndex The index of the neighbor span.
public static void SetCon(CompactSpan span, int direction, int neighborIndex)
public static void SetCon(RcCompactSpan span, int direction, int neighborIndex)
{
int shift = direction * 6;
int con = span.con;
@ -43,7 +43,7 @@ namespace DotRecast.Recast
/// @param[in] span The span to check.
/// @param[in] direction The direction to check. [Limits: 0 <= value < 4]
/// @return The neighbor connection data for the specified direction, or #RC_NOT_CONNECTED if there is no connection.
public static int GetCon(CompactSpan s, int dir)
public static int GetCon(RcCompactSpan s, int dir)
{
int shift = dir * 6;
return (s.con >> shift) & 0x3f;

View File

@ -18,15 +18,15 @@ freely, subject to the following restrictions:
using System;
using static DotRecast.Core.RcMath;
using static DotRecast.Recast.RecastConstants;
using static DotRecast.Recast.RcConstants;
namespace DotRecast.Recast
{
public class RecastCompact
public static class RecastCompact
{
private const int MAX_LAYERS = RC_NOT_CONNECTED - 1;
private const int MAX_HEIGHT = RecastConstants.SPAN_MAX_HEIGHT;
private const int MAX_HEIGHT = RcConstants.SPAN_MAX_HEIGHT;
/// @par
///
@ -37,12 +37,12 @@ namespace DotRecast.Recast
/// See the #rcConfig documentation for more information on the configuration parameters.
///
/// @see rcAllocCompactHeightfield, rcHeightfield, rcCompactHeightfield, rcConfig
public static CompactHeightfield BuildCompactHeightfield(Telemetry ctx, int walkableHeight, int walkableClimb,
Heightfield hf)
public static RcCompactHeightfield BuildCompactHeightfield(Telemetry ctx, int walkableHeight, int walkableClimb,
RcHeightfield hf)
{
ctx.StartTimer("BUILD_COMPACTHEIGHTFIELD");
CompactHeightfield chf = new CompactHeightfield();
RcCompactHeightfield chf = new RcCompactHeightfield();
int w = hf.width;
int h = hf.height;
int spanCount = GetHeightFieldSpanCount(hf);
@ -60,17 +60,17 @@ namespace DotRecast.Recast
chf.bmax.y += walkableHeight * hf.ch;
chf.cs = hf.cs;
chf.ch = hf.ch;
chf.cells = new CompactCell[w * h];
chf.spans = new CompactSpan[spanCount];
chf.cells = new RcCompactCell[w * h];
chf.spans = new RcCompactSpan[spanCount];
chf.areas = new int[spanCount];
for (int i = 0; i < chf.cells.Length; i++)
{
chf.cells[i] = new CompactCell();
chf.cells[i] = new RcCompactCell();
}
for (int i = 0; i < chf.spans.Length; i++)
{
chf.spans[i] = new CompactSpan();
chf.spans[i] = new RcCompactSpan();
}
// Fill in cells and spans.
@ -79,11 +79,11 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
Span s = hf.spans[x + y * w];
RcSpan s = hf.spans[x + y * w];
// If there are no spans at this cell, just leave the data to index=0, count=0.
if (s == null)
continue;
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
c.index = idx;
c.count = 0;
while (s != null)
@ -110,10 +110,10 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
for (int dir = 0; dir < 4; ++dir)
{
@ -126,10 +126,10 @@ namespace DotRecast.Recast
// Iterate over all neighbour spans and check if any of the is
// accessible from current cell.
CompactCell nc = chf.cells[nx + ny * w];
RcCompactCell nc = chf.cells[nx + ny * w];
for (int k = nc.index, nk = nc.index + nc.count; k < nk; ++k)
{
CompactSpan ns = chf.spans[k];
RcCompactSpan ns = chf.spans[k];
int bot = Math.Max(s.y, ns.y);
int top = Math.Min(s.y + s.h, ns.y + ns.h);
@ -164,7 +164,7 @@ namespace DotRecast.Recast
return chf;
}
private static int GetHeightFieldSpanCount(Heightfield hf)
private static int GetHeightFieldSpanCount(RcHeightfield hf)
{
int w = hf.width;
int h = hf.height;
@ -173,7 +173,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
for (Span s = hf.spans[x + y * w]; s != null; s = s.next)
for (RcSpan s = hf.spans[x + y * w]; s != null; s = s.next)
{
if (s.area != RC_NULL_AREA)
spanCount++;

View File

@ -23,14 +23,14 @@ using System.Collections.Generic;
namespace DotRecast.Recast
{
using static RecastConstants;
using static RcConstants;
public static class RecastContour
{
private static CornerHeight GetCornerHeight(int x, int y, int i, int dir, CompactHeightfield chf)
private static CornerHeight GetCornerHeight(int x, int y, int i, int dir, RcCompactHeightfield chf)
{
bool isBorderVertex = false;
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int ch = s.y;
int dirp = (dir + 1) & 0x3;
@ -48,7 +48,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(dir);
int ay = y + RecastCommon.GetDirOffsetY(dir);
int ai = chf.cells[ax + ay * chf.width].index + RecastCommon.GetCon(s, dir);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
ch = Math.Max(ch, @as.y);
regs[1] = chf.spans[ai].reg | (chf.areas[ai] << 16);
if (RecastCommon.GetCon(@as, dirp) != RC_NOT_CONNECTED)
@ -56,7 +56,7 @@ namespace DotRecast.Recast
int ax2 = ax + RecastCommon.GetDirOffsetX(dirp);
int ay2 = ay + RecastCommon.GetDirOffsetY(dirp);
int ai2 = chf.cells[ax2 + ay2 * chf.width].index + RecastCommon.GetCon(@as, dirp);
CompactSpan as2 = chf.spans[ai2];
RcCompactSpan as2 = chf.spans[ai2];
ch = Math.Max(ch, as2.y);
regs[2] = chf.spans[ai2].reg | (chf.areas[ai2] << 16);
}
@ -67,7 +67,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(dirp);
int ay = y + RecastCommon.GetDirOffsetY(dirp);
int ai = chf.cells[ax + ay * chf.width].index + RecastCommon.GetCon(s, dirp);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
ch = Math.Max(ch, @as.y);
regs[3] = chf.spans[ai].reg | (chf.areas[ai] << 16);
if (RecastCommon.GetCon(@as, dir) != RC_NOT_CONNECTED)
@ -75,7 +75,7 @@ namespace DotRecast.Recast
int ax2 = ax + RecastCommon.GetDirOffsetX(dir);
int ay2 = ay + RecastCommon.GetDirOffsetY(dir);
int ai2 = chf.cells[ax2 + ay2 * chf.width].index + RecastCommon.GetCon(@as, dir);
CompactSpan as2 = chf.spans[ai2];
RcCompactSpan as2 = chf.spans[ai2];
ch = Math.Max(ch, as2.y);
regs[2] = chf.spans[ai2].reg | (chf.areas[ai2] << 16);
}
@ -105,7 +105,7 @@ namespace DotRecast.Recast
return new CornerHeight(ch, isBorderVertex);
}
private static void WalkContour(int x, int y, int i, CompactHeightfield chf, int[] flags, List<int> points)
private static void WalkContour(int x, int y, int i, RcCompactHeightfield chf, int[] flags, List<int> points)
{
// Choose the first non-connected edge
int dir = 0;
@ -144,7 +144,7 @@ namespace DotRecast.Recast
}
int r = 0;
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (RecastCommon.GetCon(s, dir) != RC_NOT_CONNECTED)
{
int ax = x + RecastCommon.GetDirOffsetX(dir);
@ -172,10 +172,10 @@ namespace DotRecast.Recast
int ni = -1;
int nx = x + RecastCommon.GetDirOffsetX(dir);
int ny = y + RecastCommon.GetDirOffsetY(dir);
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (RecastCommon.GetCon(s, dir) != RC_NOT_CONNECTED)
{
CompactCell nc = chf.cells[nx + ny * chf.width];
RcCompactCell nc = chf.cells[nx + ny * chf.width];
ni = nc.index + RecastCommon.GetCon(s, dir);
}
@ -548,7 +548,7 @@ namespace DotRecast.Recast
}
}
private static void MergeContours(Contour ca, Contour cb, int ia, int ib)
private static void MergeContours(RcContour ca, RcContour cb, int ia, int ib)
{
int maxVerts = ca.nverts + cb.nverts + 2;
int[] verts = new int[maxVerts * 4];
@ -587,7 +587,7 @@ namespace DotRecast.Recast
}
// Finds the lowest leftmost vertex of a contour.
private static int[] FindLeftMostVertex(Contour contour)
private static int[] FindLeftMostVertex(RcContour contour)
{
int minx = contour.verts[0];
int minz = contour.verts[2];
@ -607,7 +607,7 @@ namespace DotRecast.Recast
return new int[] { minx, minz, leftmost };
}
private static void MergeRegionHoles(Telemetry ctx, ContourRegion region)
private static void MergeRegionHoles(Telemetry ctx, RcContourRegion region)
{
// Sort holes from left to right.
for (int i = 0; i < region.nholes; i++)
@ -624,18 +624,18 @@ namespace DotRecast.Recast
for (int i = 0; i < region.nholes; i++)
maxVerts += region.holes[i].contour.nverts;
PotentialDiagonal[] diags = new PotentialDiagonal[maxVerts];
RcPotentialDiagonal[] diags = new RcPotentialDiagonal[maxVerts];
for (int pd = 0; pd < maxVerts; pd++)
{
diags[pd] = new PotentialDiagonal();
diags[pd] = new RcPotentialDiagonal();
}
Contour outline = region.outline;
RcContour outline = region.outline;
// Merge holes into the outline one by one.
for (int i = 0; i < region.nholes; i++)
{
Contour hole = region.holes[i].contour;
RcContour hole = region.holes[i].contour;
int index = -1;
int bestVertex = region.holes[i].leftmost;
@ -713,13 +713,13 @@ namespace DotRecast.Recast
/// See the #rcConfig documentation for more information on the configuration parameters.
///
/// @see rcAllocContourSet, rcCompactHeightfield, rcContourSet, rcConfig
public static ContourSet BuildContours(Telemetry ctx, CompactHeightfield chf, float maxError, int maxEdgeLen,
public static RcContourSet BuildContours(Telemetry ctx, RcCompactHeightfield chf, float maxError, int maxEdgeLen,
int buildFlags)
{
int w = chf.width;
int h = chf.height;
int borderSize = chf.borderSize;
ContourSet cset = new ContourSet();
RcContourSet cset = new RcContourSet();
ctx.StartTimer("CONTOURS");
cset.bmin = chf.bmin;
@ -750,11 +750,11 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
int res = 0;
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (chf.spans[i].reg == 0 || (chf.spans[i].reg & RC_BORDER_REG) != 0)
{
flags[i] = 0;
@ -790,7 +790,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
if (flags[i] == 0 || flags[i] == 0xf)
@ -820,7 +820,7 @@ namespace DotRecast.Recast
// Create contour.
if (simplified.Count / 4 >= 3)
{
Contour cont = new Contour();
RcContour cont = new RcContour();
cset.conts.Add(cont);
cont.nverts = simplified.Count / 4;
@ -872,7 +872,7 @@ namespace DotRecast.Recast
int nholes = 0;
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour cont = cset.conts[i];
RcContour cont = cset.conts[i];
// If the contour is wound backwards, it is a hole.
winding[i] = CalcAreaOfPolygon2D(cont.verts, cont.nverts) < 0 ? -1 : 1;
if (winding[i] < 0)
@ -884,15 +884,15 @@ namespace DotRecast.Recast
// Collect outline contour and holes contours per region.
// We assume that there is one outline and multiple holes.
int nregions = chf.maxRegions + 1;
ContourRegion[] regions = new ContourRegion[nregions];
RcContourRegion[] regions = new RcContourRegion[nregions];
for (int i = 0; i < nregions; i++)
{
regions[i] = new ContourRegion();
regions[i] = new RcContourRegion();
}
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour cont = cset.conts[i];
RcContour cont = cset.conts[i];
// Positively would contours are outlines, negative holes.
if (winding[i] > 0)
{
@ -914,10 +914,10 @@ namespace DotRecast.Recast
{
if (regions[i].nholes > 0)
{
regions[i].holes = new ContourHole[regions[i].nholes];
regions[i].holes = new RcContourHole[regions[i].nholes];
for (int nh = 0; nh < regions[i].nholes; nh++)
{
regions[i].holes[nh] = new ContourHole();
regions[i].holes[nh] = new RcContourHole();
}
regions[i].nholes = 0;
@ -926,8 +926,8 @@ namespace DotRecast.Recast
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour cont = cset.conts[i];
ContourRegion reg = regions[cont.reg];
RcContour cont = cset.conts[i];
RcContourRegion reg = regions[cont.reg];
if (winding[i] < 0)
reg.holes[reg.nholes++].contour = cont;
}
@ -935,7 +935,7 @@ namespace DotRecast.Recast
// Finally merge each regions holes into the outline.
for (int i = 0; i < nregions; i++)
{
ContourRegion reg = regions[i];
RcContourRegion reg = regions[i];
if (reg.nholes == 0)
continue;

View File

@ -19,7 +19,7 @@ freely, subject to the following restrictions:
using System;
using DotRecast.Core;
using static DotRecast.Core.RcMath;
using static DotRecast.Recast.RecastConstants;
using static DotRecast.Recast.RcConstants;
namespace DotRecast.Recast
@ -29,7 +29,7 @@ namespace DotRecast.Recast
private const float EPSILON = 0.00001f;
private static readonly int[] BOX_EDGES = new[] { 0, 1, 0, 2, 0, 4, 1, 3, 1, 5, 2, 3, 2, 6, 3, 7, 4, 5, 4, 6, 5, 7, 6, 7 };
public static void RasterizeSphere(Heightfield hf, RcVec3f center, float radius, int area, int flagMergeThr, Telemetry ctx)
public static void RasterizeSphere(RcHeightfield hf, RcVec3f center, float radius, int area, int flagMergeThr, Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_SPHERE");
float[] bounds =
@ -42,7 +42,7 @@ namespace DotRecast.Recast
ctx.StopTimer("RASTERIZE_SPHERE");
}
public static void RasterizeCapsule(Heightfield hf, RcVec3f start, RcVec3f end, float radius, int area, int flagMergeThr,
public static void RasterizeCapsule(RcHeightfield hf, RcVec3f start, RcVec3f end, float radius, int area, int flagMergeThr,
Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_CAPSULE");
@ -58,7 +58,7 @@ namespace DotRecast.Recast
ctx.StopTimer("RASTERIZE_CAPSULE");
}
public static void RasterizeCylinder(Heightfield hf, RcVec3f start, RcVec3f end, float radius, int area, int flagMergeThr,
public static void RasterizeCylinder(RcHeightfield hf, RcVec3f start, RcVec3f end, float radius, int area, int flagMergeThr,
Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_CYLINDER");
@ -74,7 +74,7 @@ namespace DotRecast.Recast
ctx.StopTimer("RASTERIZE_CYLINDER");
}
public static void RasterizeBox(Heightfield hf, RcVec3f center, RcVec3f[] halfEdges, int area, int flagMergeThr,
public static void RasterizeBox(RcHeightfield hf, RcVec3f center, RcVec3f[] halfEdges, int area, int flagMergeThr,
Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_BOX");
@ -126,7 +126,7 @@ namespace DotRecast.Recast
ctx.StopTimer("RASTERIZE_BOX");
}
public static void RasterizeConvex(Heightfield hf, float[] vertices, int[] triangles, int area, int flagMergeThr,
public static void RasterizeConvex(RcHeightfield hf, float[] vertices, int[] triangles, int area, int flagMergeThr,
Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_CONVEX");
@ -188,7 +188,7 @@ namespace DotRecast.Recast
planes[p][3] = planes[p][0] * vertices[vert] + planes[p][1] * vertices[vert + 1] + planes[p][2] * vertices[vert + 2];
}
private static void RasterizationFilledShape(Heightfield hf, float[] bounds, int area, int flagMergeThr,
private static void RasterizationFilledShape(RcHeightfield hf, float[] bounds, int area, int flagMergeThr,
Func<float[], float[]> intersection)
{
if (!OverlapBounds(hf.bmin, hf.bmax, bounds))

View File

@ -22,9 +22,9 @@ using System;
namespace DotRecast.Recast
{
using static RecastConstants;
using static RcConstants;
public class RecastFilter
public static class RecastFilter
{
/// @par
///
@ -37,7 +37,7 @@ namespace DotRecast.Recast
/// #rcFilterLedgeSpans after calling this filter.
///
/// @see rcHeightfield, rcConfig
public static void FilterLowHangingWalkableObstacles(Telemetry ctx, int walkableClimb, Heightfield solid)
public static void FilterLowHangingWalkableObstacles(Telemetry ctx, int walkableClimb, RcHeightfield solid)
{
ctx.StartTimer("FILTER_LOW_OBSTACLES");
@ -48,11 +48,11 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
Span ps = null;
RcSpan ps = null;
bool previousWalkable = false;
int previousArea = RC_NULL_AREA;
for (Span s = solid.spans[x + y * w]; s != null; ps = s, s = s.next)
for (RcSpan s = solid.spans[x + y * w]; s != null; ps = s, s = s.next)
{
bool walkable = s.area != RC_NULL_AREA;
// If current span is not walkable, but there is walkable
@ -84,7 +84,7 @@ namespace DotRecast.Recast
/// A span is a ledge if: <tt>RcAbs(currentSpan.smax - neighborSpan.smax) > walkableClimb</tt>
///
/// @see rcHeightfield, rcConfig
public static void FilterLedgeSpans(Telemetry ctx, int walkableHeight, int walkableClimb, Heightfield solid)
public static void FilterLedgeSpans(Telemetry ctx, int walkableHeight, int walkableClimb, RcHeightfield solid)
{
ctx.StartTimer("FILTER_LEDGE");
@ -96,7 +96,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
for (Span s = solid.spans[x + y * w]; s != null; s = s.next)
for (RcSpan s = solid.spans[x + y * w]; s != null; s = s.next)
{
// Skip non walkable spans.
if (s.area == RC_NULL_AREA)
@ -124,7 +124,7 @@ namespace DotRecast.Recast
}
// From minus infinity to the first span.
Span ns = solid.spans[dx + dy * w];
RcSpan ns = solid.spans[dx + dy * w];
int nbot = -walkableClimb;
int ntop = ns != null ? ns.smin : SPAN_MAX_HEIGHT;
// Skip neightbour if the gap between the spans is too small.
@ -177,7 +177,7 @@ namespace DotRecast.Recast
/// maximum to the next higher span's minimum. (Same grid column.)
///
/// @see rcHeightfield, rcConfig
public static void FilterWalkableLowHeightSpans(Telemetry ctx, int walkableHeight, Heightfield solid)
public static void FilterWalkableLowHeightSpans(Telemetry ctx, int walkableHeight, RcHeightfield solid)
{
ctx.StartTimer("FILTER_WALKABLE");
@ -190,7 +190,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
for (Span s = solid.spans[x + y * w]; s != null; s = s.next)
for (RcSpan s = solid.spans[x + y * w]; s != null; s = s.next)
{
int bot = (s.smax);
int top = s.next != null ? s.next.smin : SPAN_MAX_HEIGHT;

View File

@ -25,13 +25,11 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
using static RecastCommon;
using static RecastConstants;
using static RecastRegion;
using static RcConstants;
public class RecastLayers
public static class RecastLayers
{
const int RC_MAX_LAYERS = RecastConstants.RC_NOT_CONNECTED;
const int RC_MAX_LAYERS = RcConstants.RC_NOT_CONNECTED;
const int RC_MAX_NEIS = 16;
@ -53,7 +51,7 @@ namespace DotRecast.Recast
return (amin > bmax || amax < bmin) ? false : true;
}
public static HeightfieldLayerSet BuildHeightfieldLayers(Telemetry ctx, CompactHeightfield chf, int walkableHeight)
public static RcHeightfieldLayerSet BuildHeightfieldLayers(Telemetry ctx, RcCompactHeightfield chf, int walkableHeight)
{
ctx.StartTimer("RC_TIMER_BUILD_LAYERS");
int w = chf.width;
@ -62,10 +60,10 @@ namespace DotRecast.Recast
int[] srcReg = new int[chf.spanCount];
Array.Fill(srcReg, 0xFF);
int nsweeps = chf.width; // Math.Max(chf.width, chf.height);
SweepSpan[] sweeps = new SweepSpan[nsweeps];
RcSweepSpan[] sweeps = new RcSweepSpan[nsweeps];
for (int i = 0; i < sweeps.Length; i++)
{
sweeps[i] = new SweepSpan();
sweeps[i] = new RcSweepSpan();
}
// Partition walkable area into monotone regions.
@ -80,11 +78,11 @@ namespace DotRecast.Recast
for (int x = borderSize; x < w - borderSize; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (chf.areas[i] == RC_NULL_AREA)
continue;
int sid = 0xFF;
@ -165,7 +163,7 @@ namespace DotRecast.Recast
// Remap local sweep ids to region ids.
for (int x = borderSize; x < w - borderSize; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
if (srcReg[i] != 0xff)
@ -175,12 +173,12 @@ namespace DotRecast.Recast
}
int nregs = regId;
LayerRegion[] regs = new LayerRegion[nregs];
RcLayerRegion[] regs = new RcLayerRegion[nregs];
// Construct regions
for (int i = 0; i < nregs; ++i)
{
regs[i] = new LayerRegion(i);
regs[i] = new RcLayerRegion(i);
}
// Find region neighbours and overlapping regions.
@ -189,13 +187,13 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
lregs.Clear();
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int ri = srcReg[i];
if (ri == 0xff)
continue;
@ -228,8 +226,8 @@ namespace DotRecast.Recast
{
if (lregs[i] != lregs[j])
{
LayerRegion ri = regs[lregs[i]];
LayerRegion rj = regs[lregs[j]];
RcLayerRegion ri = regs[lregs[i]];
RcLayerRegion rj = regs[lregs[j]];
AddUnique(ri.layers, lregs[j]);
AddUnique(rj.layers, lregs[i]);
}
@ -245,7 +243,7 @@ namespace DotRecast.Recast
for (int i = 0; i < nregs; ++i)
{
LayerRegion root = regs[i];
RcLayerRegion root = regs[i];
// Skip already visited.
if (root.layerId != 0xff)
continue;
@ -261,11 +259,11 @@ namespace DotRecast.Recast
// Pop front
int pop = stack[0]; // TODO : 여기에 stack 처럼 작동하게 했는데, 스택인지는 모르겠음
stack.RemoveAt(0);
LayerRegion reg = regs[pop];
RcLayerRegion reg = regs[pop];
foreach (int nei in reg.neis)
{
LayerRegion regn = regs[nei];
RcLayerRegion regn = regs[nei];
// Skip already visited.
if (regn.layerId != 0xff)
continue;
@ -299,7 +297,7 @@ namespace DotRecast.Recast
for (int i = 0; i < nregs; ++i)
{
LayerRegion ri = regs[i];
RcLayerRegion ri = regs[i];
if (!ri.@base)
continue;
@ -313,7 +311,7 @@ namespace DotRecast.Recast
{
if (i == j)
continue;
LayerRegion rj = regs[j];
RcLayerRegion rj = regs[j];
if (!rj.@base)
continue;
@ -360,7 +358,7 @@ namespace DotRecast.Recast
// Merge
for (int j = 0; j < nregs; ++j)
{
LayerRegion rj = regs[j];
RcLayerRegion rj = regs[j];
if (rj.layerId == oldId)
{
rj.@base = false;
@ -417,11 +415,11 @@ namespace DotRecast.Recast
bmax.x -= borderSize * chf.cs;
bmax.z -= borderSize * chf.cs;
HeightfieldLayerSet lset = new HeightfieldLayerSet();
lset.layers = new HeightfieldLayer[layerId];
RcHeightfieldLayerSet lset = new RcHeightfieldLayerSet();
lset.layers = new RcHeightfieldLayer[layerId];
for (int i = 0; i < lset.layers.Length; i++)
{
lset.layers[i] = new HeightfieldLayer();
lset.layers[i] = new RcHeightfieldLayer();
}
// Store layers.
@ -429,7 +427,7 @@ namespace DotRecast.Recast
{
int curId = i;
HeightfieldLayer layer = lset.layers[i];
RcHeightfieldLayer layer = lset.layers[i];
int gridSize = lw * lh;
@ -475,10 +473,10 @@ namespace DotRecast.Recast
{
int cx = borderSize + x;
int cy = borderSize + y;
CompactCell c = chf.cells[cx + cy * w];
RcCompactCell c = chf.cells[cx + cy * w];
for (int j = c.index, nj = c.index + c.count; j < nj; ++j)
{
CompactSpan s = chf.spans[j];
RcCompactSpan s = chf.spans[j];
// Skip unassigned regions.
if (srcReg[j] == 0xff)
continue;
@ -515,7 +513,7 @@ namespace DotRecast.Recast
portal |= (char)(1 << dir);
// Update height so that it matches on both
// sides of the portal.
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
if (@as.y > hmin)
layer.heights[idx] = Math.Max(layer.heights[idx], (char)(@as.y - hmin));
}

View File

@ -23,9 +23,9 @@ using DotRecast.Core;
namespace DotRecast.Recast
{
using static RecastConstants;
using static RcConstants;
public class RecastMesh
public static class RecastMesh
{
public const int MAX_MESH_VERTS_POLY = 0xffff;
public const int VERTEX_BUCKET_COUNT = (1 << 12);
@ -41,7 +41,7 @@ namespace DotRecast.Recast
int nextEdge = nverts;
int edgeCount = 0;
Edge[] edges = new Edge[maxEdgeCount];
RcEdge[] edges = new RcEdge[maxEdgeCount];
for (int i = 0; i < nverts; i++)
firstEdge[i] = RC_MESH_NULL_IDX;
@ -59,7 +59,7 @@ namespace DotRecast.Recast
: polys[t + j + 1];
if (v0 < v1)
{
Edge edge = new Edge();
RcEdge edge = new RcEdge();
edges[edgeCount] = edge;
edge.vert[0] = v0;
edge.vert[1] = v1;
@ -90,7 +90,7 @@ namespace DotRecast.Recast
{
for (int e = firstEdge[v1]; e != RC_MESH_NULL_IDX; e = firstEdge[nextEdge + e])
{
Edge edge = edges[e];
RcEdge edge = edges[e];
if (edge.vert[1] == v0 && edge.poly[0] == edge.poly[1])
{
edge.poly[1] = i;
@ -105,7 +105,7 @@ namespace DotRecast.Recast
// Store adjacency
for (int i = 0; i < edgeCount; ++i)
{
Edge e = edges[i];
RcEdge e = edges[i];
if (e.poly[0] != e.poly[1])
{
int p0 = e.poly[0] * vertsPerPoly * 2;
@ -574,7 +574,7 @@ namespace DotRecast.Recast
return an;
}
private static bool CanRemoveVertex(Telemetry ctx, PolyMesh mesh, int rem)
private static bool CanRemoveVertex(Telemetry ctx, RcPolyMesh mesh, int rem)
{
int nvp = mesh.nvp;
@ -677,7 +677,7 @@ namespace DotRecast.Recast
return true;
}
private static void RemoveVertex(Telemetry ctx, PolyMesh mesh, int rem, int maxTris)
private static void RemoveVertex(Telemetry ctx, RcPolyMesh mesh, int rem, int maxTris)
{
int nvp = mesh.nvp;
@ -964,10 +964,10 @@ namespace DotRecast.Recast
/// limit must be retricted to <= #DT_VERTS_PER_POLYGON.
///
/// @see rcAllocPolyMesh, rcContourSet, rcPolyMesh, rcConfig
public static PolyMesh BuildPolyMesh(Telemetry ctx, ContourSet cset, int nvp)
public static RcPolyMesh BuildPolyMesh(Telemetry ctx, RcContourSet cset, int nvp)
{
ctx.StartTimer("POLYMESH");
PolyMesh mesh = new PolyMesh();
RcPolyMesh mesh = new RcPolyMesh();
mesh.bmin = cset.bmin;
mesh.bmax = cset.bmax;
mesh.cs = cset.cs;
@ -1020,7 +1020,7 @@ namespace DotRecast.Recast
for (int i = 0; i < cset.conts.Count; ++i)
{
Contour cont = cset.conts[i];
RcContour cont = cset.conts[i];
// Skip null contours.
if (cont.nverts < 3)
@ -1209,13 +1209,13 @@ namespace DotRecast.Recast
}
/// @see rcAllocPolyMesh, rcPolyMesh
public static PolyMesh MergePolyMeshes(Telemetry ctx, PolyMesh[] meshes, int nmeshes)
public static RcPolyMesh MergePolyMeshes(Telemetry ctx, RcPolyMesh[] meshes, int nmeshes)
{
if (nmeshes == 0 || meshes == null)
return null;
ctx.StartTimer("MERGE_POLYMESH");
PolyMesh mesh = new PolyMesh();
RcPolyMesh mesh = new RcPolyMesh();
mesh.nvp = meshes[0].nvp;
mesh.cs = meshes[0].cs;
mesh.ch = meshes[0].ch;
@ -1254,7 +1254,7 @@ namespace DotRecast.Recast
for (int i = 0; i < nmeshes; ++i)
{
PolyMesh pmesh = meshes[i];
RcPolyMesh pmesh = meshes[i];
int ox = (int)Math.Floor((pmesh.bmin.x - mesh.bmin.x) / mesh.cs + 0.5f);
int oz = (int)Math.Floor((pmesh.bmin.z - mesh.bmin.z) / mesh.cs + 0.5f);
@ -1338,9 +1338,9 @@ namespace DotRecast.Recast
return mesh;
}
public static PolyMesh CopyPolyMesh(Telemetry ctx, PolyMesh src)
public static RcPolyMesh CopyPolyMesh(Telemetry ctx, RcPolyMesh src)
{
PolyMesh dst = new PolyMesh();
RcPolyMesh dst = new RcPolyMesh();
dst.nverts = src.nverts;
dst.npolys = src.npolys;

View File

@ -23,17 +23,17 @@ using System.Collections.Generic;
using DotRecast.Core;
using static DotRecast.Core.RcMath;
using static DotRecast.Recast.RecastCommon;
using static DotRecast.Recast.RecastConstants;
using static DotRecast.Recast.RcConstants;
namespace DotRecast.Recast
{
public class RecastMeshDetail
public static class RecastMeshDetail
{
public const int MAX_VERTS = 127;
public const int MAX_TRIS = 255; // Max tris for delaunay is 2n-2-k (n=num verts, k=num hull verts).
public const int MAX_VERTS_PER_EDGE = 32;
public const int RC_UNSET_HEIGHT = RecastConstants.SPAN_MAX_HEIGHT;
public const int RC_UNSET_HEIGHT = RcConstants.SPAN_MAX_HEIGHT;
public const int EV_UNDEF = -1;
public const int EV_HULL = -2;
@ -346,7 +346,7 @@ namespace DotRecast.Recast
}
private static int GetHeight(float fx, float fy, float fz, float cs, float ics, float ch, int radius,
HeightPatch hp)
RcHeightPatch hp)
{
int ix = (int)Math.Floor(fx * ics + 0.01f);
int iz = (int)Math.Floor(fz * ics + 0.01f);
@ -832,7 +832,7 @@ namespace DotRecast.Recast
}
static int BuildPolyDetail(Telemetry ctx, float[] @in, int nin, float sampleDist, float sampleMaxError,
int heightSearchRadius, CompactHeightfield chf, HeightPatch hp, float[] verts, List<int> tris)
int heightSearchRadius, RcCompactHeightfield chf, RcHeightPatch hp, float[] verts, List<int> tris)
{
List<int> samples = new List<int>(512);
@ -1113,8 +1113,8 @@ namespace DotRecast.Recast
return nverts;
}
static void SeedArrayWithPolyCenter(Telemetry ctx, CompactHeightfield chf, int[] meshpoly, int poly, int npoly,
int[] verts, int bs, HeightPatch hp, List<int> array)
static void SeedArrayWithPolyCenter(Telemetry ctx, RcCompactHeightfield chf, int[] meshpoly, int poly, int npoly,
int[] verts, int bs, RcHeightPatch hp, List<int> array)
{
// Note: Reads to the compact heightfield are offset by border size (bs)
// since border size offset is already removed from the polymesh vertices.
@ -1136,10 +1136,10 @@ namespace DotRecast.Recast
continue;
}
CompactCell c = chf.cells[(ax + bs) + (az + bs) * chf.width];
RcCompactCell c = chf.cells[(ax + bs) + (az + bs) * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni && dmin > 0; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int d = Math.Abs(ay - s.y);
if (d < dmin)
{
@ -1215,7 +1215,7 @@ namespace DotRecast.Recast
dirs[3] = dirs[directDir];
dirs[directDir] = tmp;
CompactSpan cs = chf.spans[ci];
RcCompactSpan cs = chf.spans[ci];
for (int i = 0; i < 4; ++i)
{
@ -1258,7 +1258,7 @@ namespace DotRecast.Recast
array.Add(cy + bs);
array.Add(ci);
Array.Fill(hp.data, RC_UNSET_HEIGHT, 0, (hp.width * hp.height) - (0));
CompactSpan cs2 = chf.spans[ci];
RcCompactSpan cs2 = chf.spans[ci];
hp.data[cx - hp.xmin + (cy - hp.ymin) * hp.width] = cs2.y;
}
@ -1271,8 +1271,8 @@ namespace DotRecast.Recast
queue.Add(v3);
}
static void GetHeightData(Telemetry ctx, CompactHeightfield chf, int[] meshpolys, int poly, int npoly, int[] verts,
int bs, HeightPatch hp, int region)
static void GetHeightData(Telemetry ctx, RcCompactHeightfield chf, int[] meshpolys, int poly, int npoly, int[] verts,
int bs, RcHeightPatch hp, int region)
{
// Note: Reads to the compact heightfield are offset by border size (bs)
// since border size offset is already removed from the polymesh vertices.
@ -1295,10 +1295,10 @@ namespace DotRecast.Recast
for (int hx = 0; hx < hp.width; hx++)
{
int x = hp.xmin + hx + bs;
CompactCell c = chf.cells[x + y * chf.width];
RcCompactCell c = chf.cells[x + y * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (s.reg == region)
{
// Store height
@ -1314,7 +1314,7 @@ namespace DotRecast.Recast
int ax = x + GetDirOffsetX(dir);
int ay = y + GetDirOffsetY(dir);
int ai = chf.cells[ax + ay * chf.width].index + GetCon(s, dir);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
if (@as.reg != region)
{
border = true;
@ -1360,7 +1360,7 @@ namespace DotRecast.Recast
queue = queue.GetRange(RETRACT_SIZE * 3, queue.Count - (RETRACT_SIZE * 3));
}
CompactSpan cs = chf.spans[ci];
RcCompactSpan cs = chf.spans[ci];
for (int dir = 0; dir < 4; ++dir)
{
if (GetCon(cs, dir) == RC_NOT_CONNECTED)
@ -1384,7 +1384,7 @@ namespace DotRecast.Recast
}
int ai = chf.cells[ax + ay * chf.width].index + GetCon(cs, dir);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
hp.data[hx + hy * hp.width] = @as.y;
Push3(queue, ax, ay, ai);
@ -1423,7 +1423,7 @@ namespace DotRecast.Recast
/// See the #rcConfig documentation for more information on the configuration parameters.
///
/// @see rcAllocPolyMeshDetail, rcPolyMesh, rcCompactHeightfield, rcPolyMeshDetail, rcConfig
public static PolyMeshDetail BuildPolyMeshDetail(Telemetry ctx, PolyMesh mesh, CompactHeightfield chf,
public static RcPolyMeshDetail BuildPolyMeshDetail(Telemetry ctx, RcPolyMesh mesh, RcCompactHeightfield chf,
float sampleDist, float sampleMaxError)
{
ctx.StartTimer("POLYMESHDETAIL");
@ -1432,7 +1432,7 @@ namespace DotRecast.Recast
return null;
}
PolyMeshDetail dmesh = new PolyMeshDetail();
RcPolyMeshDetail dmesh = new RcPolyMeshDetail();
int nvp = mesh.nvp;
float cs = mesh.cs;
float ch = mesh.ch;
@ -1442,7 +1442,7 @@ namespace DotRecast.Recast
List<int> tris = new List<int>(512);
float[] verts = new float[256 * 3];
HeightPatch hp = new HeightPatch();
RcHeightPatch hp = new RcHeightPatch();
int nPolyVerts = 0;
int maxhw = 0, maxhh = 0;
@ -1615,9 +1615,9 @@ namespace DotRecast.Recast
}
/// @see rcAllocPolyMeshDetail, rcPolyMeshDetail
PolyMeshDetail MergePolyMeshDetails(Telemetry ctx, PolyMeshDetail[] meshes, int nmeshes)
RcPolyMeshDetail MergePolyMeshDetails(Telemetry ctx, RcPolyMeshDetail[] meshes, int nmeshes)
{
PolyMeshDetail mesh = new PolyMeshDetail();
RcPolyMeshDetail mesh = new RcPolyMeshDetail();
ctx.StartTimer("MERGE_POLYMESHDETAIL");
@ -1647,7 +1647,7 @@ namespace DotRecast.Recast
// Merge datas.
for (int i = 0; i < nmeshes; ++i)
{
PolyMeshDetail dm = meshes[i];
RcPolyMeshDetail dm = meshes[i];
if (dm == null)
{
continue;

View File

@ -21,11 +21,11 @@ freely, subject to the following restrictions:
using System;
using DotRecast.Core;
using static DotRecast.Core.RcMath;
using static DotRecast.Recast.RecastConstants;
using static DotRecast.Recast.RcConstants;
namespace DotRecast.Recast
{
public class RecastRasterization
public static class RecastRasterization
{
/**
* Check whether two bounding boxes overlap
@ -80,12 +80,12 @@ namespace DotRecast.Recast
* The merge theshold. [Limit: >= 0] [Units: vx]
* @see Heightfield, Span.
*/
public static void AddSpan(Heightfield heightfield, int x, int y, int spanMin, int spanMax, int areaId,
public static void AddSpan(RcHeightfield heightfield, int x, int y, int spanMin, int spanMax, int areaId,
int flagMergeThreshold)
{
int idx = x + y * heightfield.width;
Span s = new Span();
RcSpan s = new RcSpan();
s.smin = spanMin;
s.smax = spanMax;
s.area = areaId;
@ -98,8 +98,8 @@ namespace DotRecast.Recast
return;
}
Span prev = null;
Span cur = heightfield.spans[idx];
RcSpan prev = null;
RcSpan cur = heightfield.spans[idx];
// Insert and merge spans.
while (cur != null)
@ -128,7 +128,7 @@ namespace DotRecast.Recast
s.area = Math.Max(s.area, cur.area);
// Remove current span.
Span next = cur.next;
RcSpan next = cur.next;
if (prev != null)
prev.next = next;
else
@ -254,7 +254,7 @@ namespace DotRecast.Recast
* @param flagMergeThreshold
* The threshold in which area flags will be merged
*/
private static void RasterizeTri(float[] verts, int v0, int v1, int v2, int area, Heightfield hf, RcVec3f hfBBMin,
private static void RasterizeTri(float[] verts, int v0, int v1, int v2, int area, RcHeightfield hf, RcVec3f hfBBMin,
RcVec3f hfBBMax, float cellSize, float inverseCellSize, float inverseCellHeight, int flagMergeThreshold)
{
RcVec3f tmin = new RcVec3f();
@ -397,7 +397,7 @@ namespace DotRecast.Recast
* The distance where the walkable flag is favored over the non-walkable flag. [Limit: >= 0] [Units: vx]
* @see Heightfield
*/
public static void RasterizeTriangle(Heightfield heightfield, float[] verts, int v0, int v1, int v2, int area,
public static void RasterizeTriangle(RcHeightfield heightfield, float[] verts, int v0, int v1, int v2, int area,
int flagMergeThreshold, Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_TRIANGLES");
@ -428,7 +428,7 @@ namespace DotRecast.Recast
* The distance where the walkable flag is favored over the non-walkable flag. [Limit: >= 0] [Units: vx]
* @see Heightfield
*/
public static void RasterizeTriangles(Heightfield heightfield, float[] verts, int[] tris, int[] areaIds, int numTris,
public static void RasterizeTriangles(RcHeightfield heightfield, float[] verts, int[] tris, int[] areaIds, int numTris,
int flagMergeThreshold, Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_TRIANGLES");
@ -465,7 +465,7 @@ namespace DotRecast.Recast
* The distance where the walkable flag is favored over the non-walkable flag. [Limit: >= 0] [Units: vx]
* @see Heightfield
*/
public static void RasterizeTriangles(Heightfield heightfield, float[] verts, int[] areaIds, int numTris,
public static void RasterizeTriangles(RcHeightfield heightfield, float[] verts, int[] areaIds, int numTris,
int flagMergeThreshold, Telemetry ctx)
{
ctx.StartTimer("RASTERIZE_TRIANGLES");

View File

@ -24,14 +24,14 @@ using System.Linq;
namespace DotRecast.Recast
{
using static RecastConstants;
using static RcConstants;
public class RecastRegion
public static class RecastRegion
{
const int RC_NULL_NEI = 0xffff;
public static int CalculateDistanceField(CompactHeightfield chf, int[] src)
public static int CalculateDistanceField(RcCompactHeightfield chf, int[] src)
{
int maxDist;
int w = chf.width;
@ -48,10 +48,10 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int area = chf.areas[i];
int nc = 0;
@ -82,10 +82,10 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (RecastCommon.GetCon(s, 0) != RC_NOT_CONNECTED)
{
@ -93,7 +93,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(0);
int ay = y + RecastCommon.GetDirOffsetY(0);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 0);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
if (src[ai] + 2 < src[i])
{
src[i] = src[ai] + 2;
@ -118,7 +118,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(3);
int ay = y + RecastCommon.GetDirOffsetY(3);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 3);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
if (src[ai] + 2 < src[i])
{
src[i] = src[ai] + 2;
@ -145,10 +145,10 @@ namespace DotRecast.Recast
{
for (int x = w - 1; x >= 0; --x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (RecastCommon.GetCon(s, 2) != RC_NOT_CONNECTED)
{
@ -156,7 +156,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(2);
int ay = y + RecastCommon.GetDirOffsetY(2);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 2);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
if (src[ai] + 2 < src[i])
{
src[i] = src[ai] + 2;
@ -181,7 +181,7 @@ namespace DotRecast.Recast
int ax = x + RecastCommon.GetDirOffsetX(1);
int ay = y + RecastCommon.GetDirOffsetY(1);
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, 1);
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
if (src[ai] + 2 < src[i])
{
src[i] = src[ai] + 2;
@ -212,7 +212,7 @@ namespace DotRecast.Recast
return maxDist;
}
private static int[] BoxBlur(CompactHeightfield chf, int thr, int[] src)
private static int[] BoxBlur(RcCompactHeightfield chf, int thr, int[] src)
{
int w = chf.width;
int h = chf.height;
@ -224,10 +224,10 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int cd = src[i];
if (cd <= thr)
{
@ -245,7 +245,7 @@ namespace DotRecast.Recast
int ai = chf.cells[ax + ay * w].index + RecastCommon.GetCon(s, dir);
d += src[ai];
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
int dir2 = (dir + 1) & 0x3;
if (RecastCommon.GetCon(@as, dir2) != RC_NOT_CONNECTED)
{
@ -273,7 +273,7 @@ namespace DotRecast.Recast
return dst;
}
private static bool FloodRegion(int x, int y, int i, int level, int r, CompactHeightfield chf, int[] srcReg,
private static bool FloodRegion(int x, int y, int i, int level, int r, RcCompactHeightfield chf, int[] srcReg,
int[] srcDist, List<int> stack)
{
int w = chf.width;
@ -303,7 +303,7 @@ namespace DotRecast.Recast
stack.RemoveAt(stack.Count - 1);
CompactSpan cs = chf.spans[ci];
RcCompactSpan cs = chf.spans[ci];
// Check if any of the neighbours already have a valid region set.
int ar = 0;
@ -332,7 +332,7 @@ namespace DotRecast.Recast
break;
}
CompactSpan @as = chf.spans[ai];
RcCompactSpan @as = chf.spans[ai];
int dir2 = (dir + 1) & 0x3;
if (RecastCommon.GetCon(@as, dir2) != RC_NOT_CONNECTED)
@ -391,7 +391,7 @@ namespace DotRecast.Recast
return count > 0;
}
private static int[] ExpandRegions(int maxIter, int level, CompactHeightfield chf, int[] srcReg, int[] srcDist,
private static int[] ExpandRegions(int maxIter, int level, RcCompactHeightfield chf, int[] srcReg, int[] srcDist,
List<int> stack, bool fillStack)
{
int w = chf.width;
@ -405,7 +405,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
if (chf.dist[i] >= level && srcReg[i] == 0 && chf.areas[i] != RC_NULL_AREA)
@ -452,7 +452,7 @@ namespace DotRecast.Recast
int r = srcReg[i];
int d2 = 0xffff;
int area = chf.areas[i];
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
for (int dir = 0; dir < 4; ++dir)
{
if (RecastCommon.GetCon(s, dir) == RC_NOT_CONNECTED)
@ -517,7 +517,7 @@ namespace DotRecast.Recast
return srcReg;
}
private static void SortCellsByLevel(int startLevel, CompactHeightfield chf, int[] srcReg, int nbStacks,
private static void SortCellsByLevel(int startLevel, RcCompactHeightfield chf, int[] srcReg, int nbStacks,
List<List<int>> stacks, int loglevelsPerStack) // the levels per stack (2 in our case) as a bit shift
{
int w = chf.width;
@ -534,7 +534,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
if (chf.areas[i] == RC_NULL_AREA || srcReg[i] != 0)
@ -580,7 +580,7 @@ namespace DotRecast.Recast
private static void RemoveAdjacentNeighbours(Region reg)
private static void RemoveAdjacentNeighbours(RcRegion reg)
{
// Remove adjacent duplicates.
for (int i = 0; i < reg.connections.Count && reg.connections.Count > 1;)
@ -597,7 +597,7 @@ namespace DotRecast.Recast
}
}
private static void ReplaceNeighbour(Region reg, int oldId, int newId)
private static void ReplaceNeighbour(RcRegion reg, int oldId, int newId)
{
bool neiChanged = false;
for (int i = 0; i < reg.connections.Count; ++i)
@ -623,7 +623,7 @@ namespace DotRecast.Recast
}
}
private static bool CanMergeWithRegion(Region rega, Region regb)
private static bool CanMergeWithRegion(RcRegion rega, RcRegion regb)
{
if (rega.areaType != regb.areaType)
{
@ -655,7 +655,7 @@ namespace DotRecast.Recast
return true;
}
private static void AddUniqueFloorRegion(Region reg, int n)
private static void AddUniqueFloorRegion(RcRegion reg, int n)
{
if (!reg.floors.Contains(n))
{
@ -663,7 +663,7 @@ namespace DotRecast.Recast
}
}
private static bool MergeRegions(Region rega, Region regb)
private static bool MergeRegions(RcRegion rega, RcRegion regb)
{
int aid = rega.id;
int bid = regb.id;
@ -730,16 +730,16 @@ namespace DotRecast.Recast
return true;
}
private static bool IsRegionConnectedToBorder(Region reg)
private static bool IsRegionConnectedToBorder(RcRegion reg)
{
// Region is connected to border if
// one of the neighbours is null id.
return reg.connections.Contains(0);
}
private static bool IsSolidEdge(CompactHeightfield chf, int[] srcReg, int x, int y, int i, int dir)
private static bool IsSolidEdge(RcCompactHeightfield chf, int[] srcReg, int x, int y, int i, int dir)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int r = 0;
if (RecastCommon.GetCon(s, dir) != RC_NOT_CONNECTED)
{
@ -757,13 +757,13 @@ namespace DotRecast.Recast
return true;
}
private static void WalkContour(int x, int y, int i, int dir, CompactHeightfield chf, int[] srcReg,
private static void WalkContour(int x, int y, int i, int dir, RcCompactHeightfield chf, int[] srcReg,
List<int> cont)
{
int startDir = dir;
int starti = i;
CompactSpan ss = chf.spans[i];
RcCompactSpan ss = chf.spans[i];
int curReg = 0;
if (RecastCommon.GetCon(ss, dir) != RC_NOT_CONNECTED)
{
@ -778,7 +778,7 @@ namespace DotRecast.Recast
int iter = 0;
while (++iter < 40000)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (IsSolidEdge(chf, srcReg, x, y, i, dir))
{
@ -807,7 +807,7 @@ namespace DotRecast.Recast
int ny = y + RecastCommon.GetDirOffsetY(dir);
if (RecastCommon.GetCon(s, dir) != RC_NOT_CONNECTED)
{
CompactCell nc = chf.cells[nx + ny * chf.width];
RcCompactCell nc = chf.cells[nx + ny * chf.width];
ni = nc.index + RecastCommon.GetCon(s, dir);
}
@ -848,18 +848,18 @@ namespace DotRecast.Recast
}
private static int MergeAndFilterRegions(Telemetry ctx, int minRegionArea, int mergeRegionSize, int maxRegionId,
CompactHeightfield chf, int[] srcReg, List<int> overlaps)
RcCompactHeightfield chf, int[] srcReg, List<int> overlaps)
{
int w = chf.width;
int h = chf.height;
int nreg = maxRegionId + 1;
Region[] regions = new Region[nreg];
RcRegion[] regions = new RcRegion[nreg];
// Construct regions
for (int i = 0; i < nreg; ++i)
{
regions[i] = new Region(i);
regions[i] = new RcRegion(i);
}
// Find edge of a region and find connections around the contour.
@ -867,7 +867,7 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
int r = srcReg[i];
@ -876,7 +876,7 @@ namespace DotRecast.Recast
continue;
}
Region reg = regions[r];
RcRegion reg = regions[r];
reg.spanCount++;
// Update floors.
@ -935,7 +935,7 @@ namespace DotRecast.Recast
List<int> trace = new List<int>(32);
for (int i = 0; i < nreg; ++i)
{
Region reg = regions[i];
RcRegion reg = regions[i];
if (reg.id == 0 || (reg.id & RC_BORDER_REG) != 0)
{
continue;
@ -967,7 +967,7 @@ namespace DotRecast.Recast
int ri = stack[^1];
stack.RemoveAt(stack.Count - 1);
Region creg = regions[ri];
RcRegion creg = regions[ri];
spanCount += creg.spanCount;
trace.Add(ri);
@ -980,7 +980,7 @@ namespace DotRecast.Recast
continue;
}
Region neireg = regions[creg.connections[j]];
RcRegion neireg = regions[creg.connections[j]];
if (neireg.visited)
{
continue;
@ -1019,7 +1019,7 @@ namespace DotRecast.Recast
mergeCount = 0;
for (int i = 0; i < nreg; ++i)
{
Region reg = regions[i];
RcRegion reg = regions[i];
if (reg.id == 0 || (reg.id & RC_BORDER_REG) != 0)
{
continue;
@ -1053,7 +1053,7 @@ namespace DotRecast.Recast
continue;
}
Region mreg = regions[reg.connections[j]];
RcRegion mreg = regions[reg.connections[j]];
if (mreg.id == 0 || (mreg.id & RC_BORDER_REG) != 0 || mreg.overlap)
{
continue;
@ -1070,7 +1070,7 @@ namespace DotRecast.Recast
if (mergeId != reg.id)
{
int oldId = reg.id;
Region target = regions[mergeId];
RcRegion target = regions[mergeId];
// Merge neighbours.
if (MergeRegions(target, reg))
@ -1161,7 +1161,7 @@ namespace DotRecast.Recast
return maxRegionId;
}
private static void AddUniqueConnection(Region reg, int n)
private static void AddUniqueConnection(RcRegion reg, int n)
{
if (!reg.connections.Contains(n))
{
@ -1170,18 +1170,18 @@ namespace DotRecast.Recast
}
private static int MergeAndFilterLayerRegions(Telemetry ctx, int minRegionArea, int maxRegionId,
CompactHeightfield chf, int[] srcReg, List<int> overlaps)
RcCompactHeightfield chf, int[] srcReg, List<int> overlaps)
{
int w = chf.width;
int h = chf.height;
int nreg = maxRegionId + 1;
Region[] regions = new Region[nreg];
RcRegion[] regions = new RcRegion[nreg];
// Construct regions
for (int i = 0; i < nreg; ++i)
{
regions[i] = new Region(i);
regions[i] = new RcRegion(i);
}
// Find region neighbours and overlapping regions.
@ -1190,20 +1190,20 @@ namespace DotRecast.Recast
{
for (int x = 0; x < w; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
lregs.Clear();
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
int ri = srcReg[i];
if (ri == 0 || ri >= nreg)
{
continue;
}
Region reg = regions[ri];
RcRegion reg = regions[ri];
reg.spanCount++;
reg.areaType = chf.areas[i];
@ -1241,8 +1241,8 @@ namespace DotRecast.Recast
{
if (lregs[i] != lregs[j])
{
Region ri = regions[lregs[i]];
Region rj = regions[lregs[j]];
RcRegion ri = regions[lregs[i]];
RcRegion rj = regions[lregs[j]];
AddUniqueFloorRegion(ri, lregs[j]);
AddUniqueFloorRegion(rj, lregs[i]);
}
@ -1263,7 +1263,7 @@ namespace DotRecast.Recast
List<int> stack = new List<int>(32);
for (int i = 1; i < nreg; ++i)
{
Region root = regions[i];
RcRegion root = regions[i];
// Skip already visited.
if (root.id != 0)
{
@ -1281,13 +1281,13 @@ namespace DotRecast.Recast
// Pop front
var idx = stack[0];
stack.RemoveAt(0);
Region reg = regions[idx];
RcRegion reg = regions[idx];
int ncons = reg.connections.Count;
for (int j = 0; j < ncons; ++j)
{
int nei = reg.connections[j];
Region regn = regions[nei];
RcRegion regn = regions[nei];
// Skip already visited.
if (regn.id != 0)
{
@ -1415,7 +1415,7 @@ namespace DotRecast.Recast
/// and rcCompactHeightfield::dist fields.
///
/// @see rcCompactHeightfield, rcBuildRegions, rcBuildRegionsMonotone
public static void BuildDistanceField(Telemetry ctx, CompactHeightfield chf)
public static void BuildDistanceField(Telemetry ctx, RcCompactHeightfield chf)
{
ctx.StartTimer("DISTANCEFIELD");
int[] src = new int[chf.spanCount];
@ -1439,7 +1439,7 @@ namespace DotRecast.Recast
ctx.StopTimer("DISTANCEFIELD");
}
private static void PaintRectRegion(int minx, int maxx, int miny, int maxy, int regId, CompactHeightfield chf,
private static void PaintRectRegion(int minx, int maxx, int miny, int maxy, int regId, RcCompactHeightfield chf,
int[] srcReg)
{
int w = chf.width;
@ -1447,7 +1447,7 @@ namespace DotRecast.Recast
{
for (int x = minx; x < maxx; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
if (chf.areas[i] != RC_NULL_AREA)
@ -1478,7 +1478,7 @@ namespace DotRecast.Recast
/// @warning The distance field must be created using #rcBuildDistanceField before attempting to build regions.
///
/// @see rcCompactHeightfield, rcCompactSpan, rcBuildDistanceField, rcBuildRegionsMonotone, rcConfig
public static void BuildRegionsMonotone(Telemetry ctx, CompactHeightfield chf, int minRegionArea,
public static void BuildRegionsMonotone(Telemetry ctx, RcCompactHeightfield chf, int minRegionArea,
int mergeRegionArea)
{
ctx.StartTimer("REGIONS");
@ -1491,10 +1491,10 @@ namespace DotRecast.Recast
int[] srcReg = new int[chf.spanCount];
int nsweeps = Math.Max(chf.width, chf.height);
SweepSpan[] sweeps = new SweepSpan[nsweeps];
RcSweepSpan[] sweeps = new RcSweepSpan[nsweeps];
for (int i = 0; i < sweeps.Length; i++)
{
sweeps[i] = new SweepSpan();
sweeps[i] = new RcSweepSpan();
}
// Mark border regions.
@ -1533,11 +1533,11 @@ namespace DotRecast.Recast
for (int x = borderSize; x < w - borderSize; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (chf.areas[i] == RC_NULL_AREA)
{
continue;
@ -1611,7 +1611,7 @@ namespace DotRecast.Recast
// Remap IDs
for (int x = borderSize; x < w - borderSize; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
@ -1661,7 +1661,7 @@ namespace DotRecast.Recast
/// @warning The distance field must be created using #rcBuildDistanceField before attempting to build regions.
///
/// @see rcCompactHeightfield, rcCompactSpan, rcBuildDistanceField, rcBuildRegionsMonotone, rcConfig
public static void BuildRegions(Telemetry ctx, CompactHeightfield chf, int minRegionArea,
public static void BuildRegions(Telemetry ctx, RcCompactHeightfield chf, int minRegionArea,
int mergeRegionArea)
{
ctx.StartTimer("REGIONS");
@ -1786,7 +1786,7 @@ namespace DotRecast.Recast
ctx.StopTimer("REGIONS");
}
public static void BuildLayerRegions(Telemetry ctx, CompactHeightfield chf, int minRegionArea)
public static void BuildLayerRegions(Telemetry ctx, RcCompactHeightfield chf, int minRegionArea)
{
ctx.StartTimer("REGIONS");
@ -1797,10 +1797,10 @@ namespace DotRecast.Recast
int[] srcReg = new int[chf.spanCount];
int nsweeps = Math.Max(chf.width, chf.height);
SweepSpan[] sweeps = new SweepSpan[nsweeps];
RcSweepSpan[] sweeps = new RcSweepSpan[nsweeps];
for (int i = 0; i < sweeps.Length; i++)
{
sweeps[i] = new SweepSpan();
sweeps[i] = new RcSweepSpan();
}
// Mark border regions.
@ -1839,11 +1839,11 @@ namespace DotRecast.Recast
for (int x = borderSize; x < w - borderSize; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{
CompactSpan s = chf.spans[i];
RcCompactSpan s = chf.spans[i];
if (chf.areas[i] == RC_NULL_AREA)
{
continue;
@ -1917,7 +1917,7 @@ namespace DotRecast.Recast
// Remap IDs
for (int x = borderSize; x < w - borderSize; ++x)
{
CompactCell c = chf.cells[x + y * w];
RcCompactCell c = chf.cells[x + y * w];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{

View File

@ -21,15 +21,15 @@ using DotRecast.Recast.Geom;
namespace DotRecast.Recast
{
public class RecastVoxelization
public static class RecastVoxelization
{
public static Heightfield BuildSolidHeightfield(IInputGeomProvider geomProvider, RecastBuilderConfig builderCfg,
public static RcHeightfield BuildSolidHeightfield(IInputGeomProvider geomProvider, RecastBuilderConfig builderCfg,
Telemetry ctx)
{
RecastConfig cfg = builderCfg.cfg;
RcConfig cfg = builderCfg.cfg;
// Allocate voxel heightfield where we rasterize our input data to.
Heightfield solid = new Heightfield(builderCfg.width, builderCfg.height, builderCfg.bmin, builderCfg.bmax, cfg.cs, cfg.ch, cfg.borderSize);
RcHeightfield solid = new RcHeightfield(builderCfg.width, builderCfg.height, builderCfg.bmin, builderCfg.bmax, cfg.cs, cfg.ch, cfg.borderSize);
// Allocate array that can hold triangle area types.
// If you have multiple meshes you need to process, allocate

View File

@ -51,19 +51,19 @@ public class RecastTestMeshBuilder
int m_regionMinSize, int m_regionMergeSize, float m_edgeMaxLen, float m_edgeMaxError, int m_vertsPerPoly,
float m_detailSampleDist, float m_detailSampleMaxError)
{
RecastConfig cfg = new RecastConfig(m_partitionType, m_cellSize, m_cellHeight, m_agentHeight, m_agentRadius,
RcConfig cfg = new RcConfig(m_partitionType, m_cellSize, m_cellHeight, m_agentHeight, m_agentRadius,
m_agentMaxClimb, m_agentMaxSlope, m_regionMinSize, m_regionMergeSize, m_edgeMaxLen, m_edgeMaxError,
m_vertsPerPoly, m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
RecastBuilderConfig bcfg = new RecastBuilderConfig(cfg, m_geom.GetMeshBoundsMin(), m_geom.GetMeshBoundsMax());
RecastBuilder rcBuilder = new RecastBuilder();
RecastBuilderResult rcResult = rcBuilder.Build(m_geom, bcfg);
PolyMesh m_pmesh = rcResult.GetMesh();
RcPolyMesh m_pmesh = rcResult.GetMesh();
for (int i = 0; i < m_pmesh.npolys; ++i)
{
m_pmesh.flags[i] = 1;
}
PolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
RcPolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
NavMeshDataCreateParams option = new NavMeshDataCreateParams();
option.verts = m_pmesh.verts;
option.vertCount = m_pmesh.nverts;

View File

@ -39,7 +39,7 @@ public class VoxelQueryTest
[Test]
public void ShouldTraverseTiles()
{
var hfProvider = new Mock<Func<int, int, Heightfield>>();
var hfProvider = new Mock<Func<int, int, RcHeightfield>>();
// Given
List<int> captorX = new();
@ -47,7 +47,7 @@ public class VoxelQueryTest
hfProvider
.Setup(e => e.Invoke(It.IsAny<int>(), It.IsAny<int>()))
.Returns((Heightfield)null)
.Returns((RcHeightfield)null)
.Callback<int, int>((x, z) =>
{
captorX.Add(x);

View File

@ -74,8 +74,8 @@ public class MeshSetReaderWriterTest
{
for (int x = 0; x < tw; ++x)
{
RecastConfig cfg = new RecastConfig(true, m_tileSize, m_tileSize,
RecastConfig.CalcBorder(m_agentRadius, m_cellSize), PartitionType.WATERSHED, m_cellSize, m_cellHeight,
RcConfig cfg = new RcConfig(true, m_tileSize, m_tileSize,
RcConfig.CalcBorder(m_agentRadius, m_cellSize), PartitionType.WATERSHED, m_cellSize, m_cellHeight,
m_agentMaxSlope, true, true, true, m_agentHeight, m_agentRadius, m_agentMaxClimb, m_regionMinArea,
m_regionMergeArea, m_edgeMaxLen, m_edgeMaxError, m_vertsPerPoly, true, m_detailSampleDist,
m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);

View File

@ -52,19 +52,19 @@ public class RecastTestMeshBuilder
int m_regionMinSize, int m_regionMergeSize, float m_edgeMaxLen, float m_edgeMaxError, int m_vertsPerPoly,
float m_detailSampleDist, float m_detailSampleMaxError)
{
RecastConfig cfg = new RecastConfig(m_partitionType, m_cellSize, m_cellHeight, m_agentHeight, m_agentRadius,
RcConfig cfg = new RcConfig(m_partitionType, m_cellSize, m_cellHeight, m_agentHeight, m_agentRadius,
m_agentMaxClimb, m_agentMaxSlope, m_regionMinSize, m_regionMergeSize, m_edgeMaxLen, m_edgeMaxError,
m_vertsPerPoly, m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
RecastBuilderConfig bcfg = new RecastBuilderConfig(cfg, m_geom.GetMeshBoundsMin(), m_geom.GetMeshBoundsMax());
RecastBuilder rcBuilder = new RecastBuilder();
RecastBuilderResult rcResult = rcBuilder.Build(m_geom, bcfg);
PolyMesh m_pmesh = rcResult.GetMesh();
RcPolyMesh m_pmesh = rcResult.GetMesh();
for (int i = 0; i < m_pmesh.npolys; ++i)
{
m_pmesh.flags[i] = 1;
}
PolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
RcPolyMeshDetail m_dmesh = rcResult.GetMeshDetail();
NavMeshDataCreateParams option = new NavMeshDataCreateParams();
option.verts = m_pmesh.verts;
option.vertCount = m_pmesh.nverts;

View File

@ -28,7 +28,7 @@ public class TestDetourBuilder : DetourBuilder
{
RecastBuilder rcBuilder = new RecastBuilder();
RecastBuilderResult rcResult = rcBuilder.Build(geom, rcConfig);
PolyMesh pmesh = rcResult.GetMesh();
RcPolyMesh pmesh = rcResult.GetMesh();
if (applyRecastDemoFlags)
{
@ -58,13 +58,13 @@ public class TestDetourBuilder : DetourBuilder
}
}
PolyMeshDetail dmesh = rcResult.GetMeshDetail();
RcPolyMeshDetail dmesh = rcResult.GetMeshDetail();
NavMeshDataCreateParams option = GetNavMeshCreateParams(rcConfig.cfg, pmesh, dmesh, agentHeight, agentRadius,
agentMaxClimb);
return Build(option, x, y);
}
public NavMeshDataCreateParams GetNavMeshCreateParams(RecastConfig rcConfig, PolyMesh pmesh, PolyMeshDetail dmesh,
public NavMeshDataCreateParams GetNavMeshCreateParams(RcConfig rcConfig, RcPolyMesh pmesh, RcPolyMeshDetail dmesh,
float agentHeight, float agentRadius, float agentMaxClimb)
{
NavMeshDataCreateParams option = new NavMeshDataCreateParams();

View File

@ -67,7 +67,7 @@ public class TestTiledNavMeshBuilder
navMesh = new NavMesh(navMeshParams, 6);
// Build all tiles
RecastConfig cfg = new RecastConfig(true, m_tileSize, m_tileSize, RecastConfig.CalcBorder(m_agentRadius, m_cellSize),
RcConfig cfg = new RcConfig(true, m_tileSize, m_tileSize, RcConfig.CalcBorder(m_agentRadius, m_cellSize),
m_partitionType, m_cellSize, m_cellHeight, m_agentMaxSlope, true, true, true, m_agentHeight, m_agentRadius,
m_agentMaxClimb, m_regionMinArea, m_regionMergeArea, m_edgeMaxLen, m_edgeMaxError, m_vertsPerPoly, true,
m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
@ -78,7 +78,7 @@ public class TestTiledNavMeshBuilder
foreach (RecastBuilderResult result in rcResult)
{
PolyMesh pmesh = result.GetMesh();
RcPolyMesh pmesh = result.GetMesh();
if (pmesh.npolys == 0)
{
continue;
@ -97,7 +97,7 @@ public class TestTiledNavMeshBuilder
option.polyFlags = pmesh.flags;
option.polyCount = pmesh.npolys;
option.nvp = pmesh.nvp;
PolyMeshDetail dmesh = result.GetMeshDetail();
RcPolyMeshDetail dmesh = result.GetMeshDetail();
option.detailMeshes = dmesh.meshes;
option.detailVerts = dmesh.verts;
option.detailVertsCount = dmesh.nverts;

View File

@ -42,7 +42,7 @@ public class TestTileLayerBuilder : AbstractTileLayersBuilder
private const int m_vertsPerPoly = 6;
private const float m_detailSampleDist = 6.0f;
private const float m_detailSampleMaxError = 1.0f;
private readonly RecastConfig rcConfig;
private readonly RcConfig rcConfig;
private const int m_tileSize = 48;
protected readonly IInputGeomProvider geom;
private readonly int tw;
@ -51,7 +51,7 @@ public class TestTileLayerBuilder : AbstractTileLayersBuilder
public TestTileLayerBuilder(IInputGeomProvider geom)
{
this.geom = geom;
rcConfig = new RecastConfig(true, m_tileSize, m_tileSize, RecastConfig.CalcBorder(m_agentRadius, m_cellSize),
rcConfig = new RcConfig(true, m_tileSize, m_tileSize, RcConfig.CalcBorder(m_agentRadius, m_cellSize),
PartitionType.WATERSHED, m_cellSize, m_cellHeight, m_agentMaxSlope, true, true, true, m_agentHeight,
m_agentRadius, m_agentMaxClimb, m_regionMinArea, m_regionMergeArea, m_edgeMaxLen, m_edgeMaxError, m_vertsPerPoly,
true, m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
@ -77,14 +77,14 @@ public class TestTileLayerBuilder : AbstractTileLayersBuilder
protected override List<byte[]> Build(int tx, int ty, RcByteOrder order, bool cCompatibility)
{
HeightfieldLayerSet lset = GetHeightfieldSet(tx, ty);
RcHeightfieldLayerSet lset = GetHeightfieldSet(tx, ty);
List<byte[]> result = new();
if (lset != null)
{
TileCacheBuilder builder = new TileCacheBuilder();
for (int i = 0; i < lset.layers.Length; ++i)
{
HeightfieldLayer layer = lset.layers[i];
RcHeightfieldLayer layer = lset.layers[i];
// Store header
TileCacheLayerHeader header = new TileCacheLayerHeader();
@ -114,13 +114,13 @@ public class TestTileLayerBuilder : AbstractTileLayersBuilder
return result;
}
protected HeightfieldLayerSet GetHeightfieldSet(int tx, int ty)
protected RcHeightfieldLayerSet GetHeightfieldSet(int tx, int ty)
{
RecastBuilder rcBuilder = new RecastBuilder();
RcVec3f bmin = geom.GetMeshBoundsMin();
RcVec3f bmax = geom.GetMeshBoundsMax();
RecastBuilderConfig cfg = new RecastBuilderConfig(rcConfig, bmin, bmax, tx, ty);
HeightfieldLayerSet lset = rcBuilder.BuildLayers(geom, cfg);
RcHeightfieldLayerSet lset = rcBuilder.BuildLayers(geom, cfg);
return lset;
}
}

View File

@ -24,7 +24,7 @@ using NUnit.Framework;
namespace DotRecast.Recast.Test;
using static RecastConstants;
using static RcConstants;
[Parallelizable]
public class RecastLayersTest
@ -56,7 +56,7 @@ public class RecastLayersTest
[Test]
public void TestDungeon()
{
HeightfieldLayerSet lset = Build("dungeon.obj", 3, 2);
RcHeightfieldLayerSet lset = Build("dungeon.obj", 3, 2);
Assert.That(lset.layers.Length, Is.EqualTo(1));
Assert.That(lset.layers[0].width, Is.EqualTo(48));
Assert.That(lset.layers[0].hmin, Is.EqualTo(51));
@ -74,7 +74,7 @@ public class RecastLayersTest
[Test]
public void Test()
{
HeightfieldLayerSet lset = Build("nav_test.obj", 3, 2);
RcHeightfieldLayerSet lset = Build("nav_test.obj", 3, 2);
Assert.That(lset.layers.Length, Is.EqualTo(3));
Assert.That(lset.layers[0].width, Is.EqualTo(48));
Assert.That(lset.layers[0].hmin, Is.EqualTo(13));
@ -116,7 +116,7 @@ public class RecastLayersTest
[Test]
public void Test2()
{
HeightfieldLayerSet lset = Build("nav_test.obj", 2, 4);
RcHeightfieldLayerSet lset = Build("nav_test.obj", 2, 4);
Assert.That(lset.layers.Length, Is.EqualTo(2));
Assert.That(lset.layers[0].width, Is.EqualTo(48));
Assert.That(lset.layers[0].hmin, Is.EqualTo(13));
@ -143,16 +143,16 @@ public class RecastLayersTest
Assert.That(lset.layers[1].cons[1600], Is.EqualTo(0));
}
private HeightfieldLayerSet Build(string filename, int x, int y)
private RcHeightfieldLayerSet Build(string filename, int x, int y)
{
IInputGeomProvider geom = ObjImporter.Load(Loader.ToBytes(filename));
RecastBuilder builder = new RecastBuilder();
RecastConfig cfg = new RecastConfig(true, m_tileSize, m_tileSize, RecastConfig.CalcBorder(m_agentRadius, m_cellSize),
RcConfig cfg = new RcConfig(true, m_tileSize, m_tileSize, RcConfig.CalcBorder(m_agentRadius, m_cellSize),
m_partitionType, m_cellSize, m_cellHeight, m_agentMaxSlope, true, true, true, m_agentHeight, m_agentRadius,
m_agentMaxClimb, m_regionMinArea, m_regionMergeArea, m_edgeMaxLen, m_edgeMaxError, m_vertsPerPoly, true,
m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
RecastBuilderConfig bcfg = new RecastBuilderConfig(cfg, geom.GetMeshBoundsMin(), geom.GetMeshBoundsMax(), x, y);
HeightfieldLayerSet lset = builder.BuildLayers(geom, bcfg);
RcHeightfieldLayerSet lset = builder.BuildLayers(geom, bcfg);
return lset;
}
}

View File

@ -25,7 +25,7 @@ using NUnit.Framework;
namespace DotRecast.Recast.Test;
using static RecastConstants;
using static RcConstants;
[Parallelizable]
public class RecastSoloMeshTest
@ -106,7 +106,7 @@ public class RecastSoloMeshTest
//
// Init build configuration from GUI
RecastConfig cfg = new RecastConfig(partitionType, m_cellSize, m_cellHeight, m_agentHeight, m_agentRadius,
RcConfig cfg = new RcConfig(partitionType, m_cellSize, m_cellHeight, m_agentHeight, m_agentRadius,
m_agentMaxClimb, m_agentMaxSlope, m_regionMinSize, m_regionMergeSize, m_edgeMaxLen, m_edgeMaxError,
m_vertsPerPoly, m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
RecastBuilderConfig bcfg = new RecastBuilderConfig(cfg, bmin, bmax);
@ -115,7 +115,7 @@ public class RecastSoloMeshTest
//
// Allocate voxel heightfield where we rasterize our input data to.
Heightfield m_solid = new Heightfield(bcfg.width, bcfg.height, bcfg.bmin, bcfg.bmax, cfg.cs, cfg.ch, cfg.borderSize);
RcHeightfield m_solid = new RcHeightfield(bcfg.width, bcfg.height, bcfg.bmin, bcfg.bmax, cfg.cs, cfg.ch, cfg.borderSize);
foreach (TriMesh geom in geomProvider.Meshes())
{
@ -155,7 +155,7 @@ public class RecastSoloMeshTest
// Compact the heightfield so that it is faster to handle from now on.
// This will result more cache coherent data as well as the neighbours
// between walkable cells will be calculated.
CompactHeightfield m_chf = RecastCompact.BuildCompactHeightfield(m_ctx, cfg.walkableHeight, cfg.walkableClimb,
RcCompactHeightfield m_chf = RecastCompact.BuildCompactHeightfield(m_ctx, cfg.walkableHeight, cfg.walkableClimb,
m_solid);
// Erode the walkable area by agent radius.
@ -234,8 +234,8 @@ public class RecastSoloMeshTest
//
// Create contours.
ContourSet m_cset = RecastContour.BuildContours(m_ctx, m_chf, cfg.maxSimplificationError, cfg.maxEdgeLen,
RecastConstants.RC_CONTOUR_TESS_WALL_EDGES);
RcContourSet m_cset = RecastContour.BuildContours(m_ctx, m_chf, cfg.maxSimplificationError, cfg.maxEdgeLen,
RcConstants.RC_CONTOUR_TESS_WALL_EDGES);
Assert.That(m_cset.conts.Count, Is.EqualTo(expContours), "Contours");
//
@ -243,7 +243,7 @@ public class RecastSoloMeshTest
//
// Build polygon navmesh from the contours.
PolyMesh m_pmesh = RecastMesh.BuildPolyMesh(m_ctx, m_cset, cfg.maxVertsPerPoly);
RcPolyMesh m_pmesh = RecastMesh.BuildPolyMesh(m_ctx, m_cset, cfg.maxVertsPerPoly);
Assert.That(m_pmesh.nverts, Is.EqualTo(expVerts), "Mesh Verts");
Assert.That(m_pmesh.npolys, Is.EqualTo(expPolys), "Mesh Polys");
@ -252,7 +252,7 @@ public class RecastSoloMeshTest
// on each polygon.
//
PolyMeshDetail m_dmesh = RecastMeshDetail.BuildPolyMeshDetail(m_ctx, m_pmesh, m_chf, cfg.detailSampleDist,
RcPolyMeshDetail m_dmesh = RecastMeshDetail.BuildPolyMeshDetail(m_ctx, m_pmesh, m_chf, cfg.detailSampleDist,
cfg.detailSampleMaxError);
Assert.That(m_dmesh.nmeshes, Is.EqualTo(expDetMeshes), "Mesh Detail Meshes");
Assert.That(m_dmesh.nverts, Is.EqualTo(expDetVerts), "Mesh Detail Verts");
@ -268,7 +268,7 @@ public class RecastSoloMeshTest
}
}
private void SaveObj(string filename, PolyMesh mesh)
private void SaveObj(string filename, RcPolyMesh mesh)
{
try
{
@ -308,7 +308,7 @@ public class RecastSoloMeshTest
}
}
private void SaveObj(string filename, PolyMeshDetail dmesh)
private void SaveObj(string filename, RcPolyMeshDetail dmesh)
{
try
{

View File

@ -20,7 +20,7 @@ using NUnit.Framework;
namespace DotRecast.Recast.Test;
using static RecastConstants;
using static RcConstants;
[Parallelizable]
public class RecastTest

View File

@ -29,7 +29,7 @@ using NUnit.Framework;
namespace DotRecast.Recast.Test;
using static RecastConstants;
using static RcConstants;
[Parallelizable]
public class RecastTileMeshTest
@ -62,7 +62,7 @@ public class RecastTileMeshTest
{
IInputGeomProvider geom = ObjImporter.Load(Loader.ToBytes(filename));
RecastBuilder builder = new RecastBuilder();
RecastConfig cfg = new RecastConfig(true, m_tileSize, m_tileSize, RecastConfig.CalcBorder(m_agentRadius, m_cellSize),
RcConfig cfg = new RcConfig(true, m_tileSize, m_tileSize, RcConfig.CalcBorder(m_agentRadius, m_cellSize),
m_partitionType, m_cellSize, m_cellHeight, m_agentMaxSlope, true, true, true, m_agentHeight, m_agentRadius,
m_agentMaxClimb, m_regionMinArea, m_regionMergeArea, m_edgeMaxLen, m_edgeMaxError, m_vertsPerPoly, true,
m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
@ -97,7 +97,7 @@ public class RecastTileMeshTest
{
IInputGeomProvider geom = ObjImporter.Load(Loader.ToBytes("dungeon.obj"));
RecastBuilder builder = new RecastBuilder();
RecastConfig cfg = new RecastConfig(true, m_tileSize, m_tileSize, RecastConfig.CalcBorder(m_agentRadius, m_cellSize),
RcConfig cfg = new RcConfig(true, m_tileSize, m_tileSize, RcConfig.CalcBorder(m_agentRadius, m_cellSize),
m_partitionType, m_cellSize, m_cellHeight, m_agentMaxSlope, true, true, true, m_agentHeight, m_agentRadius,
m_agentMaxClimb, m_regionMinArea, m_regionMergeArea, m_edgeMaxLen, m_edgeMaxError, m_vertsPerPoly, true,
m_detailSampleDist, m_detailSampleMaxError, SampleAreaModifications.SAMPLE_AREAMOD_GROUND);
@ -124,7 +124,7 @@ public class RecastTileMeshTest
Console.WriteLine(" Time MT : " + (t3 - t2) / TimeSpan.TicksPerMillisecond);
}
private void Build(IInputGeomProvider geom, RecastBuilder builder, RecastConfig cfg, int threads, bool validate)
private void Build(IInputGeomProvider geom, RecastBuilder builder, RcConfig cfg, int threads, bool validate)
{
CancellationTokenSource cts = new CancellationTokenSource();
List<RecastBuilderResult> tiles = new();