This commit is contained in:
ikpil 2023-04-29 13:15:19 +09:00
parent 6ead61661d
commit 25132fbdd5
15 changed files with 66 additions and 66 deletions

View File

@ -49,12 +49,12 @@ namespace DotRecast.Detour.Extras
vMax(ref bmax, data.verts, data.polys[i].verts[j] * 3);
}
it.bmin[0] = clamp((int)((bmin[0] - data.header.bmin[0]) * quantFactor), 0, 0x7fffffff);
it.bmin[1] = clamp((int)((bmin[1] - data.header.bmin[1]) * quantFactor), 0, 0x7fffffff);
it.bmin[2] = clamp((int)((bmin[2] - data.header.bmin[2]) * quantFactor), 0, 0x7fffffff);
it.bmax[0] = clamp((int)((bmax[0] - data.header.bmin[0]) * quantFactor), 0, 0x7fffffff);
it.bmax[1] = clamp((int)((bmax[1] - data.header.bmin[1]) * quantFactor), 0, 0x7fffffff);
it.bmax[2] = clamp((int)((bmax[2] - data.header.bmin[2]) * quantFactor), 0, 0x7fffffff);
it.bmin[0] = clamp((int)((bmin.x - data.header.bmin.x) * quantFactor), 0, 0x7fffffff);
it.bmin[1] = clamp((int)((bmin.y - data.header.bmin.y) * quantFactor), 0, 0x7fffffff);
it.bmin[2] = clamp((int)((bmin.z - data.header.bmin.z) * quantFactor), 0, 0x7fffffff);
it.bmax[0] = clamp((int)((bmax.x - data.header.bmin.x) * quantFactor), 0, 0x7fffffff);
it.bmax[1] = clamp((int)((bmax.y - data.header.bmin.y) * quantFactor), 0, 0x7fffffff);
it.bmax[2] = clamp((int)((bmax.z - data.header.bmin.z) * quantFactor), 0, 0x7fffffff);
}
return NavMeshBuilder.subdivide(items, data.header.polyCount, 0, data.header.polyCount, 0, nodes);

View File

@ -34,9 +34,9 @@ namespace DotRecast.Detour.Extras.Jumplink
seg.gsamples[i] = s;
Vector3f pt = vLerp(seg.p, seg.q, u);
Tuple<bool, float> height = heightFunc.Invoke(pt, seg.height);
s.p[0] = pt[0];
s.p[1] = height.Item2;
s.p[2] = pt[2];
s.p.x = pt.x;
s.p.y = height.Item2;
s.p.z = pt.z;
if (!height.Item1)
{

View File

@ -9,9 +9,9 @@ namespace DotRecast.Detour.Extras.Jumplink
{
return new Vector3f()
{
x = lerp(start[0], end[0], Math.Min(2f * u, 1f)),
y = lerp(start[1], end[1], Math.Max(0f, 2f * u - 1f)),
z = lerp(start[2], end[2], Math.Min(2f * u, 1f))
x = lerp(start.x, end.x, Math.Min(2f * u, 1f)),
y = lerp(start.y, end.y, Math.Max(0f, 2f * u - 1f)),
z = lerp(start.z, end.z, Math.Min(2f * u, 1f))
};
}
}

View File

@ -58,12 +58,12 @@ namespace DotRecast.Detour.Extras.Jumplink
int va = mesh.polys[p + j] * 3;
int vb = mesh.polys[p + nj] * 3;
Edge e = new Edge();
e.sp[0] = orig[0] + mesh.verts[vb] * cs;
e.sp[1] = orig[1] + mesh.verts[vb + 1] * ch;
e.sp[2] = orig[2] + mesh.verts[vb + 2] * cs;
e.sq[0] = orig[0] + mesh.verts[va] * cs;
e.sq[1] = orig[1] + mesh.verts[va + 1] * ch;
e.sq[2] = orig[2] + mesh.verts[va + 2] * cs;
e.sp.x = orig.x + mesh.verts[vb] * cs;
e.sp.y = orig.y + mesh.verts[vb + 1] * ch;
e.sp.z = orig.z + mesh.verts[vb + 2] * cs;
e.sq.x = orig.x + mesh.verts[va] * cs;
e.sq.y = orig.y + mesh.verts[va + 1] * ch;
e.sq.z = orig.z + mesh.verts[va + 2] * cs;
edges.Add(e);
}
}

