012 -> xyz

This commit is contained in:
ikpil 2023-04-29 13:24:26 +09:00
parent 713576c14a
commit da8c66bd1a
22 changed files with 477 additions and 477 deletions

View File

@ -68,9 +68,9 @@ public class TileNavMeshBuilder : AbstractNavMeshBuilder
int vertsPerPoly) int vertsPerPoly)
{ {
NavMeshParams navMeshParams = new NavMeshParams(); NavMeshParams navMeshParams = new NavMeshParams();
navMeshParams.orig[0] = geom.getMeshBoundsMin()[0]; navMeshParams.orig.x = geom.getMeshBoundsMin().x;
navMeshParams.orig[1] = geom.getMeshBoundsMin()[1]; navMeshParams.orig.y = geom.getMeshBoundsMin().y;
navMeshParams.orig[2] = geom.getMeshBoundsMin()[2]; navMeshParams.orig.z = geom.getMeshBoundsMin().z;
navMeshParams.tileWidth = tileSize * cellSize; navMeshParams.tileWidth = tileSize * cellSize;
navMeshParams.tileHeight = tileSize * cellSize; navMeshParams.tileHeight = tileSize * cellSize;
@ -134,4 +134,4 @@ public class TileNavMeshBuilder : AbstractNavMeshBuilder
return meshData; return meshData;
} }
} }

View File

@ -266,11 +266,11 @@ public class DebugDraw
float u = PAD + i * ARC_PTS_SCALE; float u = PAD + i * ARC_PTS_SCALE;
Vector3f pt = new Vector3f(); Vector3f pt = new Vector3f();
evalArc(x0, y0, z0, dx, dy, dz, len * h, u, ref pt); evalArc(x0, y0, z0, dx, dy, dz, len * h, u, ref pt);
vertex(prev[0], prev[1], prev[2], col); vertex(prev.x, prev.y, prev.z, col);
vertex(pt[0], pt[1], pt[2], col); vertex(pt.x, pt.y, pt.z, col);
prev[0] = pt[0]; prev.x = pt.x;
prev[1] = pt[1]; prev.y = pt.y;
prev[2] = pt[2]; prev.z = pt.z;
} }
// End arrows // End arrows
@ -295,9 +295,9 @@ public class DebugDraw
private void evalArc(float x0, float y0, float z0, float dx, float dy, float dz, float h, float u, ref Vector3f res) private void evalArc(float x0, float y0, float z0, float dx, float dy, float dz, float h, float u, ref Vector3f res)
{ {
res[0] = x0 + dx * u; res.x = x0 + dx * u;
res[1] = y0 + dy * u + h * (1 - (u * 2 - 1) * (u * 2 - 1)); res.y = y0 + dy * u + h * (1 - (u * 2 - 1) * (u * 2 - 1));
res[2] = z0 + dz * u; res.z = z0 + dz * u;
} }
public void debugDrawCross(float x, float y, float z, float size, int col, float lineWidth) public void debugDrawCross(float x, float y, float z, float size, int col, float lineWidth)
@ -410,41 +410,41 @@ public class DebugDraw
vnormalize(ref ay); vnormalize(ref ay);
vertex(p, col); vertex(p, col);
// vertex(p[0]+az[0]*s+ay[0]*s/2, p[1]+az[1]*s+ay[1]*s/2, p[2]+az[2]*s+ay[2]*s/2, col); // vertex(p.x+az.x*s+ay.x*s/2, p.y+az.y*s+ay.y*s/2, p.z+az.z*s+ay.z*s/2, col);
vertex(p[0] + az[0] * s + ax[0] * s / 3, p[1] + az[1] * s + ax[1] * s / 3, p[2] + az[2] * s + ax[2] * s / 3, col); vertex(p.x + az.x * s + ax.x * s / 3, p.y + az.y * s + ax.y * s / 3, p.z + az.z * s + ax.z * s / 3, col);
vertex(p, col); vertex(p, col);
// vertex(p[0]+az[0]*s-ay[0]*s/2, p[1]+az[1]*s-ay[1]*s/2, p[2]+az[2]*s-ay[2]*s/2, col); // vertex(p.x+az.x*s-ay.x*s/2, p.y+az.y*s-ay.y*s/2, p.z+az.z*s-ay.z*s/2, col);
vertex(p[0] + az[0] * s - ax[0] * s / 3, p[1] + az[1] * s - ax[1] * s / 3, p[2] + az[2] * s - ax[2] * s / 3, col); vertex(p.x + az.x * s - ax.x * s / 3, p.y + az.y * s - ax.y * s / 3, p.z + az.z * s - ax.z * s / 3, col);
} }
public void vcross(ref Vector3f dest, Vector3f v1, Vector3f v2) public void vcross(ref Vector3f dest, Vector3f v1, Vector3f v2)
{ {
dest[0] = v1[1] * v2[2] - v1[2] * v2[1]; dest.x = v1.y * v2.z - v1.z * v2.y;
dest[1] = v1[2] * v2[0] - v1[0] * v2[2]; dest.y = v1.z * v2.x - v1.x * v2.z;
dest[2] = v1[0] * v2[1] - v1[1] * v2[0]; dest.z = v1.x * v2.y - v1.y * v2.x;
} }
public void vnormalize(ref Vector3f v) public void vnormalize(ref Vector3f v)
{ {
float d = (float)(1.0f / Math.Sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2])); float d = (float)(1.0f / Math.Sqrt(v.x * v.x + v.y * v.y + v.z * v.z));
v[0] *= d; v.x *= d;
v[1] *= d; v.y *= d;
v[2] *= d; v.z *= d;
} }
public void vsub(ref Vector3f dest, Vector3f v1, Vector3f v2) public void vsub(ref Vector3f dest, Vector3f v1, Vector3f v2)
{ {
dest[0] = v1[0] - v2[0]; dest.x = v1.x - v2.x;
dest[1] = v1[1] - v2[1]; dest.y = v1.y - v2.y;
dest[2] = v1[2] - v2[2]; dest.z = v1.z - v2.z;
} }
public float vdistSqr(Vector3f v1, Vector3f v2) public float vdistSqr(Vector3f v1, Vector3f v2)
{ {
float x = v1[0] - v2[0]; float x = v1.x - v2.x;
float y = v1[1] - v2[1]; float y = v1.y - v2.y;
float z = v1[2] - v2[2]; float z = v1.z - v2.z;
return x * x + y * y + z * z; return x * x + y * y + z * z;
} }
@ -595,9 +595,9 @@ public class DebugDraw
float[] r = GLU.mul(rx, ry); float[] r = GLU.mul(rx, ry);
float[] t = new float[16]; float[] t = new float[16];
t[0] = t[5] = t[10] = t[15] = 1; t[0] = t[5] = t[10] = t[15] = 1;
t[12] = -cameraPos[0]; t[12] = -cameraPos.x;
t[13] = -cameraPos[1]; t[13] = -cameraPos.y;
t[14] = -cameraPos[2]; t[14] = -cameraPos.z;
_viewMatrix = GLU.mul(r, t); _viewMatrix = GLU.mul(r, t);
getOpenGlDraw().viewMatrix(_viewMatrix); getOpenGlDraw().viewMatrix(_viewMatrix);
updateFrustum(); updateFrustum();
@ -701,6 +701,6 @@ public class DebugDraw
public bool frustumTest(Vector3f bmin, Vector3f bmax) public bool frustumTest(Vector3f bmin, Vector3f bmax)
{ {
return frustumTest(new float[] { bmin[0], bmin[1], bmin[2], bmax[0], bmax[1], bmax[2] }); return frustumTest(new float[] { bmin.x, bmin.y, bmin.z, bmax.x, bmax.y, bmax.z });
} }
} }

View File

@ -88,9 +88,9 @@ public class GLU
if (@out[3] == 0.0) if (@out[3] == 0.0)
return 0; return 0;
@out[3] = 1.0f / @out[3]; @out[3] = 1.0f / @out[3];
objectCoordinate[0] = @out[0] * @out[3]; objectCoordinate.x = @out[0] * @out[3];
objectCoordinate[1] = @out[1] * @out[3]; objectCoordinate.y = @out[1] * @out[3];
objectCoordinate[2] = @out[2] * @out[3]; objectCoordinate.z = @out[2] * @out[3];
return 1; return 1;
} }
@ -447,4 +447,4 @@ public class GLU
return dest; return dest;
} }
} }

View File

@ -202,10 +202,10 @@ public class NavMeshRenderer
// Draw bounds // Draw bounds
Vector3f bmin = geom.getMeshBoundsMin(); Vector3f bmin = geom.getMeshBoundsMin();
Vector3f bmax = geom.getMeshBoundsMax(); Vector3f bmax = geom.getMeshBoundsMax();
debugDraw.debugDrawBoxWire(bmin[0], bmin[1], bmin[2], bmax[0], bmax[1], bmax[2], debugDraw.debugDrawBoxWire(bmin.x, bmin.y, bmin.z, bmax.x, bmax.y, bmax.z,
DebugDraw.duRGBA(255, 255, 255, 128), 1.0f); DebugDraw.duRGBA(255, 255, 255, 128), 1.0f);
debugDraw.begin(DebugDrawPrimitives.POINTS, 5.0f); debugDraw.begin(DebugDrawPrimitives.POINTS, 5.0f);
debugDraw.vertex(bmin[0], bmin[1], bmin[2], DebugDraw.duRGBA(255, 255, 255, 128)); debugDraw.vertex(bmin.x, bmin.y, bmin.z, DebugDraw.duRGBA(255, 255, 255, 128));
debugDraw.end(); debugDraw.end();
} }
@ -254,16 +254,16 @@ public class NavMeshRenderer
var vb = Vector3f.Of(vol.verts[j], vol.verts[j + 1], vol.verts[j + 2]); var vb = Vector3f.Of(vol.verts[j], vol.verts[j + 1], vol.verts[j + 2]);
debugDraw.vertex(vol.verts[0], vol.hmax, vol.verts[2], col); debugDraw.vertex(vol.verts[0], vol.hmax, vol.verts[2], col);
debugDraw.vertex(vb[0], vol.hmax, vb[2], col); debugDraw.vertex(vb.x, vol.hmax, vb.z, col);
debugDraw.vertex(va[0], vol.hmax, va[2], col); debugDraw.vertex(va.x, vol.hmax, va.z, col);
debugDraw.vertex(va[0], vol.hmin, va[2], DebugDraw.duDarkenCol(col)); debugDraw.vertex(va.x, vol.hmin, va.z, DebugDraw.duDarkenCol(col));
debugDraw.vertex(va[0], vol.hmax, va[2], col); debugDraw.vertex(va.x, vol.hmax, va.z, col);
debugDraw.vertex(vb[0], vol.hmax, vb[2], col); debugDraw.vertex(vb.x, vol.hmax, vb.z, col);
debugDraw.vertex(va[0], vol.hmin, va[2], DebugDraw.duDarkenCol(col)); debugDraw.vertex(va.x, vol.hmin, va.z, DebugDraw.duDarkenCol(col));
debugDraw.vertex(vb[0], vol.hmax, vb[2], col); debugDraw.vertex(vb.x, vol.hmax, vb.z, col);
debugDraw.vertex(vb[0], vol.hmin, vb[2], DebugDraw.duDarkenCol(col)); debugDraw.vertex(vb.x, vol.hmin, vb.z, DebugDraw.duDarkenCol(col));
} }
} }
@ -277,12 +277,12 @@ public class NavMeshRenderer
{ {
var va = Vector3f.Of(vol.verts[k], vol.verts[k + 1], vol.verts[k + 2]); var va = Vector3f.Of(vol.verts[k], vol.verts[k + 1], vol.verts[k + 2]);
var vb = Vector3f.Of(vol.verts[j], vol.verts[j + 1], vol.verts[j + 2]); var vb = Vector3f.Of(vol.verts[j], vol.verts[j + 1], vol.verts[j + 2]);
debugDraw.vertex(va[0], vol.hmin, va[2], DebugDraw.duDarkenCol(col)); debugDraw.vertex(va.x, vol.hmin, va.z, DebugDraw.duDarkenCol(col));
debugDraw.vertex(vb[0], vol.hmin, vb[2], DebugDraw.duDarkenCol(col)); debugDraw.vertex(vb.x, vol.hmin, vb.z, DebugDraw.duDarkenCol(col));
debugDraw.vertex(va[0], vol.hmax, va[2], col); debugDraw.vertex(va.x, vol.hmax, va.z, col);
debugDraw.vertex(vb[0], vol.hmax, vb[2], col); debugDraw.vertex(vb.x, vol.hmax, vb.z, col);
debugDraw.vertex(va[0], vol.hmin, va[2], DebugDraw.duDarkenCol(col)); debugDraw.vertex(va.x, vol.hmin, va.z, DebugDraw.duDarkenCol(col));
debugDraw.vertex(va[0], vol.hmax, va[2], col); debugDraw.vertex(va.x, vol.hmax, va.z, col);
} }
} }
@ -305,4 +305,4 @@ public class NavMeshRenderer
debugDraw.depthMask(true); debugDraw.depthMask(true);
} }
} }

View File

@ -16,7 +16,7 @@ public struct OpenGLVertex
[FieldOffset(20)] private readonly int color; [FieldOffset(20)] private readonly int color;
public OpenGLVertex(Vector3f pos, Vector2f uv, int color) : public OpenGLVertex(Vector3f pos, Vector2f uv, int color) :
this(pos[0], pos[1], pos[2], uv.x, uv.y, color) this(pos.x, pos.y, pos.z, uv.x, uv.y, color)
{ {
} }
@ -26,7 +26,7 @@ public struct OpenGLVertex
} }
public OpenGLVertex(Vector3f pos, int color) : public OpenGLVertex(Vector3f pos, int color) :
this(pos[0], pos[1], pos[2], 0f, 0f, color) this(pos.x, pos.y, pos.z, 0f, 0f, color)
{ {
} }
@ -62,4 +62,4 @@ public struct OpenGLVertex
writer.Write(v); writer.Write(v);
writer.Write(color); writer.Write(color);
} }
} }

View File

