refactor: DtPolyTypes

This commit is contained in:
ikpil 2023-10-08 14:32:13 +09:00
parent 31734246b6
commit 78d4591c3c
9 changed files with 35 additions and 32 deletions

View File

@ -40,7 +40,7 @@ namespace DotRecast.Detour.Extras.Unity.Astar
startTile.polys[poly] = new DtPoly(poly, 2);
startTile.polys[poly].verts[0] = startTile.header.vertCount;
startTile.polys[poly].verts[1] = startTile.header.vertCount + 1;
startTile.polys[poly].SetPolyType(DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION);
startTile.polys[poly].SetPolyType(DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION);
startTile.verts = RcArrayUtils.CopyOf(startTile.verts, startTile.verts.Length + 6);
startTile.header.polyCount++;
startTile.header.vertCount += 2;

View File

@ -396,7 +396,7 @@ namespace DotRecast.Detour
{
DtPoly p = tile.data.polys[i];
// Do not return off-mesh connection polygons.
if (p.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (p.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -650,7 +650,7 @@ namespace DotRecast.Detour
DtPoly poly = tile.data.polys[i];
tile.polyLinks[poly.index] = DT_NULL_LINK;
if (poly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (poly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -1227,7 +1227,7 @@ namespace DotRecast.Detour
// Off-mesh connections do not have detail polys and getting height
// over them does not make sense.
if (poly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (poly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
return false;
}
@ -1332,7 +1332,7 @@ namespace DotRecast.Detour
posOverPoly = false;
// Off-mesh connections don't have detail polygons.
if (poly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (poly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
int i = poly.verts[0] * 3;
var v0 = new RcVec3f { x = tile.data.verts[i], y = tile.data.verts[i + 1], z = tile.data.verts[i + 2] };
@ -1547,7 +1547,7 @@ namespace DotRecast.Detour
DtPoly poly = tile.data.polys[ip];
// Make sure that the current poly is indeed off-mesh link.
if (poly.GetPolyType() != DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (poly.GetPolyType() != DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
return DtStatus.DT_FAILURE;
}

View File

@ -487,7 +487,7 @@ namespace DotRecast.Detour
p.vertCount = 0;
p.flags = option.polyFlags[i];
p.SetArea(option.polyAreas[i]);
p.SetPolyType(DtPoly.DT_POLYTYPE_GROUND);
p.SetPolyType(DtPolyTypes.DT_POLYTYPE_GROUND);
for (int j = 0; j < nvp; ++j)
{
if (option.polys[src + j] == MESH_NULL_IDX)
@ -534,7 +534,7 @@ namespace DotRecast.Detour
p.verts[1] = offMeshVertsBase + n * 2 + 1;
p.flags = option.offMeshConFlags[i];
p.SetArea(option.offMeshConAreas[i]);
p.SetPolyType(DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION);
p.SetPolyType(DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION);
n++;
}
}

View File

@ -96,7 +96,7 @@ namespace DotRecast.Detour
{
DtPoly p = tile.data.polys[i];
// Do not return off-mesh connection polygons.
if (p.GetPolyType() != DtPoly.DT_POLYTYPE_GROUND)
if (p.GetPolyType() != DtPolyTypes.DT_POLYTYPE_GROUND)
{
continue;
}
@ -249,7 +249,7 @@ namespace DotRecast.Detour
m_nav.GetTileAndPolyByRefUnsafe(bestRef, out var bestTile, out var bestPoly);
// Place random locations on on ground.
if (bestPoly.GetPolyType() == DtPoly.DT_POLYTYPE_GROUND)
if (bestPoly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_GROUND)
{
// Calc area of the polygon.
float polyArea = 0.0f;
@ -510,7 +510,7 @@ namespace DotRecast.Detour
// We used to return success for offmesh connections, but the
// getPolyHeight in DetourNavMesh does not do this, so special
// case it here.
if (poly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (poly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
int i = poly.verts[0] * 3;
var v0 = new RcVec3f { x = tile.data.verts[i], y = tile.data.verts[i + 1], z = tile.data.verts[i + 2] };
@ -628,7 +628,7 @@ namespace DotRecast.Detour
{
DtPoly p = tile.data.polys[i];
// Do not return off-mesh connection polygons.
if (p.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (p.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -1607,7 +1607,7 @@ namespace DotRecast.Detour
// End of the path.
left = closestEndPos;
right = closestEndPos;
toType = DtPoly.DT_POLYTYPE_GROUND;
toType = DtPolyTypes.DT_POLYTYPE_GROUND;
}
// Right vertex.
@ -1640,7 +1640,7 @@ namespace DotRecast.Detour
{
flags = DtStraightPathFlags.DT_STRAIGHTPATH_END;
}
else if (leftPolyType == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
else if (leftPolyType == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
flags = DtStraightPathFlags.DT_STRAIGHTPATH_OFFMESH_CONNECTION;
}
@ -1696,7 +1696,7 @@ namespace DotRecast.Detour
{
flags = DtStraightPathFlags.DT_STRAIGHTPATH_END;
}
else if (rightPolyType == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
else if (rightPolyType == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
flags = DtStraightPathFlags.DT_STRAIGHTPATH_OFFMESH_CONNECTION;
}
@ -1996,7 +1996,7 @@ namespace DotRecast.Detour
}
// Handle off-mesh connections.
if (fromPoly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (fromPoly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
// Find link that points to first vertex.
for (int i = fromTile.polyLinks[fromPoly.index]; i != DtNavMesh.DT_NULL_LINK; i = fromTile.links[i].next)
@ -2019,7 +2019,7 @@ namespace DotRecast.Detour
return DtStatus.DT_FAILURE | DtStatus.DT_INVALID_PARAM;
}
if (toPoly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (toPoly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
for (int i = toTile.polyLinks[toPoly.index]; i != DtNavMesh.DT_NULL_LINK; i = toTile.links[i].next)
{
@ -2256,7 +2256,7 @@ namespace DotRecast.Detour
m_nav.GetTileAndPolyByRefUnsafe(link.refs, out nextTile, out nextPoly);
// Skip off-mesh connections.
if (nextPoly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (nextPoly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -2839,7 +2839,7 @@ namespace DotRecast.Detour
m_nav.GetTileAndPolyByRefUnsafe(neighbourRef, out var neighbourTile, out var neighbourPoly);
// Skip off-mesh connections.
if (neighbourPoly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (neighbourPoly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -3233,7 +3233,7 @@ namespace DotRecast.Detour
m_nav.GetTileAndPolyByRefUnsafe(neighbourRef, out var neighbourTile, out var neighbourPoly);
// Skip off-mesh connections.
if (neighbourPoly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (neighbourPoly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}

View File

@ -50,7 +50,7 @@ namespace DotRecast.Detour
for (int i = 0; i < tile.data.header.polyCount; ++i)
{
DtPoly p = tile.data.polys[i];
if (p.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (p.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}

View File

@ -23,12 +23,6 @@ namespace DotRecast.Detour
/** Defines a polygon within a MeshTile object. */
public class DtPoly
{
/** The polygon is a standard convex polygon that is part of the surface of the mesh. */
public const int DT_POLYTYPE_GROUND = 0;
/** The polygon is an off-mesh connection consisting of two vertices. */
public const int DT_POLYTYPE_OFFMESH_CONNECTION = 1;
public readonly int index;
/** The indices of the polygon's vertices. The actual vertices are located in MeshTile::verts. */

View File

@ -0,0 +1,9 @@
namespace DotRecast.Detour
{
/// Flags representing the type of a navigation mesh polygon.
public static class DtPolyTypes
{
public const int DT_POLYTYPE_GROUND = 0; // The polygon is a standard convex polygon that is part of the surface of the mesh.
public const int DT_POLYTYPE_OFFMESH_CONNECTION = 1; // The polygon is an off-mesh connection consisting of two vertices.
}
}

View File

@ -124,7 +124,7 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < tile.data.header.polyCount; ++i)
{
DtPoly p = tile.data.polys[i];
if (p.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (p.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -171,7 +171,7 @@ public class RecastDebugDraw : DebugDraw
{
DtPoly p = tile.data.polys[i];
if (p.GetPolyType() != DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (p.GetPolyType() != DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -305,7 +305,7 @@ public class RecastDebugDraw : DebugDraw
{
DtPoly p = tile.data.polys[i];
if (p.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (p.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
continue;
}
@ -1290,7 +1290,7 @@ public class RecastDebugDraw : DebugDraw
int c = DuTransCol(col, 64);
int ip = poly.index;
if (poly.GetPolyType() == DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION)
if (poly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION)
{
DtOffMeshConnection con = tile.data.offMeshCons[ip - tile.data.header.offMeshBase];

View File

@ -64,6 +64,6 @@ public class NavMeshBuilderTest
Assert.That(nmd.polys[118].verts[1], Is.EqualTo(224));
Assert.That(nmd.polys[118].flags, Is.EqualTo(12));
Assert.That(nmd.polys[118].GetArea(), Is.EqualTo(2));
Assert.That(nmd.polys[118].GetPolyType(), Is.EqualTo(DtPoly.DT_POLYTYPE_OFFMESH_CONNECTION));
Assert.That(nmd.polys[118].GetPolyType(), Is.EqualTo(DtPolyTypes.DT_POLYTYPE_OFFMESH_CONNECTION));
}
}