View File

@ -19,7 +19,7 @@ namespace DotRecast.Detour.Extras.Jumplink
this.trajectory = trajectory;
ax = vSub(edge.sq, edge.sp);
vNormalize(ref ax);
vSet(ref az, ax[2], 0, -ax[0]);
vSet(ref az, ax.z, 0, -ax.x);
vNormalize(ref az);
vSet(ref ay, 0, 1, 0);
}

View File

@ -80,9 +80,9 @@ namespace DotRecast.Detour.Extras.Jumplink
private void vadd(ref Vector3f dest, Vector3f v1, Vector3f v2)
{
dest[0] = v1[0] + v2[0];
dest[1] = v1[1] + v2[1];
dest[2] = v1[2] + v2[2];
dest.x = v1.x + v2.x;
dest.y = v1.y + v2.y;
dest.z = v1.z + v2.z;
}
@ -95,9 +95,9 @@ namespace DotRecast.Detour.Extras.Jumplink
private void trans2d(ref Vector3f dst, Vector3f ax, Vector3f ay, Vector2f pt)
{
dst[0] = ax[0] * pt.x + ay[0] * pt.y;
dst[1] = ax[1] * pt.x + ay[1] * pt.y;
dst[2] = ax[2] * pt.x + ay[2] * pt.y;
dst.x = ax.x * pt.x + ay.x * pt.y;
dst.y = ax.y * pt.x + ay.y * pt.y;
dst.z = ax.z * pt.x + ay.z * pt.y;
}
}

View File

@ -73,14 +73,14 @@ namespace DotRecast.Detour.Extras.Jumplink
{
float u = ((float)j) / (link.nspine - 1);
Vector3f p = es.trajectory.apply(sp, ep, u);
link.spine0[j * 3] = p[0];
link.spine0[j * 3 + 1] = p[1];
link.spine0[j * 3 + 2] = p[2];
link.spine0[j * 3] = p.x;
link.spine0[j * 3 + 1] = p.y;
link.spine0[j * 3 + 2] = p.z;
p = es.trajectory.apply(sq, eq, u);
link.spine1[j * 3] = p[0];
link.spine1[j * 3 + 1] = p[1];
link.spine1[j * 3 + 2] = p[2];
link.spine1[j * 3] = p.x;
link.spine1[j * 3 + 1] = p.y;
link.spine1[j * 3 + 2] = p.z;
}
}
}

View File