@ -57,8 +57,8 @@ public class RecastDebugDraw : DebugDraw
Vector3f norm = Vector3f.Of(normals[i], normals[i + 1], normals[i + 2]); Vector3f norm = Vector3f.Of(normals[i], normals[i + 1], normals[i + 2]);
int color; int color;
char a = (char)(220 * (2 + norm[0] + norm[1]) / 4); char a = (char)(220 * (2 + norm.x + norm.y) / 4);
if (norm[1] < walkableThr) if (norm.y < walkableThr)
{ {
color = duLerpCol(duRGBA(a, a, a, 255), unwalkable, 64); color = duLerpCol(duRGBA(a, a, a, 255), unwalkable, 64);
} }
@ -72,12 +72,12 @@ public class RecastDebugDraw : DebugDraw
Vector3f vc = Vector3f.Of(verts[tris[i + 2] * 3], verts[tris[i + 2] * 3 + 1], verts[tris[i + 2] * 3 + 2]); Vector3f vc = Vector3f.Of(verts[tris[i + 2] * 3], verts[tris[i + 2] * 3 + 1], verts[tris[i + 2] * 3 + 2]);
int ax = 0, ay = 0; int ax = 0, ay = 0;
if (Math.Abs(norm[1]) > Math.Abs(norm[ax])) if (Math.Abs(norm.y) > Math.Abs(norm[ax]))
{ {
ax = 1; ax = 1;
} }
if (Math.Abs(norm[2]) > Math.Abs(norm[ax])) if (Math.Abs(norm.z) > Math.Abs(norm[ax]))
{ {
ax = 2; ax = 2;
} }
@ -215,12 +215,12 @@ public class RecastDebugDraw : DebugDraw
} }
// End points and their on-mesh locations. // End points and their on-mesh locations.
vertex(va[0], va[1], va[2], col); vertex(va.x, va.y, va.z, col);
vertex(con.pos[0], con.pos[1], con.pos[2], col); vertex(con.pos[0], con.pos[1], con.pos[2], col);
col2 = startSet ? col : duRGBA(220, 32, 16, 196); col2 = startSet ? col : duRGBA(220, 32, 16, 196);
appendCircle(con.pos[0], con.pos[1] + 0.1f, con.pos[2], con.rad, col2); appendCircle(con.pos[0], con.pos[1] + 0.1f, con.pos[2], con.rad, col2);
vertex(vb[0], vb[1], vb[2], col); vertex(vb.x, vb.y, vb.z, col);
vertex(con.pos[3], con.pos[4], con.pos[5], col); vertex(con.pos[3], con.pos[4], con.pos[5], col);
col2 = endSet ? col : duRGBA(220, 32, 16, 196); col2 = endSet ? col : duRGBA(220, 32, 16, 196);
appendCircle(con.pos[3], con.pos[4] + 0.1f, con.pos[5], con.rad, col2); appendCircle(con.pos[3], con.pos[4] + 0.1f, con.pos[5], con.rad, col2);
@ -426,10 +426,10 @@ public class RecastDebugDraw : DebugDraw
static float distancePtLine2d(Vector3f pt, Vector3f p, Vector3f q) static float distancePtLine2d(Vector3f pt, Vector3f p, Vector3f q)
{ {
float pqx = q[0] - p[0]; float pqx = q.x - p.x;
float pqz = q[2] - p[2]; float pqz = q.z - p.z;
float dx = pt[0] - p[0]; float dx = pt.x - p.x;
float dz = pt[2] - p[2]; float dz = pt.z - p.z;
float d = pqx * pqx + pqz * pqz; float d = pqx * pqx + pqz * pqz;
float t = pqx * dx + pqz * dz; float t = pqx * dx + pqz * dz;
if (d != 0) if (d != 0)
@ -437,8 +437,8 @@ public class RecastDebugDraw : DebugDraw
t /= d; t /= d;
} }
dx = p[0] + t * pqx - pt[0]; dx = p.x + t * pqx - pt.x;
dz = p[2] + t * pqz - pt[2]; dz = p.z + t * pqz - pt.z;
return dx * dx + dz * dz; return dx * dx + dz * dz;
} }
@ -467,9 +467,9 @@ public class RecastDebugDraw : DebugDraw
continue; continue;
} }
appendBoxWire(tile.data.header.bmin[0] + n.bmin[0] * cs, tile.data.header.bmin[1] + n.bmin[1] * cs, appendBoxWire(tile.data.header.bmin.x + n.bmin[0] * cs, tile.data.header.bmin.y + n.bmin[1] * cs,
tile.data.header.bmin[2] + n.bmin[2] * cs, tile.data.header.bmin[0] + n.bmax[0] * cs, tile.data.header.bmin.z + n.bmin[2] * cs, tile.data.header.bmin.x + n.bmax[0] * cs,
tile.data.header.bmin[1] + n.bmax[1] * cs, tile.data.header.bmin[2] + n.bmax[2] * cs, tile.data.header.bmin.y + n.bmax[1] * cs, tile.data.header.bmin.z + n.bmax[2] * cs,
duRGBA(255, 255, 255, 128)); duRGBA(255, 255, 255, 128));
} }
@ -487,8 +487,8 @@ public class RecastDebugDraw : DebugDraw
{ {
for (int x = 0; x < chf.width; ++x) for (int x = 0; x < chf.width; ++x)
{ {
float fx = chf.bmin[0] + x * cs; float fx = chf.bmin.x + x * cs;
float fz = chf.bmin[2] + y * cs; float fz = chf.bmin.z + y * cs;
CompactCell c = chf.cells[x + y * chf.width]; CompactCell c = chf.cells[x + y * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i) for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
@ -510,7 +510,7 @@ public class RecastDebugDraw : DebugDraw
color = areaToCol(area); color = areaToCol(area);
} }
float fy = chf.bmin[1] + (s.y + 1) * ch; float fy = chf.bmin.y + (s.y + 1) * ch;
vertex(fx, fy, fz, color); vertex(fx, fy, fz, color);
vertex(fx, fy, fz + cs, color); vertex(fx, fy, fz + cs, color);
vertex(fx + cs, fy, fz + cs, color); vertex(fx + cs, fy, fz + cs, color);
@ -550,7 +550,7 @@ public class RecastDebugDraw : DebugDraw
if (cont2 != null) if (cont2 != null)
{ {
Vector3f pos2 = getContourCenter(cont2, orig, cs, ch); Vector3f pos2 = getContourCenter(cont2, orig, cs, ch);
appendArc(pos[0], pos[1], pos[2], pos2[0], pos2[1], pos2[2], 0.25f, 0.6f, 0.6f, color); appendArc(pos.x, pos.y, pos.z, pos2.x, pos2.y, pos2.z, 0.25f, 0.6f, 0.6f, color);
} }
} }
} }
@ -575,9 +575,9 @@ public class RecastDebugDraw : DebugDraw
private Vector3f getContourCenter(Contour cont, Vector3f orig, float cs, float ch) private Vector3f getContourCenter(Contour cont, Vector3f orig, float cs, float ch)
{ {
Vector3f center = new Vector3f(); Vector3f center = new Vector3f();
center[0] = 0; center.x = 0;
center[1] = 0; center.y = 0;
center[2] = 0; center.z = 0;
if (cont.nverts == 0) if (cont.nverts == 0)
{ {
return center; return center;
@ -586,18 +586,18 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < cont.nverts; ++i) for (int i = 0; i < cont.nverts; ++i)
{ {
int v = i * 4; int v = i * 4;
center[0] += cont.verts[v + 0]; center.x += cont.verts[v + 0];
center[1] += cont.verts[v + 1]; center.y += cont.verts[v + 1];
center[2] += cont.verts[v + 2]; center.z += cont.verts[v + 2];
} }
float s = 1.0f / cont.nverts; float s = 1.0f / cont.nverts;
center[0] *= s * cs; center.x *= s * cs;
center[1] *= s * ch; center.y *= s * ch;
center[2] *= s * cs; center.z *= s * cs;
center[0] += orig[0]; center.x += orig.x;
center[1] += orig[1] + 4 * ch; center.y += orig.y + 4 * ch;
center[2] += orig[2]; center.z += orig.z;
return center; return center;
} }
@ -634,9 +634,9 @@ public class RecastDebugDraw : DebugDraw
int v0 = c.rverts[j * 4]; int v0 = c.rverts[j * 4];
int v1 = c.rverts[j * 4 + 1]; int v1 = c.rverts[j * 4 + 1];
int v2 = c.rverts[j * 4 + 2]; int v2 = c.rverts[j * 4 + 2];
float fx = orig[0] + v0 * cs; float fx = orig.x + v0 * cs;
float fy = orig[1] + (v1 + 1 + (i & 1)) * ch; float fy = orig.y + (v1 + 1 + (i & 1)) * ch;
float fz = orig[2] + v2 * cs; float fz = orig.z + v2 * cs;
vertex(fx, fy, fz, color); vertex(fx, fy, fz, color);
if (j > 0) if (j > 0)
{ {
@ -649,9 +649,9 @@ public class RecastDebugDraw : DebugDraw
int v0 = c.rverts[0]; int v0 = c.rverts[0];
int v1 = c.rverts[1]; int v1 = c.rverts[1];
int v2 = c.rverts[2]; int v2 = c.rverts[2];
float fx = orig[0] + v0 * cs; float fx = orig.x + v0 * cs;
float fy = orig[1] + (v1 + 1 + (i & 1)) * ch; float fy = orig.y + (v1 + 1 + (i & 1)) * ch;
float fz = orig[2] + v2 * cs; float fz = orig.z + v2 * cs;
vertex(fx, fy, fz, color); vertex(fx, fy, fz, color);
} }
} }
@ -679,9 +679,9 @@ public class RecastDebugDraw : DebugDraw
off = ch * 2; off = ch * 2;
} }
float fx = orig[0] + v0 * cs; float fx = orig.x + v0 * cs;
float fy = orig[1] + (v1 + 1 + (i & 1)) * ch + off; float fy = orig.y + (v1 + 1 + (i & 1)) * ch + off;
float fz = orig[2] + v2 * cs; float fz = orig.z + v2 * cs;
vertex(fx, fy, fz, colv); vertex(fx, fy, fz, colv);
} }
} }
@ -722,14 +722,14 @@ public class RecastDebugDraw : DebugDraw
int vb2 = c.verts[j * 4 + 2]; int vb2 = c.verts[j * 4 + 2];
int col = (va3 & RecastConstants.RC_AREA_BORDER) != 0 ? bcolor : color; int col = (va3 & RecastConstants.RC_AREA_BORDER) != 0 ? bcolor : color;
float fx = orig[0] + va0 * cs; float fx = orig.x + va0 * cs;
float fy = orig[1] + (va1 + 1 + (i & 1)) * ch; float fy = orig.y + (va1 + 1 + (i & 1)) * ch;
float fz = orig[2] + va2 * cs; float fz = orig.z + va2 * cs;
vertex(fx, fy, fz, col); vertex(fx, fy, fz, col);
fx = orig[0] + vb0 * cs; fx = orig.x + vb0 * cs;
fy = orig[1] + (vb1 + 1 + (i & 1)) * ch; fy = orig.y + (vb1 + 1 + (i & 1)) * ch;
fz = orig[2] + vb2 * cs; fz = orig.z + vb2 * cs;
vertex(fx, fy, fz, col); vertex(fx, fy, fz, col);
} }
} }
@ -757,9 +757,9 @@ public class RecastDebugDraw : DebugDraw
off = ch * 2; off = ch * 2;
} }
float fx = orig[0] + v0 * cs; float fx = orig.x + v0 * cs;
float fy = orig[1] + (v1 + 1 + (i & 1)) * ch + off; float fy = orig.y + (v1 + 1 + (i & 1)) * ch + off;
float fz = orig[2] + v2 * cs; float fz = orig.z + v2 * cs;
vertex(fx, fy, fz, colv); vertex(fx, fy, fz, colv);
} }
} }
@ -790,12 +790,12 @@ public class RecastDebugDraw : DebugDraw
{ {
for (int x = 0; x < w; ++x) for (int x = 0; x < w; ++x)
{ {
float fx = orig[0] + x * cs; float fx = orig.x + x * cs;
float fz = orig[2] + y * cs; float fz = orig.z + y * cs;
Span s = hf.spans[x + y * w]; Span s = hf.spans[x + y * w];
while (s != null) while (s != null)
{ {
appendBox(fx, orig[1] + s.smin * ch, fz, fx + cs, orig[1] + s.smax * ch, fz + cs, fcol); appendBox(fx, orig.y + s.smin * ch, fz, fx + cs, orig.y + s.smax * ch, fz + cs, fcol);
s = s.next; s = s.next;
} }
} }
@ -822,8 +822,8 @@ public class RecastDebugDraw : DebugDraw
{ {
for (int x = 0; x < w; ++x) for (int x = 0; x < w; ++x)
{ {
float fx = orig[0] + x * cs; float fx = orig.x + x * cs;
float fz = orig[2] + y * cs; float fz = orig.z + y * cs;
Span s = hf.spans[x + y * w]; Span s = hf.spans[x + y * w];
while (s != null) while (s != null)
{ {
@ -840,7 +840,7 @@ public class RecastDebugDraw : DebugDraw
fcol[0] = duMultCol(areaToCol(s.area), 200); fcol[0] = duMultCol(areaToCol(s.area), 200);
} }
appendBox(fx, orig[1] + s.smin * ch, fz, fx + cs, orig[1] + s.smax * ch, fz + cs, fcol); appendBox(fx, orig.y + s.smin * ch, fz, fx + cs, orig.y + s.smax * ch, fz + cs, fcol);
s = s.next; s = s.next;
} }
} }
@ -860,14 +860,14 @@ public class RecastDebugDraw : DebugDraw
{ {
for (int x = 0; x < chf.width; ++x) for (int x = 0; x < chf.width; ++x)
{ {
float fx = chf.bmin[0] + x * cs; float fx = chf.bmin.x + x * cs;
float fz = chf.bmin[2] + y * cs; float fz = chf.bmin.z + y * cs;
CompactCell c = chf.cells[x + y * chf.width]; CompactCell c = chf.cells[x + y * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i) for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{ {
CompactSpan s = chf.spans[i]; CompactSpan s = chf.spans[i];
float fy = chf.bmin[1] + (s.y) * ch; float fy = chf.bmin.y + (s.y) * ch;
int color; int color;
if (s.reg != 0) if (s.reg != 0)
{ {
@ -913,14 +913,14 @@ public class RecastDebugDraw : DebugDraw
{ {
for (int x = 0; x < chf.width; ++x) for (int x = 0; x < chf.width; ++x)
{ {
float fx = chf.bmin[0] + x * cs; float fx = chf.bmin.x + x * cs;
float fz = chf.bmin[2] + y * cs; float fz = chf.bmin.z + y * cs;
CompactCell c = chf.cells[x + y * chf.width]; CompactCell c = chf.cells[x + y * chf.width];
for (int i = c.index, ni = c.index + c.count; i < ni; ++i) for (int i = c.index, ni = c.index + c.count; i < ni; ++i)
{ {
CompactSpan s = chf.spans[i]; CompactSpan s = chf.spans[i];
float fy = chf.bmin[1] + (s.y + 1) * ch; float fy = chf.bmin.y + (s.y + 1) * ch;
char cd = (char)(chf.dist[i] * dscale); char cd = (char)(chf.dist[i] * dscale);
int color = duRGBA(cd, cd, cd, 255); int color = duRGBA(cd, cd, cd, 255);
vertex(fx, fy, fz, color); vertex(fx, fy, fz, color);
@ -978,9 +978,9 @@ public class RecastDebugDraw : DebugDraw
int v0 = mesh.verts[vi[k] * 3]; int v0 = mesh.verts[vi[k] * 3];
int v1 = mesh.verts[vi[k] * 3 + 1]; int v1 = mesh.verts[vi[k] * 3 + 1];
int v2 = mesh.verts[vi[k] * 3 + 2]; int v2 = mesh.verts[vi[k] * 3 + 2];
float x = orig[0] + v0 * cs; float x = orig.x + v0 * cs;
float y = orig[1] + (v1 + 1) * ch; float y = orig.y + (v1 + 1) * ch;
float z = orig[2] + v2 * cs; float z = orig.z + v2 * cs;
vertex(x, y, z, color); vertex(x, y, z, color);
} }
} }
@ -1012,9 +1012,9 @@ public class RecastDebugDraw : DebugDraw
for (int k = 0; k < 2; ++k) for (int k = 0; k < 2; ++k)
{ {
int v = vi[k] * 3; int v = vi[k] * 3;
float x = orig[0] + mesh.verts[v] * cs; float x = orig.x + mesh.verts[v] * cs;
float y = orig[1] + (mesh.verts[v + 1] + 1) * ch + 0.1f; float y = orig.y + (mesh.verts[v + 1] + 1) * ch + 0.1f;
float z = orig[2] + mesh.verts[v + 2] * cs; float z = orig.z + mesh.verts[v + 2] * cs;
vertex(x, y, z, coln); vertex(x, y, z, coln);
} }
} }
@ -1052,9 +1052,9 @@ public class RecastDebugDraw : DebugDraw
for (int k = 0; k < 2; ++k) for (int k = 0; k < 2; ++k)
{ {
int v = vi[k] * 3; int v = vi[k] * 3;
float x = orig[0] + mesh.verts[v] * cs; float x = orig.x + mesh.verts[v] * cs;
float y = orig[1] + (mesh.verts[v + 1] + 1) * ch + 0.1f; float y = orig.y + (mesh.verts[v + 1] + 1) * ch + 0.1f;
float z = orig[2] + mesh.verts[v + 2] * cs; float z = orig.z + mesh.verts[v + 2] * cs;
vertex(x, y, z, col); vertex(x, y, z, col);
} }
} }
@ -1067,9 +1067,9 @@ public class RecastDebugDraw : DebugDraw
for (int i = 0; i < mesh.nverts; ++i) for (int i = 0; i < mesh.nverts; ++i)
{ {
int v = i * 3; int v = i * 3;
float x = orig[0] + mesh.verts[v] * cs; float x = orig.x + mesh.verts[v] * cs;
float y = orig[1] + (mesh.verts[v + 1] + 1) * ch + 0.1f; float y = orig.y + (mesh.verts[v + 1] + 1) * ch + 0.1f;
float z = orig[2] + mesh.verts[v + 2] * cs; float z = orig.z + mesh.verts[v + 2] * cs;
vertex(x, y, z, colv); vertex(x, y, z, colv);
} }
@ -1213,7 +1213,7 @@ public class RecastDebugDraw : DebugDraw
continue; continue;
} }
vertex(node.pos[0], node.pos[1] + off, node.pos[2], duRGBA(255, 192, 0, 255)); vertex(node.pos.x, node.pos.y + off, node.pos.z, duRGBA(255, 192, 0, 255));
} }
} }
@ -1240,8 +1240,8 @@ public class RecastDebugDraw : DebugDraw
continue; continue;
} }
vertex(node.pos[0], node.pos[1] + off, node.pos[2], duRGBA(255, 192, 0, 128)); vertex(node.pos.x, node.pos.y + off, node.pos.z, duRGBA(255, 192, 0, 128));
vertex(parent.pos[0], parent.pos[1] + off, parent.pos[2], duRGBA(255, 192, 0, 128)); vertex(parent.pos.x, parent.pos.y + off, parent.pos.z, duRGBA(255, 192, 0, 128));
} }
} }
@ -1368,37 +1368,37 @@ public class RecastDebugDraw : DebugDraw
{ {
int col = side == 0 ? duRGBA(128, 0, 0, 128) : duRGBA(128, 0, 128, 128); int col = side == 0 ? duRGBA(128, 0, 0, 128) : duRGBA(128, 0, 128, 128);
float x = va[0] + ((side == 0) ? -padx : padx); float x = va.x + ((side == 0) ? -padx : padx);
vertex(x, va[1] - pady, va[2], col); vertex(x, va.y - pady, va.z, col);
vertex(x, va[1] + pady, va[2], col); vertex(x, va.y + pady, va.z, col);
vertex(x, va[1] + pady, va[2], col); vertex(x, va.y + pady, va.z, col);
vertex(x, vb[1] + pady, vb[2], col); vertex(x, vb.y + pady, vb.z, col);
vertex(x, vb[1] + pady, vb[2], col); vertex(x, vb.y + pady, vb.z, col);
vertex(x, vb[1] - pady, vb[2], col); vertex(x, vb.y - pady, vb.z, col);
vertex(x, vb[1] - pady, vb[2], col); vertex(x, vb.y - pady, vb.z, col);
vertex(x, va[1] - pady, va[2], col); vertex(x, va.y - pady, va.z, col);
} }
else if (side == 2 || side == 6) else if (side == 2 || side == 6)
{ {
int col = side == 2 ? duRGBA(0, 128, 0, 128) : duRGBA(0, 128, 128, 128); int col = side == 2 ? duRGBA(0, 128, 0, 128) : duRGBA(0, 128, 128, 128);
float z = va[2] + ((side == 2) ? -padx : padx); float z = va.z + ((side == 2) ? -padx : padx);
vertex(va[0], va[1] - pady, z, col); vertex(va.x, va.y - pady, z, col);
vertex(va[0], va[1] + pady, z, col); vertex(va.x, va.y + pady, z, col);
vertex(va[0], va[1] + pady, z, col); vertex(va.x, va.y + pady, z, col);
vertex(vb[0], vb[1] + pady, z, col); vertex(vb.x, vb.y + pady, z, col);
vertex(vb[0], vb[1] + pady, z, col); vertex(vb.x, vb.y + pady, z, col);
vertex(vb[0], vb[1] - pady, z, col); vertex(vb.x, vb.y - pady, z, col);
vertex(vb[0], vb[1] - pady, z, col); vertex(vb.x, vb.y - pady, z, col);
vertex(va[0], va[1] - pady, z, col); vertex(va.x, va.y - pady, z, col);
} }
} }
} }
@ -1406,4 +1406,4 @@ public class RecastDebugDraw : DebugDraw
end(); end();
} }
} }

