ikpil 2024-05-03 00:19:12 +09:00
parent daf552b4b7
commit 9e9a3f0dc2
3 changed files with 17 additions and 17 deletions

View File

@ -14,7 +14,7 @@ namespace DotRecast.Core.Numerics
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static RcVec3f Create(float[] values, int n)
public static RcVec3f Create(Span<float> values, int n)
{
return new RcVec3f(values[n + 0], values[n + 1], values[n + 2]);
}
@ -63,7 +63,7 @@ namespace DotRecast.Core.Numerics
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Dot2D(this RcVec3f @this, float[] v, int vi)
public static float Dot2D(this RcVec3f @this, Span<float> v, int vi)
{
return @this.X * v[vi] +
@this.Z * v[vi + 2];
@ -262,7 +262,7 @@ namespace DotRecast.Core.Numerics
/// @param[in] v2 The destination vector.
/// @param[in] t The interpolation factor. [Limits: 0 <= value <= 1.0]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static RcVec3f Lerp(float[] verts, int v1, int v2, float t)
public static RcVec3f Lerp(Span<float> verts, int v1, int v2, float t)
{
return new RcVec3f(
verts[v1 + 0] + (verts[v2 + 0] - verts[v1 + 0]) * t,

View File

@ -457,13 +457,13 @@ namespace DotRecast.Detour
}
// Collect vertices.
float[] verts = new float[m_nav.GetMaxVertsPerPoly() * 3];
float[] edged = new float[m_nav.GetMaxVertsPerPoly()];
float[] edget = new float[m_nav.GetMaxVertsPerPoly()];
Span<float> verts = stackalloc float[m_nav.GetMaxVertsPerPoly() * 3];
Span<float> edged = stackalloc float[m_nav.GetMaxVertsPerPoly()];
Span<float> edget = stackalloc float[m_nav.GetMaxVertsPerPoly()];
int nv = poly.vertCount;
for (int i = 0; i < nv; ++i)
{
RcArrays.Copy(tile.data.verts, poly.verts[i] * 3, verts, i * 3, 3);
RcSpans.Copy(tile.data.verts, poly.verts[i] * 3, verts, i * 3, 3);
}
if (DtUtils.DistancePtPolyEdgesSqr(pos, verts, nv, edged, edget))
@ -1822,7 +1822,7 @@ namespace DotRecast.Detour
var searchPos = RcVec3f.Lerp(startPos, endPos, 0.5f);
float searchRadSqr = RcMath.Sqr(RcVec3f.Distance(startPos, endPos) / 2.0f + 0.001f);
float[] verts = new float[m_nav.GetMaxVertsPerPoly() * 3];
Span<float> verts = stackalloc float[m_nav.GetMaxVertsPerPoly() * 3];
const int MAX_NEIS = 8;
Span<long> neis = stackalloc long[MAX_NEIS];
@ -1842,7 +1842,7 @@ namespace DotRecast.Detour
int nverts = curPoly.vertCount;
for (int i = 0; i < nverts; ++i)
{
RcArrays.Copy(curTile.data.verts, curPoly.verts[i] * 3, verts, i * 3, 3);
RcSpans.Copy(curTile.data.verts, curPoly.verts[i] * 3, verts, i * 3, 3);
}
// If target is inside the poly, stop search.
@ -2874,8 +2874,8 @@ namespace DotRecast.Detour
float radiusSqr = RcMath.Sqr(radius);
float[] pa = new float[m_nav.GetMaxVertsPerPoly() * 3];
float[] pb = new float[m_nav.GetMaxVertsPerPoly() * 3];
Span<float> pa = stackalloc float[m_nav.GetMaxVertsPerPoly() * 3];
Span<float> pb = stackalloc float[m_nav.GetMaxVertsPerPoly() * 3];
while (0 < stack.Count)
{
@ -2946,7 +2946,7 @@ namespace DotRecast.Detour
int npa = neighbourPoly.vertCount;
for (int k = 0; k < npa; ++k)
{
RcArrays.Copy(neighbourTile.data.verts, neighbourPoly.verts[k] * 3, pa, k * 3, 3);
RcSpans.Copy(neighbourTile.data.verts, neighbourPoly.verts[k] * 3, pa, k * 3, 3);
}
bool overlap = false;
@ -2977,7 +2977,7 @@ namespace DotRecast.Detour
int npb = pastPoly.vertCount;
for (int k = 0; k < npb; ++k)
{
RcArrays.Copy(pastTile.data.verts, pastPoly.verts[k] * 3, pb, k * 3, 3);
RcSpans.Copy(pastTile.data.verts, pastPoly.verts[k] * 3, pb, k * 3, 3);
}
if (DtUtils.OverlapPolyPoly2D(pa, npa, pb, npb))

View File

@ -97,7 +97,7 @@ namespace DotRecast.Detour
/// @par
///
/// All vertices are projected onto the xz-plane, so the y-values are ignored.
public static bool OverlapPolyPoly2D(float[] polya, int npolya, float[] polyb, int npolyb)
public static bool OverlapPolyPoly2D(Span<float> polya, int npolya, Span<float> polyb, int npolyb)
{
const float eps = 1e-4f;
for (int i = 0, j = npolya - 1; i < npolya; j = i++)
@ -246,7 +246,7 @@ namespace DotRecast.Detour
return false;
}
public static RcVec2f ProjectPoly(RcVec3f axis, float[] poly, int npoly)
public static RcVec2f ProjectPoly(RcVec3f axis, Span<float> poly, int npoly)
{
float rmin, rmax;
rmin = rmax = axis.Dot2D(poly, 0);
@ -286,7 +286,7 @@ namespace DotRecast.Detour
return c;
}
public static bool DistancePtPolyEdgesSqr(RcVec3f pt, float[] verts, int nverts, float[] ed, float[] et)
public static bool DistancePtPolyEdgesSqr(RcVec3f pt, Span<float> verts, int nverts, Span<float> ed, Span<float> et)
{
// TODO: Replace pnpoly with triArea2D tests?
int i, j;
@ -307,7 +307,7 @@ namespace DotRecast.Detour
return c;
}
public static float DistancePtSegSqr2D(RcVec3f pt, float[] verts, int p, int q, out float t)
public static float DistancePtSegSqr2D(RcVec3f pt, Span<float> verts, int p, int q, out float t)
{
var vp = RcVecUtils.Create(verts, p);
var vq = RcVecUtils.Create(verts, q);