@ -94,7 +94,7 @@ namespace DotRecast.Detour.Extras.Jumplink
{
GroundSample p = es.end[j].gsamples[i];
sampleGrid[i][j] = region;
float h = p.p[1];
float h = p.p.y;
if (i < sampleGrid.Length - 1)
{
addNeighbour(es, queue, agentClimb, h, i + 1, j);
@ -121,7 +121,7 @@ namespace DotRecast.Detour.Extras.Jumplink
private void addNeighbour(EdgeSampler es, Queue<int[]> queue, float agentClimb, float h, int i, int j)
{
GroundSample q = es.end[j].gsamples[i];
if (q.validTrajectory && Math.Abs(q.p[1] - h) < agentClimb)
if (q.validTrajectory && Math.Abs(q.p.y - h) < agentClimb)
{
queue.Enqueue(new int[] { i, j });
}

View File

@ -16,9 +16,9 @@ namespace DotRecast.Detour.Extras.Jumplink
{
return new Vector3f
{
x = lerp(start[0], end[0], u),
y = interpolateHeight(start[1], end[1], u),
z = lerp(start[2], end[2], u)
x = lerp(start.x, end.x, u),
y = interpolateHeight(start.y, end.y, u),
z = lerp(start.z, end.z, u)
};
}

View File

@ -73,9 +73,9 @@ namespace DotRecast.Detour.Extras.Jumplink
private Tuple<bool, float> getNavMeshHeight(NavMeshQuery navMeshQuery, Vector3f pt, float cs, float heightRange)
{
Vector3f halfExtents = new Vector3f { x = cs, y = heightRange, z = cs };
float maxHeight = pt[1] + heightRange;
float maxHeight = pt.y + heightRange;
AtomicBoolean found = new AtomicBoolean();
AtomicFloat minHeight = new AtomicFloat(pt[1]);
AtomicFloat minHeight = new AtomicFloat(pt.y);
navMeshQuery.queryPolygons(pt, halfExtents, filter, new PolyQueryInvoker((tile, poly, refs) =>
{
Result<float> h = navMeshQuery.getPolyHeight(refs, pt);
@ -94,7 +94,7 @@ namespace DotRecast.Detour.Extras.Jumplink
return Tuple.Create(true, minHeight.Get());
}
return Tuple.Create(false, pt[1]);
return Tuple.Create(false, pt.y);
}
}
}

View File

@ -35,13 +35,13 @@ namespace DotRecast.Detour.Extras.Jumplink
private bool sampleTrajectory(JumpLinkBuilderConfig acfg, Heightfield solid, Vector3f pa, Vector3f pb, Trajectory tra)
{
float cs = Math.Min(acfg.cellSize, acfg.cellHeight);
float d = vDist2D(pa, pb) + Math.Abs(pa[1] - pb[1]);
float d = vDist2D(pa, pb) + Math.Abs(pa.y - pb.y);
int nsamples = Math.Max(2, (int)Math.Ceiling(d / cs));
for (int i = 0; i < nsamples; ++i)
{
float u = (float)i / (float)(nsamples - 1);
Vector3f p = tra.apply(pa, pb, u);
if (checkHeightfieldCollision(solid, p[0], p[1] + acfg.groundTolerance, p[1] + acfg.agentHeight, p[2]))
if (checkHeightfieldCollision(solid, p.x, p.y + acfg.groundTolerance, p.y + acfg.agentHeight, p.z))
{
return false;
}
@ -57,8 +57,8 @@ namespace DotRecast.Detour.Extras.Jumplink
float cs = solid.cs;
float ch = solid.ch;
Vector3f orig = solid.bmin;
int ix = (int)Math.Floor((x - orig[0]) / cs);
int iz = (int)Math.Floor((z - orig[2]) / cs);
int ix = (int)Math.Floor((x - orig.x) / cs);
int iz = (int)Math.Floor((z - orig.z) / cs);
if (ix < 0 || iz < 0 || ix > w || iz > h)
{
@ -73,8 +73,8 @@ namespace DotRecast.Detour.Extras.Jumplink
while (s != null)
{
float symin = orig[1] + s.smin * ch;
float symax = orig[1] + s.smax * ch;
float symin = orig.y + s.smin * ch;
float symax = orig.y + s.smax * ch;
if (overlapRange(ymin, ymax, symin, symax))
{
return true;

View File

@ -126,15 +126,15 @@ namespace DotRecast.Detour.Extras.Unity.Astar
header.detailMeshCount = nodeCount;
header.detailTriCount = nodeCount;
header.maxLinkCount = nodeCount * 3 * 2; // XXX: Needed by Recast, not needed by recast4j
header.bmin[0] = meta.forcedBoundsCenter.x - 0.5f * meta.forcedBoundsSize.x
header.bmin.x = meta.forcedBoundsCenter.x - 0.5f * meta.forcedBoundsSize.x
+ meta.cellSize * meta.tileSizeX * x;
header.bmin[1] = ymin;
header.bmin[2] = meta.forcedBoundsCenter.z - 0.5f * meta.forcedBoundsSize.z
header.bmin.y = ymin;
header.bmin.z = meta.forcedBoundsCenter.z - 0.5f * meta.forcedBoundsSize.z
+ meta.cellSize * meta.tileSizeZ * z;
header.bmax[0] = meta.forcedBoundsCenter.x - 0.5f * meta.forcedBoundsSize.x
header.bmax.x = meta.forcedBoundsCenter.x - 0.5f * meta.forcedBoundsSize.x
+ meta.cellSize * meta.tileSizeX * (x + 1);
header.bmax[1] = ymax;
header.bmax[2] = meta.forcedBoundsCenter.z - 0.5f * meta.forcedBoundsSize.z
header.bmax.y = ymax;
header.bmax.z = meta.forcedBoundsCenter.z - 0.5f * meta.forcedBoundsSize.z
+ meta.cellSize * meta.tileSizeZ * (z + 1);
header.bvQuantFactor = 1.0f / meta.cellSize;
header.offMeshBase = nodeCount;

View File

@ -63,21 +63,21 @@ namespace DotRecast.Detour.Extras.Unity.Astar
// In case of external link to other tiles we must find the direction
private void buildExternalLink(MeshData tile, Poly node, MeshData neighbourTile)
{
if (neighbourTile.header.bmin[0] > tile.header.bmin[0])
if (neighbourTile.header.bmin.x > tile.header.bmin.x)
{
node.neis[PolyUtils.findEdge(node, tile, neighbourTile.header.bmin[0], 0)] = NavMesh.DT_EXT_LINK;
node.neis[PolyUtils.findEdge(node, tile, neighbourTile.header.bmin.x, 0)] = NavMesh.DT_EXT_LINK;
}
else if (neighbourTile.header.bmin[0] < tile.header.bmin[0])
else if (neighbourTile.header.bmin.x < tile.header.bmin.x)
{
node.neis[PolyUtils.findEdge(node, tile, tile.header.bmin[0], 0)] = NavMesh.DT_EXT_LINK | 4;
node.neis[PolyUtils.findEdge(node, tile, tile.header.bmin.x, 0)] = NavMesh.DT_EXT_LINK | 4;
}
else if (neighbourTile.header.bmin[2] > tile.header.bmin[2])
else if (neighbourTile.header.bmin.z > tile.header.bmin.z)
{
node.neis[PolyUtils.findEdge(node, tile, neighbourTile.header.bmin[2], 2)] = NavMesh.DT_EXT_LINK | 2;
node.neis[PolyUtils.findEdge(node, tile, neighbourTile.header.bmin.z, 2)] = NavMesh.DT_EXT_LINK | 2;
}
else
{
node.neis[PolyUtils.findEdge(node, tile, tile.header.bmin[2], 2)] = NavMesh.DT_EXT_LINK | 6;
node.neis[PolyUtils.findEdge(node, tile, tile.header.bmin.z, 2)] = NavMesh.DT_EXT_LINK | 6;
}
}
}

View File

@ -63,9 +63,9 @@ namespace DotRecast.Detour.Extras.Unity.Astar
option.maxPolys = 32768;
option.tileWidth = graphMeta.tileSizeX * graphMeta.cellSize;
option.tileHeight = graphMeta.tileSizeZ * graphMeta.cellSize;
option.orig[0] = -0.5f * graphMeta.forcedBoundsSize.x + graphMeta.forcedBoundsCenter.x;
option.orig[1] = -0.5f * graphMeta.forcedBoundsSize.y + graphMeta.forcedBoundsCenter.y;
option.orig[2] = -0.5f * graphMeta.forcedBoundsSize.z + graphMeta.forcedBoundsCenter.z;
option.orig.x = -0.5f * graphMeta.forcedBoundsSize.x + graphMeta.forcedBoundsCenter.x;
option.orig.y = -0.5f * graphMeta.forcedBoundsSize.y + graphMeta.forcedBoundsCenter.y;
option.orig.z = -0.5f * graphMeta.forcedBoundsSize.z + graphMeta.forcedBoundsCenter.z;
NavMesh mesh = new NavMesh(option, 3);
foreach (MeshData t in graphMeshData.tiles)
{