View File

@ -109,9 +109,9 @@ public class DemoInputGeomProvider : InputGeomProvider
e1[j] = vertices[v2 + j] - vertices[v0 + j]; e1[j] = vertices[v2 + j] - vertices[v0 + j];
} }
normals[i] = e0[1] * e1[2] - e0[2] * e1[1]; normals[i] = e0.y * e1.z - e0.z * e1.y;
normals[i + 1] = e0[2] * e1[0] - e0[0] * e1[2]; normals[i + 1] = e0.z * e1.x - e0.x * e1.z;
normals[i + 2] = e0[0] * e1[1] - e0[1] * e1[0]; normals[i + 2] = e0.x * e1.y - e0.y * e1.x;
float d = (float)Math.Sqrt(normals[i] * normals[i] + normals[i + 1] * normals[i + 1] + normals[i + 2] * normals[i + 2]); float d = (float)Math.Sqrt(normals[i] * normals[i] + normals[i + 1] * normals[i + 1] + normals[i + 2] * normals[i + 2]);
if (d > 0) if (d > 0)
{ {
@ -161,10 +161,10 @@ public class DemoInputGeomProvider : InputGeomProvider
float btmin = btminmax[0]; float btmin = btminmax[0];
float btmax = btminmax[1]; float btmax = btminmax[1];
float[] p = new float[2], q = new float[2]; float[] p = new float[2], q = new float[2];
p[0] = src[0] + (dst[0] - src[0]) * btmin; p[0] = src.x + (dst.x - src.x) * btmin;
p[1] = src[2] + (dst[2] - src[2]) * btmin; p[1] = src.z + (dst.z - src.z) * btmin;
q[0] = src[0] + (dst[0] - src[0]) * btmax; q[0] = src.x + (dst.x - src.x) * btmax;
q[1] = src[2] + (dst[2] - src[2]) * btmax; q[1] = src.z + (dst.z - src.z) * btmax;
List<ChunkyTriMeshNode> chunks = _mesh.chunkyTriMesh.getChunksOverlappingSegment(p, q); List<ChunkyTriMeshNode> chunks = _mesh.chunkyTriMesh.getChunksOverlappingSegment(p, q);
if (0 == chunks.Count) if (0 == chunks.Count)
@ -225,4 +225,4 @@ public class DemoInputGeomProvider : InputGeomProvider
{ {
_convexVolumes.Clear(); _convexVolumes.Clear();
} }
} }

View File

@ -33,15 +33,15 @@ public class DemoOffMeshConnection
public DemoOffMeshConnection(Vector3f start, Vector3f end, float radius, bool bidir, int area, int flags) public DemoOffMeshConnection(Vector3f start, Vector3f end, float radius, bool bidir, int area, int flags)
{ {
verts = new float[6]; verts = new float[6];
verts[0] = start[0]; verts[0] = start.x;
verts[1] = start[1]; verts[1] = start.y;
verts[2] = start[2]; verts[2] = start.z;
verts[3] = end[0]; verts[3] = end.x;
verts[4] = end[1]; verts[4] = end.y;
verts[5] = end[2]; verts[5] = end.z;
this.radius = radius; this.radius = radius;
this.bidir = bidir; this.bidir = bidir;
this.area = area; this.area = area;
this.flags = flags; this.flags = flags;
} }
} }

View File

@ -144,9 +144,9 @@ public class RecastDemo
} }
float[] modelviewMatrix = dd.viewMatrix(cameraPos, cameraEulers); float[] modelviewMatrix = dd.viewMatrix(cameraPos, cameraEulers);
cameraPos[0] += scrollZoom * 2.0f * modelviewMatrix[2]; cameraPos.x += scrollZoom * 2.0f * modelviewMatrix[2];
cameraPos[1] += scrollZoom * 2.0f * modelviewMatrix[6]; cameraPos.y += scrollZoom * 2.0f * modelviewMatrix[6];
cameraPos[2] += scrollZoom * 2.0f * modelviewMatrix[10]; cameraPos.z += scrollZoom * 2.0f * modelviewMatrix[10];
scrollZoom = 0; scrollZoom = 0;
} }
@ -169,17 +169,17 @@ public class RecastDemo
if (pan) if (pan)
{ {
float[] modelviewMatrix = dd.viewMatrix(cameraPos, cameraEulers); float[] modelviewMatrix = dd.viewMatrix(cameraPos, cameraEulers);
cameraPos[0] = origCameraPos[0]; cameraPos.x = origCameraPos.x;
cameraPos[1] = origCameraPos[1]; cameraPos.y = origCameraPos.y;
cameraPos[2] = origCameraPos[2]; cameraPos.z = origCameraPos.z;
cameraPos[0] -= 0.1f * dx * modelviewMatrix[0]; cameraPos.x -= 0.1f * dx * modelviewMatrix[0];
cameraPos[1] -= 0.1f * dx * modelviewMatrix[4]; cameraPos.y -= 0.1f * dx * modelviewMatrix[4];
cameraPos[2] -= 0.1f * dx * modelviewMatrix[8]; cameraPos.z -= 0.1f * dx * modelviewMatrix[8];
cameraPos[0] += 0.1f * dy * modelviewMatrix[1]; cameraPos.x += 0.1f * dy * modelviewMatrix[1];
cameraPos[1] += 0.1f * dy * modelviewMatrix[5]; cameraPos.y += 0.1f * dy * modelviewMatrix[5];
cameraPos[2] += 0.1f * dy * modelviewMatrix[9]; cameraPos.z += 0.1f * dy * modelviewMatrix[9];
if (dx * dx + dy * dy > 3 * 3) if (dx * dx + dy * dy > 3 * 3)
{ {
movedDuringPan = true; movedDuringPan = true;
@ -214,9 +214,9 @@ public class RecastDemo
movedDuringPan = false; movedDuringPan = false;
origMousePos[0] = mousePos[0]; origMousePos[0] = mousePos[0];
origMousePos[1] = mousePos[1]; origMousePos[1] = mousePos[1];
origCameraPos[0] = cameraPos[0]; origCameraPos.x = cameraPos.x;
origCameraPos[1] = cameraPos[1]; origCameraPos.y = cameraPos.y;
origCameraPos[2] = cameraPos[2]; origCameraPos.z = cameraPos.z;
} }
} }
} }
@ -423,7 +423,7 @@ public class RecastDemo
{ {
/* /*
* try (MemoryStack stack = stackPush()) { int[] w = stack.mallocInt(1); int[] h = * try (MemoryStack stack = stackPush()) { int[] w = stack.mallocInt(1); int[] h =
* stack.mallocInt(1); glfwGetWindowSize(win, w, h); width = w[0]; height = h[0]; } * stack.mallocInt(1); glfwGetWindowSize(win, w, h); width = w.x; height = h.x; }
*/ */
if (sample.getInputGeom() != null) if (sample.getInputGeom() != null)
{ {
@ -449,15 +449,15 @@ public class RecastDemo
double movey = (_moveBack - _moveFront) * keySpeed * dt + scrollZoom * 2.0f; double movey = (_moveBack - _moveFront) * keySpeed * dt + scrollZoom * 2.0f;
scrollZoom = 0; scrollZoom = 0;
cameraPos[0] += (float)(movex * modelviewMatrix[0]); cameraPos.x += (float)(movex * modelviewMatrix[0]);
cameraPos[1] += (float)(movex * modelviewMatrix[4]); cameraPos.y += (float)(movex * modelviewMatrix[4]);
cameraPos[2] += (float)(movex * modelviewMatrix[8]); cameraPos.z += (float)(movex * modelviewMatrix[8]);
cameraPos[0] += (float)(movey * modelviewMatrix[2]); cameraPos.x += (float)(movey * modelviewMatrix[2]);
cameraPos[1] += (float)(movey * modelviewMatrix[6]); cameraPos.y += (float)(movey * modelviewMatrix[6]);
cameraPos[2] += (float)(movey * modelviewMatrix[10]); cameraPos.z += (float)(movey * modelviewMatrix[10]);
cameraPos[1] += (float)((_moveUp - _moveDown) * keySpeed * dt); cameraPos.y += (float)((_moveUp - _moveDown) * keySpeed * dt);
long time = FrequencyWatch.Ticks; long time = FrequencyWatch.Ticks;
prevFrameTime = time; prevFrameTime = time;
@ -597,7 +597,7 @@ public class RecastDemo
hit = PolyMeshRaycast.raycast(sample.getRecastResults(), rayStart, rayEnd); hit = PolyMeshRaycast.raycast(sample.getRecastResults(), rayStart, rayEnd);
} }
float[] rayDir = new float[] { rayEnd[0] - rayStart[0], rayEnd[1] - rayStart[1], rayEnd[2] - rayStart[2] }; float[] rayDir = new float[] { rayEnd.x - rayStart.x, rayEnd.y - rayStart.y, rayEnd.z - rayStart.z };
Tool rayTool = toolsUI.getTool(); Tool rayTool = toolsUI.getTool();
vNormalize(rayDir); vNormalize(rayDir);
if (rayTool != null) if (rayTool != null)
@ -612,16 +612,16 @@ public class RecastDemo
{ {
// Marker // Marker
markerPositionSet = true; markerPositionSet = true;
markerPosition[0] = rayStart[0] + (rayEnd[0] - rayStart[0]) * hitTime; markerPosition.x = rayStart.x + (rayEnd.x - rayStart.x) * hitTime;
markerPosition[1] = rayStart[1] + (rayEnd[1] - rayStart[1]) * hitTime; markerPosition.y = rayStart.y + (rayEnd.y - rayStart.y) * hitTime;
markerPosition[2] = rayStart[2] + (rayEnd[2] - rayStart[2]) * hitTime; markerPosition.z = rayStart.z + (rayEnd.z - rayStart.z) * hitTime;
} }
else else
{ {
Vector3f pos = new Vector3f(); Vector3f pos = new Vector3f();
pos[0] = rayStart[0] + (rayEnd[0] - rayStart[0]) * hitTime; pos.x = rayStart.x + (rayEnd.x - rayStart.x) * hitTime;
pos[1] = rayStart[1] + (rayEnd[1] - rayStart[1]) * hitTime; pos.y = rayStart.y + (rayEnd.y - rayStart.y) * hitTime;
pos[2] = rayStart[2] + (rayEnd[2] - rayStart[2]) * hitTime; pos.z = rayStart.z + (rayEnd.z - rayStart.z) * hitTime;
if (rayTool != null) if (rayTool != null)
{ {
rayTool.handleClick(rayStart, pos, processHitTestShift); rayTool.handleClick(rayStart, pos, processHitTestShift);
@ -669,15 +669,15 @@ public class RecastDemo
} }
bminN = Vector3f.Of( bminN = Vector3f.Of(
Math.Min(bminN.Value[0], result.getSolidHeightfield().bmin[0]), Math.Min(bminN.Value.x, result.getSolidHeightfield().bmin.x),
Math.Min(bminN.Value[1], result.getSolidHeightfield().bmin[1]), Math.Min(bminN.Value.y, result.getSolidHeightfield().bmin.y),
Math.Min(bminN.Value[2], result.getSolidHeightfield().bmin[2]) Math.Min(bminN.Value.z, result.getSolidHeightfield().bmin.z)
); );
bmaxN = Vector3f.Of( bmaxN = Vector3f.Of(
Math.Max(bmaxN.Value[0], result.getSolidHeightfield().bmax[0]), Math.Max(bmaxN.Value.x, result.getSolidHeightfield().bmax.x),
Math.Max(bmaxN.Value[1], result.getSolidHeightfield().bmax[1]), Math.Max(bmaxN.Value.y, result.getSolidHeightfield().bmax.y),
Math.Max(bmaxN.Value[2], result.getSolidHeightfield().bmax[2]) Math.Max(bmaxN.Value.z, result.getSolidHeightfield().bmax.z)
); );
} }
} }
@ -689,11 +689,11 @@ public class RecastDemo
Vector3f bmax = bmaxN.Value; Vector3f bmax = bmaxN.Value;
camr = (float)(Math.Sqrt( camr = (float)(Math.Sqrt(
sqr(bmax[0] - bmin[0]) + sqr(bmax[1] - bmin[1]) + sqr(bmax[2] - bmin[2])) sqr(bmax.x - bmin.x) + sqr(bmax.y - bmin.y) + sqr(bmax.z - bmin.z))
/ 2); / 2);
cameraPos[0] = (bmax[0] + bmin[0]) / 2 + camr; cameraPos.x = (bmax.x + bmin.x) / 2 + camr;
cameraPos[1] = (bmax[1] + bmin[1]) / 2 + camr; cameraPos.y = (bmax.y + bmin.y) / 2 + camr;
cameraPos[2] = (bmax[2] + bmin[2]) / 2 + camr; cameraPos.z = (bmax.z + bmin.z) / 2 + camr;
camr *= 3; camr *= 3;
cameraEulers[0] = 45; cameraEulers[0] = 45;
cameraEulers[1] = -45; cameraEulers[1] = -45;
@ -752,4 +752,4 @@ public class RecastDemo
{ {
Console.WriteLine($"GLFW error [{code}]: {message}"); Console.WriteLine($"GLFW error [{code}]: {message}");
} }
} }

