forked from mirror/DotRecast
SOH-2 - Span<float> pat = stackalloc float[(DT_MAX_PATTERN_DIVS * DT_MAX_PATTERN_RINGS + 1) * 2];
- https://github.com/ikpil/DotRecast/issues/41
This commit is contained in:
parent
a84d66195e
commit
1e0ef4f5cc
|
@ -19,6 +19,7 @@ freely, subject to the following restrictions:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using DotRecast.Core;
|
using DotRecast.Core;
|
||||||
using DotRecast.Core.Numerics;
|
using DotRecast.Core.Numerics;
|
||||||
|
|
||||||
|
@ -27,11 +28,9 @@ namespace DotRecast.Detour.Crowd
|
||||||
{
|
{
|
||||||
public class DtObstacleAvoidanceQuery
|
public class DtObstacleAvoidanceQuery
|
||||||
{
|
{
|
||||||
public const int DT_MAX_PATTERN_DIVS = 32;
|
public const int DT_MAX_PATTERN_DIVS = 32; // < Max numver of adaptive divs.
|
||||||
|
|
||||||
/// < Max numver of adaptive divs.
|
|
||||||
public const int DT_MAX_PATTERN_RINGS = 4;
|
public const int DT_MAX_PATTERN_RINGS = 4;
|
||||||
|
public const float DT_PI = 3.14159265f;
|
||||||
|
|
||||||
private DtObstacleAvoidanceParams m_params;
|
private DtObstacleAvoidanceParams m_params;
|
||||||
private float m_invHorizTime;
|
private float m_invHorizTime;
|
||||||
|
@ -362,7 +361,8 @@ namespace DotRecast.Detour.Crowd
|
||||||
}
|
}
|
||||||
|
|
||||||
// vector normalization that ignores the y-component.
|
// vector normalization that ignores the y-component.
|
||||||
void DtNormalize2D(float[] v)
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
void DtNormalize2D(Span<float> v)
|
||||||
{
|
{
|
||||||
float d = MathF.Sqrt(v[0] * v[0] + v[2] * v[2]);
|
float d = MathF.Sqrt(v[0] * v[0] + v[2] * v[2]);
|
||||||
if (d == 0)
|
if (d == 0)
|
||||||
|
@ -373,7 +373,8 @@ namespace DotRecast.Detour.Crowd
|
||||||
}
|
}
|
||||||
|
|
||||||
// vector normalization that ignores the y-component.
|
// vector normalization that ignores the y-component.
|
||||||
RcVec3f DtRotate2D(float[] v, float ang)
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
RcVec3f DtRotate2D(Span<float> v, float ang)
|
||||||
{
|
{
|
||||||
RcVec3f dest = new RcVec3f();
|
RcVec3f dest = new RcVec3f();
|
||||||
float c = MathF.Cos(ang);
|
float c = MathF.Cos(ang);
|
||||||
|
@ -384,7 +385,6 @@ namespace DotRecast.Detour.Crowd
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
static readonly float DT_PI = 3.14159265f;
|
|
||||||
|
|
||||||
public int SampleVelocityAdaptive(RcVec3f pos, float rad, float vmax, RcVec3f vel, RcVec3f dvel, out RcVec3f nvel,
|
public int SampleVelocityAdaptive(RcVec3f pos, float rad, float vmax, RcVec3f vel, RcVec3f dvel, out RcVec3f nvel,
|
||||||
DtObstacleAvoidanceParams option,
|
DtObstacleAvoidanceParams option,
|
||||||
|
@ -402,7 +402,7 @@ namespace DotRecast.Detour.Crowd
|
||||||
debug.Reset();
|
debug.Reset();
|
||||||
|
|
||||||
// Build sampling pattern aligned to desired velocity.
|
// Build sampling pattern aligned to desired velocity.
|
||||||
float[] pat = new float[(DT_MAX_PATTERN_DIVS * DT_MAX_PATTERN_RINGS + 1) * 2];
|
Span<float> pat = stackalloc float[(DT_MAX_PATTERN_DIVS * DT_MAX_PATTERN_RINGS + 1) * 2];
|
||||||
int npat = 0;
|
int npat = 0;
|
||||||
|
|
||||||
int ndivs = m_params.adaptiveDivs;
|
int ndivs = m_params.adaptiveDivs;
|
||||||
|
@ -416,7 +416,7 @@ namespace DotRecast.Detour.Crowd
|
||||||
float sa = MathF.Sin(da);
|
float sa = MathF.Sin(da);
|
||||||
|
|
||||||
// desired direction
|
// desired direction
|
||||||
float[] ddir = new float[6];
|
Span<float> ddir = stackalloc float[6];
|
||||||
ddir[0] = dvel.X;
|
ddir[0] = dvel.X;
|
||||||
ddir[1] = dvel.Y;
|
ddir[1] = dvel.Y;
|
||||||
ddir[2] = dvel.Z;
|
ddir[2] = dvel.Z;
|
||||||
|
|
Loading…
Reference in New Issue