View File

@ -62,8 +62,8 @@ public class ConvexVolumeTool : Tool
IList<ConvexVolume> vols = geom.convexVolumes(); IList<ConvexVolume> vols = geom.convexVolumes();
for (int i = 0; i < vols.Count; ++i) for (int i = 0; i < vols.Count; ++i)
{ {
if (PolyUtils.pointInPoly(vols[i].verts, p) && p[1] >= vols[i].hmin if (PolyUtils.pointInPoly(vols[i].verts, p) && p.y >= vols[i].hmin
&& p[1] <= vols[i].hmax) && p.y <= vols[i].hmax)
{ {
nearestIndex = i; nearestIndex = i;
} }
@ -123,9 +123,9 @@ public class ConvexVolumeTool : Tool
else else
{ {
// Add new point // Add new point
pts.Add(p[0]); pts.Add(p.x);
pts.Add(p[1]); pts.Add(p.y);
pts.Add(p[2]); pts.Add(p.z);
// Update hull. // Update hull.
if (pts.Count > 3) if (pts.Count > 3)
{ {

View File

@ -336,9 +336,9 @@ public class CrowdProfilingTool
if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VALID) if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VALID)
{ {
float dx = ag.targetPos[0] - ag.npos[0]; float dx = ag.targetPos.x - ag.npos.x;
float dy = ag.targetPos[1] - ag.npos[1]; float dy = ag.targetPos.y - ag.npos.y;
float dz = ag.targetPos[2] - ag.npos[2]; float dz = ag.targetPos.z - ag.npos.z;
return dx * dx + dy * dy + dz * dz < 0.3f; return dx * dx + dy * dy + dz * dz < 0.3f;
} }
@ -364,7 +364,7 @@ public class CrowdProfilingTool
{ {
float radius = ag.option.radius; float radius = ag.option.radius;
Vector3f pos = ag.npos; Vector3f pos = ag.npos;
dd.debugDrawCircle(pos[0], pos[1], pos[2], radius, duRGBA(0, 0, 0, 32), 2.0f); dd.debugDrawCircle(pos.x, pos.y, pos.z, radius, duRGBA(0, 0, 0, 32), 2.0f);
} }
foreach (CrowdAgent ag in crowd.getActiveAgents()) foreach (CrowdAgent ag in crowd.getActiveAgents())
@ -396,8 +396,8 @@ public class CrowdProfilingTool
else if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VELOCITY) else if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VELOCITY)
col = duLerpCol(col, duRGBA(64, 255, 0, 128), 128); col = duLerpCol(col, duRGBA(64, 255, 0, 128), 128);
dd.debugDrawCylinder(pos[0] - radius, pos[1] + radius * 0.1f, pos[2] - radius, pos[0] + radius, pos[1] + height, dd.debugDrawCylinder(pos.x - radius, pos.y + radius * 0.1f, pos.z - radius, pos.x + radius, pos.y + height,
pos[2] + radius, col); pos.z + radius, col);
} }
} }
@ -452,4 +452,4 @@ public class CrowdProfilingTool
} }
} }
} }
} }

View File

@ -235,9 +235,9 @@ public class CrowdTool : Tool
for (int i = 0; i < AGENT_MAX_TRAIL; ++i) for (int i = 0; i < AGENT_MAX_TRAIL; ++i)
{ {
trail.trail[i * 3] = p[0]; trail.trail[i * 3] = p.x;
trail.trail[i * 3 + 1] = p[1]; trail.trail[i * 3 + 1] = p.y;
trail.trail[i * 3 + 2] = p[2]; trail.trail[i * 3 + 2] = p.z;
} }
trail.htrail = 0; trail.htrail = 0;
@ -289,12 +289,12 @@ public class CrowdTool : Tool
Vector3f p = ag.npos; Vector3f p = ag.npos;
float r = ag.option.radius; float r = ag.option.radius;
float h = ag.option.height; float h = ag.option.height;
bmin[0] = p[0] - r; bmin.x = p.x - r;
bmin[1] = p[1]; bmin.y = p.y;
bmin[2] = p[2] - r; bmin.z = p.z - r;
bmax[0] = p[0] + r; bmax.x = p.x + r;
bmax[1] = p[1] + h; bmax.y = p.y + h;
bmax[2] = p[2] + r; bmax.z = p.z + r;
} }
private void setMoveTarget(Vector3f p, bool adjust) private void setMoveTarget(Vector3f p, bool adjust)
@ -346,7 +346,7 @@ public class CrowdTool : Tool
private Vector3f calcVel(Vector3f pos, Vector3f tgt, float speed) private Vector3f calcVel(Vector3f pos, Vector3f tgt, float speed)
{ {
Vector3f vel = vSub(tgt, pos); Vector3f vel = vSub(tgt, pos);
vel[1] = 0.0f; vel.y = 0.0f;
vNormalize(ref vel); vNormalize(ref vel);
return vScale(vel, speed); return vScale(vel, speed);
} }
@ -392,7 +392,7 @@ public class CrowdTool : Tool
} }
if (m_targetRef != 0) if (m_targetRef != 0)
dd.debugDrawCross(m_targetPos[0], m_targetPos[1] + 0.1f, m_targetPos[2], rad, duRGBA(255, 255, 255, 192), 2.0f); dd.debugDrawCross(m_targetPos.x, m_targetPos.y + 0.1f, m_targetPos.z, rad, duRGBA(255, 255, 255, 192), 2.0f);
// Occupancy grid. // Occupancy grid.
if (toolParams.m_showGrid) if (toolParams.m_showGrid)
@ -401,7 +401,7 @@ public class CrowdTool : Tool
foreach (CrowdAgent ag in crowd.getActiveAgents()) foreach (CrowdAgent ag in crowd.getActiveAgents())
{ {
Vector3f pos = ag.corridor.getPos(); Vector3f pos = ag.corridor.getPos();
gridy = Math.Max(gridy, pos[1]); gridy = Math.Max(gridy, pos.y);
} }
gridy += 1.0f; gridy += 1.0f;
@ -442,7 +442,7 @@ public class CrowdTool : Tool
int idx = (trail.htrail + AGENT_MAX_TRAIL - j) % AGENT_MAX_TRAIL; int idx = (trail.htrail + AGENT_MAX_TRAIL - j) % AGENT_MAX_TRAIL;
int v = idx * 3; int v = idx * 3;
float a = 1 - j / (float)AGENT_MAX_TRAIL; float a = 1 - j / (float)AGENT_MAX_TRAIL;
dd.vertex(prev[0], prev[1] + 0.1f, prev[2], duRGBA(0, 0, 0, (int)(128 * preva))); dd.vertex(prev.x, prev.y + 0.1f, prev.z, duRGBA(0, 0, 0, (int)(128 * preva)));
dd.vertex(trail.trail[v], trail.trail[v + 1] + 0.1f, trail.trail[v + 2], duRGBA(0, 0, 0, (int)(128 * a))); dd.vertex(trail.trail[v], trail.trail[v + 1] + 0.1f, trail.trail[v + 2], duRGBA(0, 0, 0, (int)(128 * a)));
preva = a; preva = a;
vCopy(ref prev, trail.trail, v); vCopy(ref prev, trail.trail, v);
@ -469,16 +469,16 @@ public class CrowdTool : Tool
{ {
Vector3f va = j == 0 ? pos : ag.corners[j - 1].getPos(); Vector3f va = j == 0 ? pos : ag.corners[j - 1].getPos();
Vector3f vb = ag.corners[j].getPos(); Vector3f vb = ag.corners[j].getPos();
dd.vertex(va[0], va[1] + radius, va[2], duRGBA(128, 0, 0, 192)); dd.vertex(va.x, va.y + radius, va.z, duRGBA(128, 0, 0, 192));
dd.vertex(vb[0], vb[1] + radius, vb[2], duRGBA(128, 0, 0, 192)); dd.vertex(vb.x, vb.y + radius, vb.z, duRGBA(128, 0, 0, 192));
} }
if ((ag.corners[ag.corners.Count - 1].getFlags() if ((ag.corners[ag.corners.Count - 1].getFlags()
& NavMeshQuery.DT_STRAIGHTPATH_OFFMESH_CONNECTION) != 0) & NavMeshQuery.DT_STRAIGHTPATH_OFFMESH_CONNECTION) != 0)
{ {
Vector3f v = ag.corners[ag.corners.Count - 1].getPos(); Vector3f v = ag.corners[ag.corners.Count - 1].getPos();
dd.vertex(v[0], v[1], v[2], duRGBA(192, 0, 0, 192)); dd.vertex(v.x, v.y, v.z, duRGBA(192, 0, 0, 192));
dd.vertex(v[0], v[1] + radius * 2, v[2], duRGBA(192, 0, 0, 192)); dd.vertex(v.x, v.y + radius * 2, v.z, duRGBA(192, 0, 0, 192));
} }
dd.end(); dd.end();
@ -487,21 +487,21 @@ public class CrowdTool : Tool
{ {
/* float dvel[3], pos[3]; /* float dvel[3], pos[3];
calcSmoothSteerDirection(ag.pos, ag.cornerVerts, ag.ncorners, dvel); calcSmoothSteerDirection(ag.pos, ag.cornerVerts, ag.ncorners, dvel);
pos[0] = ag.pos[0] + dvel[0]; pos.x = ag.pos.x + dvel.x;
pos[1] = ag.pos[1] + dvel[1]; pos.y = ag.pos.y + dvel.y;
pos[2] = ag.pos[2] + dvel[2]; pos.z = ag.pos.z + dvel.z;
float off = ag.radius+0.1f; float off = ag.radius+0.1f;
float[] tgt = &ag.cornerVerts[0]; float[] tgt = &ag.cornerVerts.x;
float y = ag.pos[1]+off; float y = ag.pos.y+off;
dd.begin(DU_DRAW_LINES, 2.0f); dd.begin(DU_DRAW_LINES, 2.0f);
dd.vertex(ag.pos[0],y,ag.pos[2], duRGBA(255,0,0,192)); dd.vertex(ag.pos.x,y,ag.pos.z, duRGBA(255,0,0,192));
dd.vertex(pos[0],y,pos[2], duRGBA(255,0,0,192)); dd.vertex(pos.x,y,pos.z, duRGBA(255,0,0,192));
dd.vertex(pos[0],y,pos[2], duRGBA(255,0,0,192)); dd.vertex(pos.x,y,pos.z, duRGBA(255,0,0,192));
dd.vertex(tgt[0],y,tgt[2], duRGBA(255,0,0,192)); dd.vertex(tgt.x,y,tgt.z, duRGBA(255,0,0,192));
dd.end();*/ dd.end();*/
} }
@ -511,8 +511,8 @@ public class CrowdTool : Tool
if (toolParams.m_showCollisionSegments) if (toolParams.m_showCollisionSegments)
{ {
Vector3f center = ag.boundary.getCenter(); Vector3f center = ag.boundary.getCenter();
dd.debugDrawCross(center[0], center[1] + radius, center[2], 0.2f, duRGBA(192, 0, 128, 255), 2.0f); dd.debugDrawCross(center.x, center.y + radius, center.z, 0.2f, duRGBA(192, 0, 128, 255), 2.0f);
dd.debugDrawCircle(center[0], center[1] + radius, center[2], ag.option.collisionQueryRange, duRGBA(192, 0, 128, 128), 2.0f); dd.debugDrawCircle(center.x, center.y + radius, center.z, ag.option.collisionQueryRange, duRGBA(192, 0, 128, 128), 2.0f);
dd.begin(LINES, 3.0f); dd.begin(LINES, 3.0f);
for (int j = 0; j < ag.boundary.getSegmentCount(); ++j) for (int j = 0; j < ag.boundary.getSegmentCount(); ++j)
@ -524,7 +524,7 @@ public class CrowdTool : Tool
if (triArea2D(pos, s0, s3) < 0.0f) if (triArea2D(pos, s0, s3) < 0.0f)
col = duDarkenCol(col); col = duDarkenCol(col);
dd.appendArrow(s[0][0], s[0][1] + 0.2f, s[0][2], s[1][0], s[1][2] + 0.2f, s[1][2], 0.0f, 0.3f, col); dd.appendArrow(s[0].x, s[0].y + 0.2f, s[0].z, s[1].x, s[1].z + 0.2f, s[1].z, 0.0f, 0.3f, col);
} }
dd.end(); dd.end();
@ -532,7 +532,7 @@ public class CrowdTool : Tool
if (toolParams.m_showNeis) if (toolParams.m_showNeis)
{ {
dd.debugDrawCircle(pos[0], pos[1] + radius, pos[2], ag.option.collisionQueryRange, duRGBA(0, 192, 128, 128), dd.debugDrawCircle(pos.x, pos.y + radius, pos.z, ag.option.collisionQueryRange, duRGBA(0, 192, 128, 128),
2.0f); 2.0f);
dd.begin(LINES, 2.0f); dd.begin(LINES, 2.0f);
@ -541,8 +541,8 @@ public class CrowdTool : Tool
CrowdAgent nei = ag.neis[j].agent; CrowdAgent nei = ag.neis[j].agent;
if (nei != null) if (nei != null)
{ {
dd.vertex(pos[0], pos[1] + radius, pos[2], duRGBA(0, 192, 128, 128)); dd.vertex(pos.x, pos.y + radius, pos.z, duRGBA(0, 192, 128, 128));
dd.vertex(nei.npos[0], nei.npos[1] + radius, nei.npos[2], duRGBA(0, 192, 128, 128)); dd.vertex(nei.npos.x, nei.npos.y + radius, nei.npos.z, duRGBA(0, 192, 128, 128));
} }
} }
@ -552,9 +552,9 @@ public class CrowdTool : Tool
if (toolParams.m_showOpt) if (toolParams.m_showOpt)
{ {
dd.begin(LINES, 2.0f); dd.begin(LINES, 2.0f);
dd.vertex(m_agentDebug.optStart[0], m_agentDebug.optStart[1] + 0.3f, m_agentDebug.optStart[2], dd.vertex(m_agentDebug.optStart.x, m_agentDebug.optStart.y + 0.3f, m_agentDebug.optStart.z,
duRGBA(0, 128, 0, 192)); duRGBA(0, 128, 0, 192));
dd.vertex(m_agentDebug.optEnd[0], m_agentDebug.optEnd[1] + 0.3f, m_agentDebug.optEnd[2], duRGBA(0, 128, 0, 192)); dd.vertex(m_agentDebug.optEnd.x, m_agentDebug.optEnd.y + 0.3f, m_agentDebug.optEnd.z, duRGBA(0, 128, 0, 192));
dd.end(); dd.end();
} }
} }
@ -569,7 +569,7 @@ public class CrowdTool : Tool
if (m_agentDebug.agent == ag) if (m_agentDebug.agent == ag)
col = duRGBA(255, 0, 0, 128); col = duRGBA(255, 0, 0, 128);
dd.debugDrawCircle(pos[0], pos[1], pos[2], radius, col, 2.0f); dd.debugDrawCircle(pos.x, pos.y, pos.z, radius, col, 2.0f);
} }
foreach (CrowdAgent ag in crowd.getActiveAgents()) foreach (CrowdAgent ag in crowd.getActiveAgents())
@ -589,8 +589,8 @@ public class CrowdTool : Tool
else if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VELOCITY) else if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VELOCITY)
col = duLerpCol(col, duRGBA(64, 255, 0, 128), 128); col = duLerpCol(col, duRGBA(64, 255, 0, 128), 128);
dd.debugDrawCylinder(pos[0] - radius, pos[1] + radius * 0.1f, pos[2] - radius, pos[0] + radius, pos[1] + height, dd.debugDrawCylinder(pos.x - radius, pos.y + radius * 0.1f, pos.z - radius, pos.x + radius, pos.y + height,
pos[2] + radius, col); pos.z + radius, col);
} }
if (toolParams.m_showVO) if (toolParams.m_showVO)
@ -603,9 +603,9 @@ public class CrowdTool : Tool
// Draw detail about agent sela // Draw detail about agent sela
ObstacleAvoidanceDebugData vod = m_agentDebug.vod; ObstacleAvoidanceDebugData vod = m_agentDebug.vod;
float dx = ag.npos[0]; float dx = ag.npos.x;
float dy = ag.npos[1] + ag.option.height; float dy = ag.npos.y + ag.option.height;
float dz = ag.npos[2]; float dz = ag.npos.z;
dd.debugDrawCircle(dx, dy, dz, ag.option.maxSpeed, duRGBA(255, 255, 255, 64), 2.0f); dd.debugDrawCircle(dx, dy, dz, ag.option.maxSpeed, duRGBA(255, 255, 255, 64), 2.0f);
@ -618,10 +618,10 @@ public class CrowdTool : Tool
float pen2 = vod.getSamplePreferredSidePenalty(j); float pen2 = vod.getSamplePreferredSidePenalty(j);
int col = duLerpCol(duRGBA(255, 255, 255, 220), duRGBA(128, 96, 0, 220), (int)(pen * 255)); int col = duLerpCol(duRGBA(255, 255, 255, 220), duRGBA(128, 96, 0, 220), (int)(pen * 255));
col = duLerpCol(col, duRGBA(128, 0, 0, 220), (int)(pen2 * 128)); col = duLerpCol(col, duRGBA(128, 0, 0, 220), (int)(pen2 * 128));
dd.vertex(dx + p[0] - sr, dy, dz + p[2] - sr, col); dd.vertex(dx + p.x - sr, dy, dz + p.z - sr, col);
dd.vertex(dx + p[0] - sr, dy, dz + p[2] + sr, col); dd.vertex(dx + p.x - sr, dy, dz + p.z + sr, col);
dd.vertex(dx + p[0] + sr, dy, dz + p[2] + sr, col); dd.vertex(dx + p.x + sr, dy, dz + p.z + sr, col);
dd.vertex(dx + p[0] + sr, dy, dz + p[2] - sr, col); dd.vertex(dx + p.x + sr, dy, dz + p.z - sr, col);
} }
dd.end(); dd.end();
@ -648,12 +648,12 @@ public class CrowdTool : Tool
else if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VELOCITY) else if (ag.targetState == MoveRequestState.DT_CROWDAGENT_TARGET_VELOCITY)
col = duLerpCol(col, duRGBA(64, 255, 0, 192), 128); col = duLerpCol(col, duRGBA(64, 255, 0, 192), 128);
dd.debugDrawCircle(pos[0], pos[1] + height, pos[2], radius, col, 2.0f); dd.debugDrawCircle(pos.x, pos.y + height, pos.z, radius, col, 2.0f);
dd.debugDrawArrow(pos[0], pos[1] + height, pos[2], pos[0] + dvel[0], pos[1] + height + dvel[1], pos[2] + dvel[2], dd.debugDrawArrow(pos.x, pos.y + height, pos.z, pos.x + dvel.x, pos.y + height + dvel.y, pos.z + dvel.z,
0.0f, 0.4f, duRGBA(0, 192, 255, 192), m_agentDebug.agent == ag ? 2.0f : 1.0f); 0.0f, 0.4f, duRGBA(0, 192, 255, 192), m_agentDebug.agent == ag ? 2.0f : 1.0f);
dd.debugDrawArrow(pos[0], pos[1] + height, pos[2], pos[0] + vel[0], pos[1] + height + vel[1], pos[2] + vel[2], 0.0f, dd.debugDrawArrow(pos.x, pos.y + height, pos.z, pos.x + vel.x, pos.y + height + vel.y, pos.z + vel.z, 0.0f,
0.4f, duRGBA(0, 0, 0, 160), 2.0f); 0.4f, duRGBA(0, 0, 0, 160), 2.0f);
} }
@ -689,9 +689,9 @@ public class CrowdTool : Tool
AgentTrail trail = m_trails[ag.idx]; AgentTrail trail = m_trails[ag.idx];
// Update agent movement trail. // Update agent movement trail.
trail.htrail = (trail.htrail + 1) % AGENT_MAX_TRAIL; trail.htrail = (trail.htrail + 1) % AGENT_MAX_TRAIL;
trail.trail[trail.htrail * 3] = ag.npos[0]; trail.trail[trail.htrail * 3] = ag.npos.x;
trail.trail[trail.htrail * 3 + 1] = ag.npos[1]; trail.trail[trail.htrail * 3 + 1] = ag.npos.y;
trail.trail[trail.htrail * 3 + 2] = ag.npos[2]; trail.trail[trail.htrail * 3 + 2] = ag.npos.z;
} }
m_agentDebug.vod.normalizeSamples(); m_agentDebug.vod.normalizeSamples();
@ -838,4 +838,4 @@ public class CrowdTool : Tool
{ {
return "Crowd"; return "Crowd";
} }
} }

View File

@ -202,15 +202,15 @@ public class DynamicUpdateTool : Tool
if (sposSet && eposSet && dynaMesh != null) if (sposSet && eposSet && dynaMesh != null)
{ {
Vector3f sp = Vector3f.Of(spos[0], spos[1] + 1.3f, spos[2]); Vector3f sp = Vector3f.Of(spos.x, spos.y + 1.3f, spos.z);
Vector3f ep = Vector3f.Of(epos[0], epos[1] + 1.3f, epos[2]); Vector3f ep = Vector3f.Of(epos.x, epos.y + 1.3f, epos.z);
long t1 = FrequencyWatch.Ticks; long t1 = FrequencyWatch.Ticks;
float? hitPos = dynaMesh.voxelQuery().raycast(sp, ep); float? hitPos = dynaMesh.voxelQuery().raycast(sp, ep);
long t2 = FrequencyWatch.Ticks; long t2 = FrequencyWatch.Ticks;
raycastTime = (t2 - t1) / TimeSpan.TicksPerMillisecond; raycastTime = (t2 - t1) / TimeSpan.TicksPerMillisecond;
raycastHit = hitPos.HasValue; raycastHit = hitPos.HasValue;
raycastHitPos = hitPos.HasValue raycastHitPos = hitPos.HasValue
? Vector3f.Of(sp[0] + hitPos.Value * (ep[0] - sp[0]), sp[1] + hitPos.Value * (ep[1] - sp[1]), sp[2] + hitPos.Value * (ep[2] - sp[2])) ? Vector3f.Of(sp.x + hitPos.Value * (ep.x - sp.x), sp.y + hitPos.Value * (ep.y - sp.y), sp.z + hitPos.Value * (ep.z - sp.z))
: ep; : ep;
} }
} }
@ -234,11 +234,11 @@ public class DynamicUpdateTool : Tool
); );
vNormalize(ref a); vNormalize(ref a);
float len = 1f + (float)random.NextDouble() * 20f; float len = 1f + (float)random.NextDouble() * 20f;
a[0] *= len; a.x *= len;
a[1] *= len; a.y *= len;
a[2] *= len; a.z *= len;
Vector3f start = Vector3f.Of(p[0], p[1], p[2]); Vector3f start = Vector3f.Of(p.x, p.y, p.z);
Vector3f end = Vector3f.Of(p[0] + a[0], p[1] + a[1], p[2] + a[2]); Vector3f end = Vector3f.Of(p.x + a.x, p.y + a.y, p.z + a.z);
return Tuple.Create<Collider, ColliderGizmo>(new CapsuleCollider( return Tuple.Create<Collider, ColliderGizmo>(new CapsuleCollider(
start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb), GizmoFactory.capsule(start, end, radius)); start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb), GizmoFactory.capsule(start, end, radius));
} }
@ -266,8 +266,8 @@ public class DynamicUpdateTool : Tool
a[0] *= len; a[0] *= len;
a[1] *= len; a[1] *= len;
a[2] *= len; a[2] *= len;
Vector3f start = Vector3f.Of(p[0], p[1], p[2]); Vector3f start = Vector3f.Of(p.x, p.y, p.z);
Vector3f end = Vector3f.Of(p[0] + a[0], p[1] + a[1], p[2] + a[2]); Vector3f end = Vector3f.Of(p.x + a[0], p.y + a[1], p.z + a[2]);
return Tuple.Create<Collider, ColliderGizmo>(new CylinderCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, return Tuple.Create<Collider, ColliderGizmo>(new CylinderCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER,
dynaMesh.config.walkableClimb), GizmoFactory.cylinder(start, end, radius)); dynaMesh.config.walkableClimb), GizmoFactory.cylinder(start, end, radius));
} }
@ -275,7 +275,7 @@ public class DynamicUpdateTool : Tool
private Tuple<Collider, ColliderGizmo> compositeCollider(Vector3f p) private Tuple<Collider, ColliderGizmo> compositeCollider(Vector3f p)
{ {
Vector3f baseExtent = Vector3f.Of(5, 3, 8); Vector3f baseExtent = Vector3f.Of(5, 3, 8);
Vector3f baseCenter = Vector3f.Of(p[0], p[1] + 3, p[2]); Vector3f baseCenter = Vector3f.Of(p.x, p.y + 3, p.z);
Vector3f baseUp = Vector3f.Of(0, 1, 0); Vector3f baseUp = Vector3f.Of(0, 1, 0);
Vector3f forward = Vector3f.Of((1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble())); Vector3f forward = Vector3f.Of((1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble()));
vNormalize(ref forward); vNormalize(ref forward);
@ -284,22 +284,22 @@ public class DynamicUpdateTool : Tool
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb); SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb);
var roofUp = Vector3f.Zero; var roofUp = Vector3f.Zero;
Vector3f roofExtent = Vector3f.Of(4.5f, 4.5f, 8f); Vector3f roofExtent = Vector3f.Of(4.5f, 4.5f, 8f);
float[] rx = GLU.build_4x4_rotation_matrix(45, forward[0], forward[1], forward[2]); float[] rx = GLU.build_4x4_rotation_matrix(45, forward.x, forward.y, forward.z);
roofUp = mulMatrixVector(ref roofUp, rx, baseUp); roofUp = mulMatrixVector(ref roofUp, rx, baseUp);
Vector3f roofCenter = Vector3f.Of(p[0], p[1] + 6, p[2]); Vector3f roofCenter = Vector3f.Of(p.x, p.y + 6, p.z);
BoxCollider roof = new BoxCollider(roofCenter, BoxCollider.getHalfEdges(roofUp, forward, roofExtent), BoxCollider roof = new BoxCollider(roofCenter, BoxCollider.getHalfEdges(roofUp, forward, roofExtent),
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb); SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb);
Vector3f trunkStart = Vector3f.Of( Vector3f trunkStart = Vector3f.Of(
baseCenter[0] - forward[0] * 15 + side[0] * 6, baseCenter.x - forward.x * 15 + side.x * 6,
p[1], p.y,
baseCenter[2] - forward[2] * 15 + side[2] * 6 baseCenter.z - forward.z * 15 + side.z * 6
); );
Vector3f trunkEnd = Vector3f.Of(trunkStart[0], trunkStart[1] + 10, trunkStart[2]); Vector3f trunkEnd = Vector3f.Of(trunkStart.x, trunkStart.y + 10, trunkStart.z);
CapsuleCollider trunk = new CapsuleCollider(trunkStart, trunkEnd, 0.5f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, CapsuleCollider trunk = new CapsuleCollider(trunkStart, trunkEnd, 0.5f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
dynaMesh.config.walkableClimb); dynaMesh.config.walkableClimb);
Vector3f crownCenter = Vector3f.Of( Vector3f crownCenter = Vector3f.Of(
baseCenter[0] - forward[0] * 15 + side[0] * 6, p[1] + 10, baseCenter.x - forward.x * 15 + side.x * 6, p.y + 10,
baseCenter[2] - forward[2] * 15 + side[2] * 6 baseCenter.z - forward.z * 15 + side.z * 6
); );
SphereCollider crown = new SphereCollider(crownCenter, 4f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS, SphereCollider crown = new SphereCollider(crownCenter, 4f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS,
dynaMesh.config.walkableClimb); dynaMesh.config.walkableClimb);
@ -348,16 +348,16 @@ public class DynamicUpdateTool : Tool
Vector3f vr = new Vector3f(); Vector3f vr = new Vector3f();
for (int i = 0; i < geom.vertices.Length; i += 3) for (int i = 0; i < geom.vertices.Length; i += 3)
{ {
v[0] = geom.vertices[i]; v.x = geom.vertices[i];
v[1] = geom.vertices[i + 1]; v.y = geom.vertices[i + 1];
v[2] = geom.vertices[i + 2]; v.z = geom.vertices[i + 2];
mulMatrixVector(ref vr, m, v); mulMatrixVector(ref vr, m, v);
vr[0] += p[0]; vr.x += p.x;
vr[1] += p[1] - 0.1f; vr.y += p.y - 0.1f;
vr[2] += p[2]; vr.z += p.z;
verts[i] = vr[0]; verts[i] = vr.x;
verts[i + 1] = vr[1]; verts[i + 1] = vr.y;
verts[i + 2] = vr[2]; verts[i + 2] = vr.z;
} }
return verts; return verts;
@ -373,9 +373,9 @@ public class DynamicUpdateTool : Tool
private Vector3f mulMatrixVector(ref Vector3f resultvector, float[] matrix, Vector3f pvector) private Vector3f mulMatrixVector(ref Vector3f resultvector, float[] matrix, Vector3f pvector)
{ {
resultvector[0] = matrix[0] * pvector[0] + matrix[4] * pvector[1] + matrix[8] * pvector[2]; resultvector.x = matrix[0] * pvector.x + matrix[4] * pvector.y + matrix[8] * pvector.z;
resultvector[1] = matrix[1] * pvector[0] + matrix[5] * pvector[1] + matrix[9] * pvector[2]; resultvector.y = matrix[1] * pvector.x + matrix[5] * pvector.y + matrix[9] * pvector.z;
resultvector[2] = matrix[2] * pvector[0] + matrix[6] * pvector[1] + matrix[10] * pvector[2]; resultvector.z = matrix[2] * pvector.x + matrix[6] * pvector.y + matrix[10] * pvector.z;
return resultvector; return resultvector;
} }
@ -409,9 +409,9 @@ public class DynamicUpdateTool : Tool
float dy = 0.5f * (bounds[4] - bounds[1]); float dy = 0.5f * (bounds[4] - bounds[1]);
float dz = 0.5f * (bounds[5] - bounds[2]); float dz = 0.5f * (bounds[5] - bounds[2]);
float rSqr = dx * dx + dy * dy + dz * dz; float rSqr = dx * dx + dy * dy + dz * dz;
float mx = point[0] - cx; float mx = point.x - cx;
float my = point[1] - cy; float my = point.y - cy;
float mz = point[2] - cz; float mz = point.z - cz;
float c = mx * mx + my * my + mz * mz - rSqr; float c = mx * mx + my * my + mz * mz - rSqr;
if (c <= 0.0f) if (c <= 0.0f)
{ {
@ -458,8 +458,8 @@ public class DynamicUpdateTool : Tool
{ {
int spathCol = raycastHit ? duRGBA(128, 32, 16, 220) : duRGBA(64, 128, 240, 220); int spathCol = raycastHit ? duRGBA(128, 32, 16, 220) : duRGBA(64, 128, 240, 220);
dd.begin(LINES, 2.0f); dd.begin(LINES, 2.0f);
dd.vertex(spos[0], spos[1] + 1.3f, spos[2], spathCol); dd.vertex(spos.x, spos.y + 1.3f, spos.z, spathCol);
dd.vertex(raycastHitPos[0], raycastHitPos[1], raycastHitPos[2], spathCol); dd.vertex(raycastHitPos.x, raycastHitPos.y, raycastHitPos.z, spathCol);
dd.end(); dd.end();
} }
@ -474,16 +474,16 @@ public class DynamicUpdateTool : Tool
float c = sample.getSettingsUI().getAgentMaxClimb(); float c = sample.getSettingsUI().getAgentMaxClimb();
dd.depthMask(false); dd.depthMask(false);
// Agent dimensions. // Agent dimensions.
dd.debugDrawCylinderWire(pos[0] - r, pos[1] + 0.02f, pos[2] - r, pos[0] + r, pos[1] + h, pos[2] + r, col, 2.0f); dd.debugDrawCylinderWire(pos.x - r, pos.y + 0.02f, pos.z - r, pos.x + r, pos.y + h, pos.z + r, col, 2.0f);
dd.debugDrawCircle(pos[0], pos[1] + c, pos[2], r, duRGBA(0, 0, 0, 64), 1.0f); dd.debugDrawCircle(pos.x, pos.y + c, pos.z, r, duRGBA(0, 0, 0, 64), 1.0f);
int colb = duRGBA(0, 0, 0, 196); int colb = duRGBA(0, 0, 0, 196);
dd.begin(LINES); dd.begin(LINES);
dd.vertex(pos[0], pos[1] - c, pos[2], colb); dd.vertex(pos.x, pos.y - c, pos.z, colb);
dd.vertex(pos[0], pos[1] + c, pos[2], colb); dd.vertex(pos.x, pos.y + c, pos.z, colb);
dd.vertex(pos[0] - r / 2, pos[1] + 0.02f, pos[2], colb); dd.vertex(pos.x - r / 2, pos.y + 0.02f, pos.z, colb);
dd.vertex(pos[0] + r / 2, pos[1] + 0.02f, pos[2], colb); dd.vertex(pos.x + r / 2, pos.y + 0.02f, pos.z, colb);
dd.vertex(pos[0], pos[1] + 0.02f, pos[2] - r / 2, colb); dd.vertex(pos.x, pos.y + 0.02f, pos.z - r / 2, colb);
dd.vertex(pos[0], pos[1] + 0.02f, pos[2] + r / 2, colb); dd.vertex(pos.x, pos.y + 0.02f, pos.z + r / 2, colb);
dd.end(); dd.end();
dd.depthMask(true); dd.depthMask(true);
} }
@ -670,17 +670,17 @@ public class DynamicUpdateTool : Tool
ImGui.Separator(); ImGui.Separator();
if (sposSet) if (sposSet)
{ {
ImGui.Text($"Start: {spos[0]}, {spos[1] + 1.3f}, {spos[2]}"); ImGui.Text($"Start: {spos.x}, {spos.y + 1.3f}, {spos.z}");
} }
if (eposSet) if (eposSet)
{ {
ImGui.Text($"End: {epos[0]}, {epos[1] + 1.3f}, {epos[2]}"); ImGui.Text($"End: {epos.x}, {epos.y + 1.3f}, {epos.z}");
} }
if (raycastHit) if (raycastHit)
{ {
ImGui.Text($"Hit: {raycastHitPos[0]}, {raycastHitPos[1]}, {raycastHitPos[2]}"); ImGui.Text($"Hit: {raycastHitPos.x}, {raycastHitPos.y}, {raycastHitPos.z}");
} }
ImGui.NewLine(); ImGui.NewLine();
@ -786,4 +786,4 @@ public class DynamicUpdateTool : Tool
{ {
return "Dynamic Updates"; return "Dynamic Updates";
} }
} }

View File

@ -1,4 +1,4 @@
using DotRecast.Core; using DotRecast.Core;
using DotRecast.Detour.Dynamic.Colliders; using DotRecast.Detour.Dynamic.Colliders;
using DotRecast.Recast.Demo.Draw; using DotRecast.Recast.Demo.Draw;
@ -42,23 +42,23 @@ public class BoxGizmo : ColliderGizmo
float s0 = (i & 1) != 0 ? 1f : -1f; float s0 = (i & 1) != 0 ? 1f : -1f;
float s1 = (i & 2) != 0 ? 1f : -1f; float s1 = (i & 2) != 0 ? 1f : -1f;
float s2 = (i & 4) != 0 ? 1f : -1f; float s2 = (i & 4) != 0 ? 1f : -1f;
vertices[i * 3 + 0] = center[0] + s0 * halfEdges[0][0] + s1 * halfEdges[1][0] + s2 * halfEdges[2][0]; vertices[i * 3 + 0] = center.x + s0 * halfEdges[0].x + s1 * halfEdges[1].x + s2 * halfEdges[2].x;
vertices[i * 3 + 1] = center[1] + s0 * halfEdges[0][1] + s1 * halfEdges[1][1] + s2 * halfEdges[2][1]; vertices[i * 3 + 1] = center.y + s0 * halfEdges[0].y + s1 * halfEdges[1].y + s2 * halfEdges[2].y;
vertices[i * 3 + 2] = center[2] + s0 * halfEdges[0][2] + s1 * halfEdges[1][2] + s2 * halfEdges[2][2]; vertices[i * 3 + 2] = center.z + s0 * halfEdges[0].z + s1 * halfEdges[1].z + s2 * halfEdges[2].z;
} }
} }
public void render(RecastDebugDraw debugDraw) public void render(RecastDebugDraw debugDraw)
{ {
var trX = Vector3f.Of(halfEdges[0][0], halfEdges[1][0], halfEdges[2][0]); var trX = Vector3f.Of(halfEdges[0].x, halfEdges[1].x, halfEdges[2].x);
var trY = Vector3f.Of(halfEdges[0][1], halfEdges[1][1], halfEdges[2][1]); var trY = Vector3f.Of(halfEdges[0].y, halfEdges[1].y, halfEdges[2].y);
var trZ = Vector3f.Of(halfEdges[0][2], halfEdges[1][2], halfEdges[2][2]); var trZ = Vector3f.Of(halfEdges[0].z, halfEdges[1].z, halfEdges[2].z);
float[] vertices = new float[8 * 3]; float[] vertices = new float[8 * 3];
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {
vertices[i * 3 + 0] = RecastVectors.dot(VERTS[i], trX) + center[0]; vertices[i * 3 + 0] = RecastVectors.dot(VERTS[i], trX) + center.x;
vertices[i * 3 + 1] = RecastVectors.dot(VERTS[i], trY) + center[1]; vertices[i * 3 + 1] = RecastVectors.dot(VERTS[i], trY) + center.y;
vertices[i * 3 + 2] = RecastVectors.dot(VERTS[i], trZ) + center[2]; vertices[i * 3 + 2] = RecastVectors.dot(VERTS[i], trZ) + center.z;
} }
debugDraw.begin(DebugDrawPrimitives.TRIS); debugDraw.begin(DebugDrawPrimitives.TRIS);
@ -83,4 +83,4 @@ public class BoxGizmo : ColliderGizmo
debugDraw.end(); debugDraw.end();
} }
} }

View File

@ -1,4 +1,4 @@
using DotRecast.Core; using DotRecast.Core;
using DotRecast.Recast.Demo.Draw; using DotRecast.Recast.Demo.Draw;
using static DotRecast.Recast.RecastVectors; using static DotRecast.Recast.RecastVectors;
using static DotRecast.Core.RecastMath; using static DotRecast.Core.RecastMath;
@ -17,21 +17,21 @@ public class CapsuleGizmo : ColliderGizmo
{ {
center = new float[] center = new float[]
{ {
0.5f * (start[0] + end[0]), 0.5f * (start[1] + end[1]), 0.5f * (start.x + end.x), 0.5f * (start.y + end.y),
0.5f * (start[2] + end[2]) 0.5f * (start.z + end.z)
}; };
Vector3f axis = Vector3f.Of(end[0] - start[0], end[1] - start[1], end[2] - start[2]); Vector3f axis = Vector3f.Of(end.x - start.x, end.y - start.y, end.z - start.z);
Vector3f[] normals = new Vector3f[3]; Vector3f[] normals = new Vector3f[3];
normals[1] = Vector3f.Of(end[0] - start[0], end[1] - start[1], end[2] - start[2]); normals[1] = Vector3f.Of(end.x - start.x, end.y - start.y, end.z - start.z);
normalize(ref normals[1]); normalize(ref normals[1]);
normals[0] = getSideVector(axis); normals[0] = getSideVector(axis);
normals[2] = Vector3f.Zero; normals[2] = Vector3f.Zero;
cross(ref normals[2], normals[0], normals[1]); cross(ref normals[2], normals[0], normals[1]);
normalize(ref normals[2]); normalize(ref normals[2]);
triangles = generateSphericalTriangles(); triangles = generateSphericalTriangles();
var trX = Vector3f.Of(normals[0][0], normals[1][0], normals[2][0]); var trX = Vector3f.Of(normals[0].x, normals[1].x, normals[2].x);
var trY = Vector3f.Of(normals[0][1], normals[1][1], normals[2][1]); var trY = Vector3f.Of(normals[0].y, normals[1].y, normals[2].y);
var trZ = Vector3f.Of(normals[0][2], normals[1][2], normals[2][2]); var trZ = Vector3f.Of(normals[0].z, normals[1].z, normals[2].z);
float[] spVertices = generateSphericalVertices(); float[] spVertices = generateSphericalVertices();
float halfLength = 0.5f * vLen(axis); float halfLength = 0.5f * vLen(axis);
vertices = new float[spVertices.Length]; vertices = new float[spVertices.Length];
@ -43,21 +43,21 @@ public class CapsuleGizmo : ColliderGizmo
float x = radius * spVertices[i]; float x = radius * spVertices[i];
float y = radius * spVertices[i + 1] + offset; float y = radius * spVertices[i + 1] + offset;
float z = radius * spVertices[i + 2]; float z = radius * spVertices[i + 2];
vertices[i] = x * trX[0] + y * trX[1] + z * trX[2] + center[0]; vertices[i] = x * trX.x + y * trX.y + z * trX.z + center[0];
vertices[i + 1] = x * trY[0] + y * trY[1] + z * trY[2] + center[1]; vertices[i + 1] = x * trY.x + y * trY.y + z * trY.z + center[1];
vertices[i + 2] = x * trZ[0] + y * trZ[1] + z * trZ[2] + center[2]; vertices[i + 2] = x * trZ.x + y * trZ.y + z * trZ.z + center[2];
v[0] = vertices[i] - center[0]; v.x = vertices[i] - center[0];
v[1] = vertices[i + 1] - center[1]; v.y = vertices[i + 1] - center[1];
v[2] = vertices[i + 2] - center[2]; v.z = vertices[i + 2] - center[2];
normalize(ref v); normalize(ref v);
gradient[i / 3] = clamp(0.57735026f * (v[0] + v[1] + v[2]), -1, 1); gradient[i / 3] = clamp(0.57735026f * (v.x + v.y + v.z), -1, 1);
} }
} }
private Vector3f getSideVector(Vector3f axis) private Vector3f getSideVector(Vector3f axis)
{ {
Vector3f side = Vector3f.Of(1, 0, 0); Vector3f side = Vector3f.Of(1, 0, 0);
if (axis[0] > 0.8) if (axis.x > 0.8)
{ {
side = Vector3f.Of(0, 0, 1); side = Vector3f.Of(0, 0, 1);
} }
@ -86,4 +86,4 @@ public class CapsuleGizmo : ColliderGizmo
debugDraw.end(); debugDraw.end();
} }
} }

View File

@ -1,4 +1,4 @@
using DotRecast.Core; using DotRecast.Core;
using DotRecast.Recast.Demo.Draw; using DotRecast.Recast.Demo.Draw;
using static DotRecast.Recast.RecastVectors; using static DotRecast.Recast.RecastVectors;
using static DotRecast.Core.RecastMath; using static DotRecast.Core.RecastMath;
@ -17,21 +17,21 @@ public class CylinderGizmo : ColliderGizmo
public CylinderGizmo(Vector3f start, Vector3f end, float radius) public CylinderGizmo(Vector3f start, Vector3f end, float radius)
{ {
center = Vector3f.Of( center = Vector3f.Of(
0.5f * (start[0] + end[0]), 0.5f * (start[1] + end[1]), 0.5f * (start.x + end.x), 0.5f * (start.y + end.y),
0.5f * (start[2] + end[2]) 0.5f * (start.z + end.z)
); );
Vector3f axis = Vector3f.Of(end[0] - start[0], end[1] - start[1], end[2] - start[2]); Vector3f axis = Vector3f.Of(end.x - start.x, end.y - start.y, end.z - start.z);
Vector3f[] normals = new Vector3f[3]; Vector3f[] normals = new Vector3f[3];
normals[1] = Vector3f.Of(end[0] - start[0], end[1] - start[1], end[2] - start[2]); normals[1] = Vector3f.Of(end.x - start.x, end.y - start.y, end.z - start.z);
normalize(ref normals[1]); normalize(ref normals[1]);
normals[0] = getSideVector(axis); normals[0] = getSideVector(axis);
normals[2] = Vector3f.Zero; normals[2] = Vector3f.Zero;
cross(ref normals[2], normals[0], normals[1]); cross(ref normals[2], normals[0], normals[1]);
normalize(ref normals[2]); normalize(ref normals[2]);
triangles = generateCylindricalTriangles(); triangles = generateCylindricalTriangles();
Vector3f trX = Vector3f.Of(normals[0][0], normals[1][0], normals[2][0]); Vector3f trX = Vector3f.Of(normals[0].x, normals[1].x, normals[2].x);
Vector3f trY = Vector3f.Of(normals[0][1], normals[1][1], normals[2][1]); Vector3f trY = Vector3f.Of(normals[0].y, normals[1].y, normals[2].y);
Vector3f trZ = Vector3f.Of(normals[0][2], normals[1][2], normals[2][2]); Vector3f trZ = Vector3f.Of(normals[0].z, normals[1].z, normals[2].z);
vertices = generateCylindricalVertices(); vertices = generateCylindricalVertices();
float halfLength = 0.5f * vLen(axis); float halfLength = 0.5f * vLen(axis);
gradient = new float[vertices.Length / 3]; gradient = new float[vertices.Length / 3];
@ -42,20 +42,20 @@ public class CylinderGizmo : ColliderGizmo
float x = radius * vertices[i]; float x = radius * vertices[i];
float y = vertices[i + 1] + offset; float y = vertices[i + 1] + offset;
float z = radius * vertices[i + 2]; float z = radius * vertices[i + 2];
vertices[i] = x * trX[0] + y * trX[1] + z * trX[2] + center[0]; vertices[i] = x * trX.x + y * trX.y + z * trX.z + center.x;
vertices[i + 1] = x * trY[0] + y * trY[1] + z * trY[2] + center[1]; vertices[i + 1] = x * trY.x + y * trY.y + z * trY.z + center.y;
vertices[i + 2] = x * trZ[0] + y * trZ[1] + z * trZ[2] + center[2]; vertices[i + 2] = x * trZ.x + y * trZ.y + z * trZ.z + center.z;
if (i < vertices.Length / 4 || i >= 3 * vertices.Length / 4) if (i < vertices.Length / 4 || i >= 3 * vertices.Length / 4)
{ {
gradient[i / 3] = 1; gradient[i / 3] = 1;
} }
else else
{ {
v[0] = vertices[i] - center[0]; v.x = vertices[i] - center.x;
v[1] = vertices[i + 1] - center[1]; v.y = vertices[i + 1] - center.y;
v[2] = vertices[i + 2] - center[2]; v.z = vertices[i + 2] - center.z;
normalize(ref v); normalize(ref v);
gradient[i / 3] = clamp(0.57735026f * (v[0] + v[1] + v[2]), -1, 1); gradient[i / 3] = clamp(0.57735026f * (v.x + v.y + v.z), -1, 1);
} }
} }
} }
@ -63,7 +63,7 @@ public class CylinderGizmo : ColliderGizmo
private Vector3f getSideVector(Vector3f axis) private Vector3f getSideVector(Vector3f axis)
{ {
Vector3f side = Vector3f.Of(1, 0, 0); Vector3f side = Vector3f.Of(1, 0, 0);
if (axis[0] > 0.8) if (axis.x > 0.8)
{ {
side = Vector3f.Of(0, 0, 1); side = Vector3f.Of(0, 0, 1);
} }
@ -92,4 +92,4 @@ public class CylinderGizmo : ColliderGizmo
debugDraw.end(); debugDraw.end();
} }
} }

View File

@ -185,11 +185,11 @@ public class GizmoHelper
e1[j] = vertices[v2 + j] - vertices[v0 + j]; e1[j] = vertices[v2 + j] - vertices[v0 + j];
} }
normal[0] = e0[1] * e1[2] - e0[2] * e1[1]; normal.x = e0.y * e1.z - e0.z * e1.y;
normal[1] = e0[2] * e1[0] - e0[0] * e1[2]; normal.y = e0.z * e1.x - e0.x * e1.z;
normal[2] = e0[0] * e1[1] - e0[1] * e1[0]; normal.z = e0.x * e1.y - e0.y * e1.x;
RecastVectors.normalize(ref normal); RecastVectors.normalize(ref normal);
float c = clamp(0.57735026f * (normal[0] + normal[1] + normal[2]), -1, 1); float c = clamp(0.57735026f * (normal.x + normal.y + normal.z), -1, 1);
int col = DebugDraw.duLerpCol(DebugDraw.duRGBA(32, 32, 0, 160), DebugDraw.duRGBA(220, 220, 0, 160), int col = DebugDraw.duLerpCol(DebugDraw.duRGBA(32, 32, 0, 160), DebugDraw.duRGBA(220, 220, 0, 160),
(int)(127 * (1 + c))); (int)(127 * (1 + c)));
return col; return col;

View File

@ -32,8 +32,8 @@ public class SphereGizmo : ColliderGizmo
float c = clamp(0.57735026f * (vertices[v] + vertices[v + 1] + vertices[v + 2]), -1, 1); float c = clamp(0.57735026f * (vertices[v] + vertices[v + 1] + vertices[v + 2]), -1, 1);
int col = DebugDraw.duLerpCol(DebugDraw.duRGBA(32, 32, 0, 160), DebugDraw.duRGBA(220, 220, 0, 160), int col = DebugDraw.duLerpCol(DebugDraw.duRGBA(32, 32, 0, 160), DebugDraw.duRGBA(220, 220, 0, 160),
(int)(127 * (1 + c))); (int)(127 * (1 + c)));
debugDraw.vertex(radius * vertices[v] + center[0], radius * vertices[v + 1] + center[1], debugDraw.vertex(radius * vertices[v] + center.x, radius * vertices[v + 1] + center.y,
radius * vertices[v + 2] + center[2], col); radius * vertices[v + 2] + center.z, col);
} }
} }

View File

@ -179,14 +179,14 @@ public class JumpLinkBuilderTool : Tool
dd.end(); dd.end();
dd.begin(LINES, 1.0f); dd.begin(LINES, 1.0f);
dd.vertex(link.start.p[0], link.start.p[1], link.start.p[2], colb); dd.vertex(link.start.p.x, link.start.p.y, link.start.p.z, colb);
dd.vertex(link.start.p[0], link.start.p[1] + r, link.start.p[2], colb); dd.vertex(link.start.p.x, link.start.p.y + r, link.start.p.z, colb);
dd.vertex(link.start.p[0], link.start.p[1] + r, link.start.p[2], colb); dd.vertex(link.start.p.x, link.start.p.y + r, link.start.p.z, colb);
dd.vertex(link.start.q[0], link.start.q[1] + r, link.start.q[2], colb); dd.vertex(link.start.q.x, link.start.q.y + r, link.start.q.z, colb);
dd.vertex(link.start.q[0], link.start.q[1] + r, link.start.q[2], colb); dd.vertex(link.start.q.x, link.start.q.y + r, link.start.q.z, colb);
dd.vertex(link.start.q[0], link.start.q[1], link.start.q[2], colb); dd.vertex(link.start.q.x, link.start.q.y, link.start.q.z, colb);
dd.vertex(link.start.q[0], link.start.q[1], link.start.q[2], colb); dd.vertex(link.start.q.x, link.start.q.y, link.start.q.z, colb);
dd.vertex(link.start.p[0], link.start.p[1], link.start.p[2], colb); dd.vertex(link.start.p.x, link.start.p.y, link.start.p.z, colb);
dd.end(); dd.end();
GroundSegment end = link.end; GroundSegment end = link.end;
@ -198,14 +198,14 @@ public class JumpLinkBuilderTool : Tool
dd.end(); dd.end();
dd.begin(LINES, 1.0f); dd.begin(LINES, 1.0f);
dd.vertex(end.p[0], end.p[1], end.p[2], colb); dd.vertex(end.p.x, end.p.y, end.p.z, colb);
dd.vertex(end.p[0], end.p[1] + r, end.p[2], colb); dd.vertex(end.p.x, end.p.y + r, end.p.z, colb);
dd.vertex(end.p[0], end.p[1] + r, end.p[2], colb); dd.vertex(end.p.x, end.p.y + r, end.p.z, colb);
dd.vertex(end.q[0], end.q[1] + r, end.q[2], colb); dd.vertex(end.q.x, end.q.y + r, end.q.z, colb);
dd.vertex(end.q[0], end.q[1] + r, end.q[2], colb); dd.vertex(end.q.x, end.q.y + r, end.q.z, colb);
dd.vertex(end.q[0], end.q[1], end.q[2], colb); dd.vertex(end.q.x, end.q.y, end.q.z, colb);
dd.vertex(end.q[0], end.q[1], end.q[2], colb); dd.vertex(end.q.x, end.q.y, end.q.z, colb);
dd.vertex(end.p[0], end.p[1], end.p[2], colb); dd.vertex(end.p.x, end.p.y, end.p.z, colb);
dd.end(); dd.end();
dd.begin(LINES, 4.0f); dd.begin(LINES, 4.0f);
@ -245,7 +245,7 @@ public class JumpLinkBuilderTool : Tool
col = duRGBA(220, 32, 32, 255); col = duRGBA(220, 32, 32, 255);
} }
spt[1] = s.p[1] + off; spt.y = s.p.y + off;
dd.vertex(spt, col); dd.vertex(spt, col);
} }
@ -264,7 +264,7 @@ public class JumpLinkBuilderTool : Tool
off = 0.1f; off = 0.1f;
} }
spt[1] = s.p[1] + off; spt.y = s.p.y + off;
dd.vertex(spt, col); dd.vertex(spt, col);
} }
@ -285,7 +285,7 @@ public class JumpLinkBuilderTool : Tool
col = duRGBA(220, 32, 32, 255); col = duRGBA(220, 32, 32, 255);
} }
spt[1] = s.p[1] + off; spt.y = s.p.y + off;
dd.vertex(spt, col); dd.vertex(spt, col);
} }
@ -303,7 +303,7 @@ public class JumpLinkBuilderTool : Tool
off = 0.1f; off = 0.1f;
} }
spt[1] = s.p[1] + off; spt.y = s.p.y + off;
dd.vertex(spt, col); dd.vertex(spt, col);
} }
@ -448,4 +448,4 @@ public class JumpLinkBuilderTool : Tool
{ {
return "Annotation Builder"; return "Annotation Builder";
} }
} }

View File

@ -100,7 +100,7 @@ public class OffMeshConnectionTool : Tool
if (hitPosSet) if (hitPosSet)
{ {
dd.debugDrawCross(hitPos[0], hitPos[1] + 0.1f, hitPos[2], s, duRGBA(0, 0, 0, 128), 2.0f); dd.debugDrawCross(hitPos.x, hitPos.y + 0.1f, hitPos.z, s, duRGBA(0, 0, 0, 128), 2.0f);
} }
DemoInputGeomProvider geom = sample.getInputGeom(); DemoInputGeomProvider geom = sample.getInputGeom();

View File

@ -243,9 +243,9 @@ public class TestNavmeshTool : Tool
moveTgt, m_filter); moveTgt, m_filter);
MoveAlongSurfaceResult moveAlongSurface = result.result; MoveAlongSurfaceResult moveAlongSurface = result.result;
iterPos[0] = moveAlongSurface.getResultPos()[0]; iterPos.x = moveAlongSurface.getResultPos().x;
iterPos[1] = moveAlongSurface.getResultPos()[1]; iterPos.y = moveAlongSurface.getResultPos().y;
iterPos[2] = moveAlongSurface.getResultPos()[2]; iterPos.z = moveAlongSurface.getResultPos().z;
List<long> visited = result.result.getVisited(); List<long> visited = result.result.getVisited();
polys = PathUtils.fixupCorridor(polys, visited); polys = PathUtils.fixupCorridor(polys, visited);
@ -254,7 +254,7 @@ public class TestNavmeshTool : Tool
Result<float> polyHeight = m_navQuery.getPolyHeight(polys[0], moveAlongSurface.getResultPos()); Result<float> polyHeight = m_navQuery.getPolyHeight(polys[0], moveAlongSurface.getResultPos());
if (polyHeight.Succeeded()) if (polyHeight.Succeeded())
{ {
iterPos[1] = polyHeight.result; iterPos.y = polyHeight.result;
} }
// Handle end of path and off-mesh links when close enough. // Handle end of path and off-mesh links when close enough.
@ -304,7 +304,7 @@ public class TestNavmeshTool : Tool
// Move position at the other side of the off-mesh link. // Move position at the other side of the off-mesh link.
iterPos = endPos; iterPos = endPos;
iterPos[1] = m_navQuery.getPolyHeight(polys[0], iterPos).result; iterPos.y = m_navQuery.getPolyHeight(polys[0], iterPos).result;
} }
} }
@ -331,7 +331,7 @@ public class TestNavmeshTool : Tool
if (0 < m_polys.Count) if (0 < m_polys.Count)
{ {
// In case of partial path, make sure the end point is clamped to the last polygon. // In case of partial path, make sure the end point is clamped to the last polygon.
var epos = Vector3f.Of(m_epos[0], m_epos[1], m_epos[2]); var epos = Vector3f.Of(m_epos.x, m_epos.y, m_epos.z);
if (m_polys[m_polys.Count - 1] != m_endRef) if (m_polys[m_polys.Count - 1] != m_endRef)
{ {
Result<ClosestPointOnPolyResult> result = m_navQuery Result<ClosestPointOnPolyResult> result = m_navQuery
@ -392,7 +392,7 @@ public class TestNavmeshTool : Tool
.getPolyHeight(hit.result.path[hit.result.path.Count - 1], m_hitPos); .getPolyHeight(hit.result.path[hit.result.path.Count - 1], m_hitPos);
if (result.Succeeded()) if (result.Succeeded())
{ {
m_hitPos[1] = result.result; m_hitPos.y = result.result;
} }
} }
} }
@ -423,8 +423,8 @@ public class TestNavmeshTool : Tool
{ {
if (m_sposSet && m_startRef != 0 && m_eposSet) if (m_sposSet && m_startRef != 0 && m_eposSet)
{ {
float dx = m_epos[0] - m_spos[0]; float dx = m_epos.x - m_spos.x;
float dz = m_epos[2] - m_spos[2]; float dz = m_epos.z - m_spos.z;
float dist = (float)Math.Sqrt(dx * dx + dz * dz); float dist = (float)Math.Sqrt(dx * dx + dz * dz);
Result<FindPolysAroundResult> result = m_navQuery.findPolysAroundCircle(m_startRef, m_spos, dist, Result<FindPolysAroundResult> result = m_navQuery.findPolysAroundCircle(m_startRef, m_spos, dist,
m_filter); m_filter);
@ -439,25 +439,25 @@ public class TestNavmeshTool : Tool
{ {
if (m_sposSet && m_startRef != 0 && m_eposSet) if (m_sposSet && m_startRef != 0 && m_eposSet)
{ {
float nx = (m_epos[2] - m_spos[2]) * 0.25f; float nx = (m_epos.z - m_spos.z) * 0.25f;
float nz = -(m_epos[0] - m_spos[0]) * 0.25f; float nz = -(m_epos.x - m_spos.x) * 0.25f;
float agentHeight = m_sample != null ? m_sample.getSettingsUI().getAgentHeight() : 0; float agentHeight = m_sample != null ? m_sample.getSettingsUI().getAgentHeight() : 0;
m_queryPoly[0] = m_spos[0] + nx * 1.2f; m_queryPoly[0] = m_spos.x + nx * 1.2f;
m_queryPoly[1] = m_spos[1] + agentHeight / 2; m_queryPoly[1] = m_spos.y + agentHeight / 2;
m_queryPoly[2] = m_spos[2] + nz * 1.2f; m_queryPoly[2] = m_spos.z + nz * 1.2f;
m_queryPoly[3] = m_spos[0] - nx * 1.3f; m_queryPoly[3] = m_spos.x - nx * 1.3f;
m_queryPoly[4] = m_spos[1] + agentHeight / 2; m_queryPoly[4] = m_spos.y + agentHeight / 2;
m_queryPoly[5] = m_spos[2] - nz * 1.3f; m_queryPoly[5] = m_spos.z - nz * 1.3f;
m_queryPoly[6] = m_epos[0] - nx * 0.8f; m_queryPoly[6] = m_epos.x - nx * 0.8f;
m_queryPoly[7] = m_epos[1] + agentHeight / 2; m_queryPoly[7] = m_epos.y + agentHeight / 2;
m_queryPoly[8] = m_epos[2] - nz * 0.8f; m_queryPoly[8] = m_epos.z - nz * 0.8f;
m_queryPoly[9] = m_epos[0] + nx; m_queryPoly[9] = m_epos.x + nx;
m_queryPoly[10] = m_epos[1] + agentHeight / 2; m_queryPoly[10] = m_epos.y + agentHeight / 2;
m_queryPoly[11] = m_epos[2] + nz; m_queryPoly[11] = m_epos.z + nz;
Result<FindPolysAroundResult> result = m_navQuery.findPolysAroundShape(m_startRef, m_queryPoly, m_filter); Result<FindPolysAroundResult> result = m_navQuery.findPolysAroundShape(m_startRef, m_queryPoly, m_filter);
if (result.Succeeded()) if (result.Succeeded())
@ -486,8 +486,8 @@ public class TestNavmeshTool : Tool
randomPoints.Clear(); randomPoints.Clear();
if (m_sposSet && m_startRef != 0 && m_eposSet) if (m_sposSet && m_startRef != 0 && m_eposSet)
{ {
float dx = m_epos[0] - m_spos[0]; float dx = m_epos.x - m_spos.x;
float dz = m_epos[2] - m_spos[2]; float dz = m_epos.z - m_spos.z;
float dist = (float)Math.Sqrt(dx * dx + dz * dz); float dist = (float)Math.Sqrt(dx * dx + dz * dz);
PolygonByCircleConstraint constraint = constrainByCircle PolygonByCircleConstraint constraint = constrainByCircle
? PolygonByCircleConstraint.strict() ? PolygonByCircleConstraint.strict()
@ -564,7 +564,7 @@ public class TestNavmeshTool : Tool
dd.begin(LINES, 3.0f); dd.begin(LINES, 3.0f);
for (int i = 0; i < m_smoothPath.Count; ++i) for (int i = 0; i < m_smoothPath.Count; ++i)
{ {
dd.vertex(m_smoothPath[i][0], m_smoothPath[i][1] + 0.1f, m_smoothPath[i][2], spathCol); dd.vertex(m_smoothPath[i].x, m_smoothPath[i].y + 0.1f, m_smoothPath[i].z, spathCol);
} }
dd.end(); dd.end();
@ -573,7 +573,7 @@ public class TestNavmeshTool : Tool
/* /*
if (m_pathIterNum) if (m_pathIterNum)
{ {
duDebugDrawNavMeshPoly(&dd, *m_navMesh, m_pathIterPolys[0], DebugDraw.duRGBA(255,255,255,128)); duDebugDrawNavMeshPoly(&dd, *m_navMesh, m_pathIterPolys.x, DebugDraw.duRGBA(255,255,255,128));
dd.depthMask(false); dd.depthMask(false);
dd.begin(DebugDrawPrimitives.LINES, 1.0f); dd.begin(DebugDrawPrimitives.LINES, 1.0f);
@ -582,17 +582,17 @@ public class TestNavmeshTool : Tool
int curCol = DebugDraw.duRGBA(255,255,255,220); int curCol = DebugDraw.duRGBA(255,255,255,220);
int steerCol = DebugDraw.duRGBA(0,192,255,220); int steerCol = DebugDraw.duRGBA(0,192,255,220);
dd.vertex(m_prevIterPos[0],m_prevIterPos[1]-0.3f,m_prevIterPos[2], prevCol); dd.vertex(m_prevIterPos.x,m_prevIterPos.y-0.3f,m_prevIterPos.z, prevCol);
dd.vertex(m_prevIterPos[0],m_prevIterPos[1]+0.3f,m_prevIterPos[2], prevCol); dd.vertex(m_prevIterPos.x,m_prevIterPos.y+0.3f,m_prevIterPos.z, prevCol);
dd.vertex(m_iterPos[0],m_iterPos[1]-0.3f,m_iterPos[2], curCol); dd.vertex(m_iterPos.x,m_iterPos.y-0.3f,m_iterPos.z, curCol);
dd.vertex(m_iterPos[0],m_iterPos[1]+0.3f,m_iterPos[2], curCol); dd.vertex(m_iterPos.x,m_iterPos.y+0.3f,m_iterPos.z, curCol);
dd.vertex(m_prevIterPos[0],m_prevIterPos[1]+0.3f,m_prevIterPos[2], prevCol); dd.vertex(m_prevIterPos.x,m_prevIterPos.y+0.3f,m_prevIterPos.z, prevCol);
dd.vertex(m_iterPos[0],m_iterPos[1]+0.3f,m_iterPos[2], prevCol); dd.vertex(m_iterPos.x,m_iterPos.y+0.3f,m_iterPos.z, prevCol);
dd.vertex(m_prevIterPos[0],m_prevIterPos[1]+0.3f,m_prevIterPos[2], steerCol); dd.vertex(m_prevIterPos.x,m_prevIterPos.y+0.3f,m_prevIterPos.z, steerCol);
dd.vertex(m_steerPos[0],m_steerPos[1]+0.3f,m_steerPos[2], steerCol); dd.vertex(m_steerPos.x,m_steerPos.y+0.3f,m_steerPos.z, steerCol);
for (int i = 0; i < m_steerPointCount-1; ++i) for (int i = 0; i < m_steerPointCount-1; ++i)
{ {
@ -638,10 +638,10 @@ public class TestNavmeshTool : Tool
col = spathCol; col = spathCol;
} }
dd.vertex(straightPathItem.getPos()[0], straightPathItem.getPos()[1] + 0.4f, dd.vertex(straightPathItem.getPos().x, straightPathItem.getPos().y + 0.4f,
straightPathItem.getPos()[2], col); straightPathItem.getPos().z, col);
dd.vertex(straightPathItem2.getPos()[0], straightPathItem2.getPos()[1] + 0.4f, dd.vertex(straightPathItem2.getPos().x, straightPathItem2.getPos().y + 0.4f,
straightPathItem2.getPos()[2], col); straightPathItem2.getPos().z, col);
} }
dd.end(); dd.end();
@ -667,8 +667,8 @@ public class TestNavmeshTool : Tool
col = spathCol; col = spathCol;
} }
dd.vertex(straightPathItem.getPos()[0], straightPathItem.getPos()[1] + 0.4f, dd.vertex(straightPathItem.getPos().x, straightPathItem.getPos().y + 0.4f,
straightPathItem.getPos()[2], col); straightPathItem.getPos().z, col);
} }
dd.end(); dd.end();
@ -696,10 +696,10 @@ public class TestNavmeshTool : Tool
{ {
StraightPathItem straightPathItem = m_straightPath[i]; StraightPathItem straightPathItem = m_straightPath[i];
StraightPathItem straightPathItem2 = m_straightPath[i + 1]; StraightPathItem straightPathItem2 = m_straightPath[i + 1];
dd.vertex(straightPathItem.getPos()[0], straightPathItem.getPos()[1] + 0.4f, dd.vertex(straightPathItem.getPos().x, straightPathItem.getPos().y + 0.4f,
straightPathItem.getPos()[2], spathCol); straightPathItem.getPos().z, spathCol);
dd.vertex(straightPathItem2.getPos()[0], straightPathItem2.getPos()[1] + 0.4f, dd.vertex(straightPathItem2.getPos().x, straightPathItem2.getPos().y + 0.4f,
straightPathItem2.getPos()[2], spathCol); straightPathItem2.getPos().z, spathCol);
} }
dd.end(); dd.end();
@ -707,8 +707,8 @@ public class TestNavmeshTool : Tool
for (int i = 0; i < m_straightPath.Count; ++i) for (int i = 0; i < m_straightPath.Count; ++i)
{ {
StraightPathItem straightPathItem = m_straightPath[i]; StraightPathItem straightPathItem = m_straightPath[i];
dd.vertex(straightPathItem.getPos()[0], straightPathItem.getPos()[1] + 0.4f, dd.vertex(straightPathItem.getPos().x, straightPathItem.getPos().y + 0.4f,
straightPathItem.getPos()[2], spathCol); straightPathItem.getPos().z, spathCol);
} }
dd.end(); dd.end();
@ -717,10 +717,10 @@ public class TestNavmeshTool : Tool
{ {
int hitCol = duRGBA(0, 0, 0, 128); int hitCol = duRGBA(0, 0, 0, 128);
dd.begin(LINES, 2.0f); dd.begin(LINES, 2.0f);
dd.vertex(m_hitPos[0], m_hitPos[1] + 0.4f, m_hitPos[2], hitCol); dd.vertex(m_hitPos.x, m_hitPos.y + 0.4f, m_hitPos.z, hitCol);
dd.vertex(m_hitPos[0] + m_hitNormal[0] * agentRadius, dd.vertex(m_hitPos.x + m_hitNormal.x * agentRadius,
m_hitPos[1] + 0.4f + m_hitNormal[1] * agentRadius, m_hitPos.y + 0.4f + m_hitNormal.y * agentRadius,
m_hitPos[2] + m_hitNormal[2] * agentRadius, hitCol); m_hitPos.z + m_hitNormal.z * agentRadius, hitCol);
dd.end(); dd.end();
} }
@ -733,15 +733,15 @@ public class TestNavmeshTool : Tool
dd.depthMask(false); dd.depthMask(false);
if (m_spos != Vector3f.Zero) if (m_spos != Vector3f.Zero)
{ {
dd.debugDrawCircle(m_spos[0], m_spos[1] + agentHeight / 2, m_spos[2], m_distanceToWall, dd.debugDrawCircle(m_spos.x, m_spos.y + agentHeight / 2, m_spos.z, m_distanceToWall,
duRGBA(64, 16, 0, 220), 2.0f); duRGBA(64, 16, 0, 220), 2.0f);
} }
if (m_hitPos != Vector3f.Zero) if (m_hitPos != Vector3f.Zero)
{ {
dd.begin(LINES, 3.0f); dd.begin(LINES, 3.0f);
dd.vertex(m_hitPos[0], m_hitPos[1] + 0.02f, m_hitPos[2], duRGBA(0, 0, 0, 192)); dd.vertex(m_hitPos.x, m_hitPos.y + 0.02f, m_hitPos.z, duRGBA(0, 0, 0, 192));
dd.vertex(m_hitPos[0], m_hitPos[1] + agentHeight, m_hitPos[2], duRGBA(0, 0, 0, 192)); dd.vertex(m_hitPos.x, m_hitPos.y + agentHeight, m_hitPos.z, duRGBA(0, 0, 0, 192));
dd.end(); dd.end();
} }
@ -760,7 +760,7 @@ public class TestNavmeshTool : Tool
dd.depthMask(false); dd.depthMask(false);
Vector3f p0 = getPolyCenter(m_navMesh, m_parent[i]); Vector3f p0 = getPolyCenter(m_navMesh, m_parent[i]);
Vector3f p1 = getPolyCenter(m_navMesh, m_polys[i]); Vector3f p1 = getPolyCenter(m_navMesh, m_polys[i]);
dd.debugDrawArc(p0[0], p0[1], p0[2], p1[0], p1[1], p1[2], 0.25f, 0.0f, 0.4f, dd.debugDrawArc(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z, 0.25f, 0.0f, 0.4f,
duRGBA(0, 0, 0, 128), 2.0f); duRGBA(0, 0, 0, 128), 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
@ -772,10 +772,10 @@ public class TestNavmeshTool : Tool
if (m_sposSet && m_eposSet) if (m_sposSet && m_eposSet)
{ {
dd.depthMask(false); dd.depthMask(false);
float dx = m_epos[0] - m_spos[0]; float dx = m_epos.x - m_spos.x;
float dz = m_epos[2] - m_spos[2]; float dz = m_epos.z - m_spos.z;
float dist = (float)Math.Sqrt(dx * dx + dz * dz); float dist = (float)Math.Sqrt(dx * dx + dz * dz);
dd.debugDrawCircle(m_spos[0], m_spos[1] + agentHeight / 2, m_spos[2], dist, duRGBA(64, 16, 0, 220), dd.debugDrawCircle(m_spos.x, m_spos.y + agentHeight / 2, m_spos.z, dist, duRGBA(64, 16, 0, 220),
2.0f); 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
@ -793,7 +793,7 @@ public class TestNavmeshTool : Tool
dd.depthMask(false); dd.depthMask(false);
Vector3f p0 = getPolyCenter(m_navMesh, m_parent[i]); Vector3f p0 = getPolyCenter(m_navMesh, m_parent[i]);
Vector3f p1 = getPolyCenter(m_navMesh, m_polys[i]); Vector3f p1 = getPolyCenter(m_navMesh, m_polys[i]);
dd.debugDrawArc(p0[0], p0[1], p0[2], p1[0], p1[1], p1[2], 0.25f, 0.0f, 0.4f, dd.debugDrawArc(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z, 0.25f, 0.0f, 0.4f,
duRGBA(0, 0, 0, 128), 2.0f); duRGBA(0, 0, 0, 128), 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
@ -830,7 +830,7 @@ public class TestNavmeshTool : Tool
dd.depthMask(false); dd.depthMask(false);
Vector3f p0 = getPolyCenter(m_navMesh, m_parent[i]); Vector3f p0 = getPolyCenter(m_navMesh, m_parent[i]);
Vector3f p1 = getPolyCenter(m_navMesh, m_polys[i]); Vector3f p1 = getPolyCenter(m_navMesh, m_polys[i]);
dd.debugDrawArc(p0[0], p0[1], p0[2], p1[0], p1[1], p1[2], 0.25f, 0.0f, 0.4f, dd.debugDrawArc(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z, 0.25f, 0.0f, 0.4f,
duRGBA(0, 0, 0, 128), 2.0f); duRGBA(0, 0, 0, 128), 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
@ -857,7 +857,7 @@ public class TestNavmeshTool : Tool
Vector3f delta = vSub(s3, s.vmin); Vector3f delta = vSub(s3, s.vmin);
Vector3f p0 = vMad(s.vmin, delta, 0.5f); Vector3f p0 = vMad(s.vmin, delta, 0.5f);
Vector3f norm = Vector3f.Of(delta[2], 0, -delta[0]); Vector3f norm = Vector3f.Of(delta.z, 0, -delta.x);
vNormalize(ref norm); vNormalize(ref norm);
Vector3f p1 = vMad(p0, norm, agentRadius * 0.5f); Vector3f p1 = vMad(p0, norm, agentRadius * 0.5f);
// Skip backfacing segments. // Skip backfacing segments.
@ -875,8 +875,8 @@ public class TestNavmeshTool : Tool
col = duRGBA(96, 32, 16, 192); col = duRGBA(96, 32, 16, 192);
} }
dd.vertex(p0[0], p0[1] + agentClimb, p0[2], col); dd.vertex(p0.x, p0.y + agentClimb, p0.z, col);
dd.vertex(p1[0], p1[1] + agentClimb, p1[2], col); dd.vertex(p1.x, p1.y + agentClimb, p1.z, col);
dd.vertex(s[0], s[1] + agentClimb, s[2], col); dd.vertex(s[0], s[1] + agentClimb, s[2], col);
dd.vertex(s[3], s[4] + agentClimb, s[5], col); dd.vertex(s[3], s[4] + agentClimb, s[5], col);
@ -893,7 +893,7 @@ public class TestNavmeshTool : Tool
if (m_sposSet) if (m_sposSet)
{ {
dd.depthMask(false); dd.depthMask(false);
dd.debugDrawCircle(m_spos[0], m_spos[1] + agentHeight / 2, m_spos[2], m_neighbourhoodRadius, dd.debugDrawCircle(m_spos.x, m_spos.y + agentHeight / 2, m_spos.z, m_neighbourhoodRadius,
duRGBA(64, 16, 0, 220), 2.0f); duRGBA(64, 16, 0, 220), 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
@ -906,17 +906,17 @@ public class TestNavmeshTool : Tool
int col = duRGBA(64, 16, 0, 220); int col = duRGBA(64, 16, 0, 220);
foreach (Vector3f point in randomPoints) foreach (Vector3f point in randomPoints)
{ {
dd.vertex(point[0], point[1] + 0.1f, point[2], col); dd.vertex(point.x, point.y + 0.1f, point.z, col);
} }
dd.end(); dd.end();
if (m_sposSet && m_eposSet) if (m_sposSet && m_eposSet)
{ {
dd.depthMask(false); dd.depthMask(false);
float dx = m_epos[0] - m_spos[0]; float dx = m_epos.x - m_spos.x;
float dz = m_epos[2] - m_spos[2]; float dz = m_epos.z - m_spos.z;
float dist = (float)Math.Sqrt(dx * dx + dz * dz); float dist = (float)Math.Sqrt(dx * dx + dz * dz);
dd.debugDrawCircle(m_spos[0], m_spos[1] + agentHeight / 2, m_spos[2], dist, duRGBA(64, 16, 0, 220), dd.debugDrawCircle(m_spos.x, m_spos.y + agentHeight / 2, m_spos.z, dist, duRGBA(64, 16, 0, 220),
2.0f); 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
@ -932,16 +932,16 @@ public class TestNavmeshTool : Tool
float c = m_sample.getSettingsUI().getAgentMaxClimb(); float c = m_sample.getSettingsUI().getAgentMaxClimb();
dd.depthMask(false); dd.depthMask(false);
// Agent dimensions. // Agent dimensions.
dd.debugDrawCylinderWire(pos[0] - r, pos[1] + 0.02f, pos[2] - r, pos[0] + r, pos[1] + h, pos[2] + r, col, 2.0f); dd.debugDrawCylinderWire(pos.x - r, pos.y + 0.02f, pos.z - r, pos.x + r, pos.y + h, pos.z + r, col, 2.0f);
dd.debugDrawCircle(pos[0], pos[1] + c, pos[2], r, duRGBA(0, 0, 0, 64), 1.0f); dd.debugDrawCircle(pos.x, pos.y + c, pos.z, r, duRGBA(0, 0, 0, 64), 1.0f);
int colb = duRGBA(0, 0, 0, 196); int colb = duRGBA(0, 0, 0, 196);
dd.begin(LINES); dd.begin(LINES);
dd.vertex(pos[0], pos[1] - c, pos[2], colb); dd.vertex(pos.x, pos.y - c, pos.z, colb);
dd.vertex(pos[0], pos[1] + c, pos[2], colb); dd.vertex(pos.x, pos.y + c, pos.z, colb);
dd.vertex(pos[0] - r / 2, pos[1] + 0.02f, pos[2], colb); dd.vertex(pos.x - r / 2, pos.y + 0.02f, pos.z, colb);
dd.vertex(pos[0] + r / 2, pos[1] + 0.02f, pos[2], colb); dd.vertex(pos.x + r / 2, pos.y + 0.02f, pos.z, colb);
dd.vertex(pos[0], pos[1] + 0.02f, pos[2] - r / 2, colb); dd.vertex(pos.x, pos.y + 0.02f, pos.z - r / 2, colb);
dd.vertex(pos[0], pos[1] + 0.02f, pos[2] + r / 2, colb); dd.vertex(pos.x, pos.y + 0.02f, pos.z + r / 2, colb);
dd.end(); dd.end();
dd.depthMask(true); dd.depthMask(true);
} }
@ -958,15 +958,15 @@ public class TestNavmeshTool : Tool
for (int i = 0; i < poly.vertCount; ++i) for (int i = 0; i < poly.vertCount; ++i)
{ {
int v = poly.verts[i] * 3; int v = poly.verts[i] * 3;
center[0] += tile.data.verts[v]; center.x += tile.data.verts[v];
center[1] += tile.data.verts[v + 1]; center.y += tile.data.verts[v + 1];
center[2] += tile.data.verts[v + 2]; center.z += tile.data.verts[v + 2];
} }
float s = 1.0f / poly.vertCount; float s = 1.0f / poly.vertCount;
center[0] *= s; center.x *= s;
center[1] *= s; center.y *= s;
center[2] *= s; center.z *= s;
} }
return center; return center;
@ -1016,4 +1016,4 @@ public class TestNavmeshTool : Tool
} }
} }
} }
} }

View File

@ -378,4 +378,4 @@ public class RcSettingsView : IRcView
{ {
return navMeshInputTrigerred; return navMeshInputTrigerred;
} }
} }