forked from mirror/DotRecast
intergrate math funcitons
This commit is contained in:
parent
762e62b757
commit
553f236320
|
@ -1,93 +0,0 @@
|
|||
/*
|
||||
Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
|
||||
recast4j copyright (c) 2015-2019 Piotr Piastucki piotr@jtilia.org
|
||||
DotRecast Copyright (c) 2023 Choi Ikpil ikpil@naver.com
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace DotRecast.Core
|
||||
{
|
||||
public class DemoMath
|
||||
{
|
||||
public static float vDistSqr(float[] v1, float[] v2, int i)
|
||||
{
|
||||
float dx = v2[i] - v1[0];
|
||||
float dy = v2[i + 1] - v1[1];
|
||||
float dz = v2[i + 2] - v1[2];
|
||||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
|
||||
public static float[] vCross(float[] v1, float[] v2)
|
||||
{
|
||||
float[] dest = new float[3];
|
||||
dest[0] = v1[1] * v2[2] - v1[2] * v2[1];
|
||||
dest[1] = v1[2] * v2[0] - v1[0] * v2[2];
|
||||
dest[2] = v1[0] * v2[1] - v1[1] * v2[0];
|
||||
return dest;
|
||||
}
|
||||
|
||||
public static float vDot(float[] v1, float[] v2)
|
||||
{
|
||||
return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
|
||||
}
|
||||
|
||||
public static float sqr(float f)
|
||||
{
|
||||
return f * f;
|
||||
}
|
||||
|
||||
public static float getPathLen(float[] path, int npath)
|
||||
{
|
||||
float totd = 0;
|
||||
for (int i = 0; i < npath - 1; ++i)
|
||||
{
|
||||
totd += (float)Math.Sqrt(vDistSqr(path, i * 3, (i + 1) * 3));
|
||||
}
|
||||
|
||||
return totd;
|
||||
}
|
||||
|
||||
public static float vDistSqr(float[] v, int i, int j)
|
||||
{
|
||||
float dx = v[i] - v[j];
|
||||
float dy = v[i + 1] - v[j + 1];
|
||||
float dz = v[i + 2] - v[j + 2];
|
||||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
|
||||
public static float step(float threshold, float v)
|
||||
{
|
||||
return v < threshold ? 0.0f : 1.0f;
|
||||
}
|
||||
|
||||
public static int clamp(int v, int min, int max)
|
||||
{
|
||||
return Math.Max(Math.Min(v, max), min);
|
||||
}
|
||||
|
||||
public static float clamp(float v, float min, float max)
|
||||
{
|
||||
return Math.Max(Math.Min(v, max), min);
|
||||
}
|
||||
|
||||
public static float lerp(float f, float g, float u)
|
||||
{
|
||||
return u * g + (1f - u) * f;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,11 +20,79 @@ freely, subject to the following restrictions:
|
|||
|
||||
using System;
|
||||
|
||||
namespace DotRecast.Detour
|
||||
namespace DotRecast.Core
|
||||
{
|
||||
public static class DetourCommon
|
||||
public static class RecastMath
|
||||
{
|
||||
public const float EPS = 1e-4f;
|
||||
private static readonly float EQUAL_THRESHOLD = sqr(1.0f / 16384.0f);
|
||||
|
||||
public static float vDistSqr(float[] v1, float[] v2, int i)
|
||||
{
|
||||
float dx = v2[i] - v1[0];
|
||||
float dy = v2[i + 1] - v1[1];
|
||||
float dz = v2[i + 2] - v1[2];
|
||||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
|
||||
public static float[] vCross(float[] v1, float[] v2)
|
||||
{
|
||||
float[] dest = new float[3];
|
||||
dest[0] = v1[1] * v2[2] - v1[2] * v2[1];
|
||||
dest[1] = v1[2] * v2[0] - v1[0] * v2[2];
|
||||
dest[2] = v1[0] * v2[1] - v1[1] * v2[0];
|
||||
return dest;
|
||||
}
|
||||
|
||||
public static float vDot(float[] v1, float[] v2)
|
||||
{
|
||||
return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
|
||||
}
|
||||
|
||||
public static float sqr(float f)
|
||||
{
|
||||
return f * f;
|
||||
}
|
||||
|
||||
public static float getPathLen(float[] path, int npath)
|
||||
{
|
||||
float totd = 0;
|
||||
for (int i = 0; i < npath - 1; ++i)
|
||||
{
|
||||
totd += (float)Math.Sqrt(vDistSqr(path, i * 3, (i + 1) * 3));
|
||||
}
|
||||
|
||||
return totd;
|
||||
}
|
||||
|
||||
public static float vDistSqr(float[] v, int i, int j)
|
||||
{
|
||||
float dx = v[i] - v[j];
|
||||
float dy = v[i + 1] - v[j + 1];
|
||||
float dz = v[i + 2] - v[j + 2];
|
||||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
|
||||
public static float step(float threshold, float v)
|
||||
{
|
||||
return v < threshold ? 0.0f : 1.0f;
|
||||
}
|
||||
|
||||
public static float clamp(float v, float min, float max)
|
||||
{
|
||||
return Math.Max(Math.Min(v, max), min);
|
||||
}
|
||||
|
||||
public static int clamp(int v, int min, int max)
|
||||
{
|
||||
return Math.Max(Math.Min(v, max), min);
|
||||
}
|
||||
|
||||
public static float lerp(float f, float g, float u)
|
||||
{
|
||||
return u * g + (1f - u) * f;
|
||||
}
|
||||
|
||||
|
||||
/// Performs a scaled vector addition. (@p v1 + (@p v2 * @p s))
|
||||
/// @param[out] dest The result vector. [(x, y, z)]
|
||||
|
@ -159,11 +227,6 @@ namespace DotRecast.Detour
|
|||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
|
||||
public static float sqr(float a)
|
||||
{
|
||||
return a * a;
|
||||
}
|
||||
|
||||
/// Derives the square of the scalar length of the vector. (len * len)
|
||||
/// @param[in] v The vector. [(x, y, z)]
|
||||
/// @return The square of the scalar length of the vector.
|
||||
|
@ -185,15 +248,6 @@ namespace DotRecast.Detour
|
|||
return (float)Math.Sqrt(dx * dx + dy * dy + dz * dz);
|
||||
}
|
||||
|
||||
public static float clamp(float v, float min, float max)
|
||||
{
|
||||
return Math.Max(Math.Min(v, max), min);
|
||||
}
|
||||
|
||||
public static int clamp(int v, int min, int max)
|
||||
{
|
||||
return Math.Max(Math.Min(v, max), min);
|
||||
}
|
||||
|
||||
/// Derives the distance between the specified points on the xz-plane.
|
||||
/// @param[in] v1 A point. [(x, y, z)]
|
||||
|
@ -236,7 +290,6 @@ namespace DotRecast.Detour
|
|||
}
|
||||
}
|
||||
|
||||
private static readonly float EQUAL_THRESHOLD = sqr(1.0f / 16384.0f);
|
||||
|
||||
/// Performs a 'sloppy' colocation check of the specified points.
|
||||
/// @param[in] p0 A point. [(x, y, z)]
|
|
@ -18,7 +18,7 @@ freely, subject to the following restrictions:
|
|||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
namespace DotRecast.Detour
|
||||
namespace DotRecast.Core
|
||||
{
|
||||
/**
|
||||
* Wrapper for 3-element pieces (3D vectors) of a bigger float array.
|
|
@ -27,7 +27,7 @@ using DotRecast.Detour.Crowd.Tracking;
|
|||
|
||||
namespace DotRecast.Detour.Crowd
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
/**
|
||||
* Members in this module implement local steering and dynamic avoidance features.
|
||||
|
|
|
@ -23,7 +23,7 @@ using System.Collections.Generic;
|
|||
|
||||
namespace DotRecast.Detour.Crowd
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
/// Represents an agent managed by a #dtCrowd object.
|
||||
/// @ingroup crowd
|
||||
|
|
|
@ -23,7 +23,7 @@ using System.Collections.Generic;
|
|||
|
||||
namespace DotRecast.Detour.Crowd
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class LocalBoundary
|
||||
{
|
||||
|
|
|
@ -23,7 +23,7 @@ using DotRecast.Detour.Crowd.Tracking;
|
|||
|
||||
namespace DotRecast.Detour.Crowd
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class ObstacleAvoidanceQuery
|
||||
{
|
||||
|
|
|
@ -23,7 +23,7 @@ using System.Collections.Generic;
|
|||
|
||||
namespace DotRecast.Detour.Crowd
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
/**
|
||||
* Represents a dynamic polygon corridor used to plan agent movement.
|
||||
|
|
|
@ -22,7 +22,7 @@ using System.Collections.Generic;
|
|||
|
||||
namespace DotRecast.Detour.Crowd
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class PathQueue
|
||||
{
|
||||
|
|
|
@ -22,7 +22,7 @@ using System;
|
|||
|
||||
namespace DotRecast.Detour.Crowd.Tracking
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class ObstacleAvoidanceDebugData
|
||||
{
|
||||
|
|
|
@ -18,7 +18,7 @@ freely, subject to the following restrictions:
|
|||
|
||||
using System.Collections.Generic;
|
||||
using DotRecast.Recast;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Dynamic
|
||||
{
|
||||
|
|
|
@ -16,7 +16,7 @@ freely, subject to the following restrictions:
|
|||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Extras
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using System;
|
||||
using DotRecast.Recast;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Extras.Jumplink
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Extras.Jumplink
|
||||
{
|
||||
|
|
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using DotRecast.Core;
|
||||
using DotRecast.Recast;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Extras.Jumplink
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using System;
|
||||
using DotRecast.Recast;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Extras.Jumplink
|
||||
{
|
||||
|
|
|
@ -22,7 +22,7 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using DotRecast.Core;
|
||||
using DotRecast.Detour.TileCache.Io;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.TileCache
|
||||
{
|
||||
|
|
|
@ -24,7 +24,7 @@ using System.IO;
|
|||
using DotRecast.Core;
|
||||
using DotRecast.Detour.TileCache.Io;
|
||||
using DotRecast.Detour.TileCache.Io.Compress;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.TileCache
|
||||
{
|
||||
|
|
|
@ -20,7 +20,7 @@ using System;
|
|||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
/**
|
||||
* Convex-convex intersection based on "Computational Geometry in C" by Joseph O'Rourke
|
||||
|
|
|
@ -22,7 +22,7 @@ using System;
|
|||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
/**
|
||||
* <b>The Default Implementation</b>
|
||||
|
|
|
@ -15,10 +15,10 @@ freely, subject to the following restrictions:
|
|||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
|
||||
public class DefaultQueryHeuristic : QueryHeuristic
|
||||
{
|
||||
|
|
|
@ -2,7 +2,7 @@ using System;
|
|||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class FindNearestPolyQuery : PolyQuery
|
||||
{
|
||||
|
|
|
@ -22,7 +22,7 @@ using DotRecast.Core;
|
|||
|
||||
namespace DotRecast.Detour.Io
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
|
||||
public class MeshSetReader
|
||||
|
|
|
@ -18,10 +18,11 @@ freely, subject to the following restrictions:
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using DotRecast.Core;
|
||||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
|
||||
public class LegacyNavMeshQuery : NavMeshQuery
|
||||
|
|
|
@ -25,7 +25,7 @@ using DotRecast.Core;
|
|||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class NavMesh
|
||||
{
|
||||
|
|
|
@ -20,10 +20,11 @@ freely, subject to the following restrictions:
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using DotRecast.Core;
|
||||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class NavMeshBuilder
|
||||
{
|
||||
|
|
|
@ -21,10 +21,11 @@ freely, subject to the following restrictions:
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using DotRecast.Core;
|
||||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static Node;
|
||||
|
||||
public class NavMeshQuery
|
||||
|
|
|
@ -20,7 +20,7 @@ using System;
|
|||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public interface PolygonByCircleConstraint
|
||||
{
|
||||
|
|
|
@ -20,7 +20,7 @@ freely, subject to the following restrictions:
|
|||
|
||||
namespace DotRecast.Detour
|
||||
{
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
//TODO: (PP) Add comments
|
||||
public class StraightPathItem
|
||||
|
|
|
@ -22,6 +22,7 @@ using System.Threading.Tasks;
|
|||
using DotRecast.Core;
|
||||
using DotRecast.Detour;
|
||||
using DotRecast.Recast.Demo.Geom;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Recast.Demo.Builder;
|
||||
|
||||
|
@ -99,7 +100,7 @@ public class TileNavMeshBuilder : AbstractNavMeshBuilder
|
|||
int[] wh = Recast.calcGridSize(geom.getMeshBoundsMin(), geom.getMeshBoundsMax(), cellSize);
|
||||
int tw = (wh[0] + tileSize - 1) / tileSize;
|
||||
int th = (wh[1] + tileSize - 1) / tileSize;
|
||||
int tileBits = Math.Min(DetourCommon.ilog2(DetourCommon.nextPow2(tw * th)), 14);
|
||||
int tileBits = Math.Min(ilog2(nextPow2(tw * th)), 14);
|
||||
return tileBits;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ freely, subject to the following restrictions:
|
|||
|
||||
using System;
|
||||
using DotRecast.Core;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Recast.Demo.Geom;
|
||||
|
||||
|
@ -33,11 +33,11 @@ public class Intersections
|
|||
|
||||
// Compute triangle normal. Can be precalculated or cached if
|
||||
// intersecting multiple segments against the same triangle
|
||||
float[] norm = DemoMath.vCross(ab, ac);
|
||||
float[] norm = RecastMath.vCross(ab, ac);
|
||||
|
||||
// Compute denominator d. If d <= 0, segment is parallel to or points
|
||||
// away from triangle, so exit early
|
||||
float d = DemoMath.vDot(qp, norm);
|
||||
float d = RecastMath.vDot(qp, norm);
|
||||
if (d <= 0.0f)
|
||||
{
|
||||
return null;
|
||||
|
@ -47,7 +47,7 @@ public class Intersections
|
|||
// intersects iff 0 <= t. Segment intersects iff 0 <= t <= 1. Delay
|
||||
// dividing by d until intersection has been found to pierce triangle
|
||||
float[] ap = vSub(sp, a);
|
||||
float t = DemoMath.vDot(ap, norm);
|
||||
float t = RecastMath.vDot(ap, norm);
|
||||
if (t < 0.0f)
|
||||
{
|
||||
return null;
|
||||
|
@ -59,14 +59,14 @@ public class Intersections
|
|||
}
|
||||
|
||||
// Compute barycentric coordinate components and test if within bounds
|
||||
float[] e = DemoMath.vCross(qp, ap);
|
||||
v = DemoMath.vDot(ac, e);
|
||||
float[] e = RecastMath.vCross(qp, ap);
|
||||
v = RecastMath.vDot(ac, e);
|
||||
if (v < 0.0f || v > d)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
w = -DemoMath.vDot(ab, e);
|
||||
w = -RecastMath.vDot(ab, e);
|
||||
if (w < 0.0f || v + w > d)
|
||||
{
|
||||
return null;
|
||||
|
|
|
@ -45,7 +45,7 @@ using DotRecast.Recast.Demo.Tools;
|
|||
using DotRecast.Recast.Demo.UI;
|
||||
using Silk.NET.SDL;
|
||||
using Silk.NET.Windowing.Sdl;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using Color = System.Drawing.Color;
|
||||
using Window = Silk.NET.Windowing.Window;
|
||||
|
||||
|
@ -457,13 +457,13 @@ public class RecastDemo
|
|||
var tempMoveDown = keyboard.IsKeyPressed(Key.E) || keyboard.IsKeyPressed(Key.PageDown) ? 1.0f : -1f;
|
||||
var tempMoveAccel = keyboard.IsKeyPressed(Key.ShiftLeft) || keyboard.IsKeyPressed(Key.ShiftRight) ? 1.0f : -1f;
|
||||
|
||||
_moveFront = DemoMath.clamp(_moveFront + tempMoveFront * dt * 4.0f, 0, 2.0f);
|
||||
_moveLeft = DemoMath.clamp(_moveLeft + tempMoveLeft * dt * 4.0f, 0, 2.0f);
|
||||
_moveBack = DemoMath.clamp(_moveBack + tempMoveBack * dt * 4.0f, 0, 2.0f);
|
||||
_moveRight = DemoMath.clamp(_moveRight + tempMoveRight * dt * 4.0f, 0, 2.0f);
|
||||
_moveUp = DemoMath.clamp(_moveUp + tempMoveUp * dt * 4.0f, 0, 2.0f);
|
||||
_moveDown = DemoMath.clamp(_moveDown + tempMoveDown * dt * 4.0f, 0, 2.0f);
|
||||
_moveAccel = DemoMath.clamp(_moveAccel + tempMoveAccel * dt * 4.0f, 0, 2.0f);
|
||||
_moveFront = RecastMath.clamp(_moveFront + tempMoveFront * dt * 4.0f, 0, 2.0f);
|
||||
_moveLeft = RecastMath.clamp(_moveLeft + tempMoveLeft * dt * 4.0f, 0, 2.0f);
|
||||
_moveBack = RecastMath.clamp(_moveBack + tempMoveBack * dt * 4.0f, 0, 2.0f);
|
||||
_moveRight = RecastMath.clamp(_moveRight + tempMoveRight * dt * 4.0f, 0, 2.0f);
|
||||
_moveUp = RecastMath.clamp(_moveUp + tempMoveUp * dt * 4.0f, 0, 2.0f);
|
||||
_moveDown = RecastMath.clamp(_moveDown + tempMoveDown * dt * 4.0f, 0, 2.0f);
|
||||
_moveAccel = RecastMath.clamp(_moveAccel + tempMoveAccel * dt * 4.0f, 0, 2.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -708,7 +708,7 @@ public class RecastDemo
|
|||
if (bmin != null && bmax != null)
|
||||
{
|
||||
camr = (float)(Math.Sqrt(
|
||||
DemoMath.sqr(bmax[0] - bmin[0]) + DemoMath.sqr(bmax[1] - bmin[1]) + DemoMath.sqr(bmax[2] - bmin[2]))
|
||||
RecastMath.sqr(bmax[0] - bmin[0]) + RecastMath.sqr(bmax[1] - bmin[1]) + RecastMath.sqr(bmax[2] - bmin[2]))
|
||||
/ 2);
|
||||
cameraPos[0] = (bmax[0] + bmin[0]) / 2 + camr;
|
||||
cameraPos[1] = (bmax[1] + bmin[1]) / 2 + camr;
|
||||
|
|
|
@ -79,7 +79,7 @@ public class ConvexVolumeTool : Tool
|
|||
// Create
|
||||
|
||||
// If clicked on that last pt, create the shape.
|
||||
if (pts.Count > 0 && DemoMath.vDistSqr(p,
|
||||
if (pts.Count > 0 && RecastMath.vDistSqr(p,
|
||||
new float[] { pts[pts.Count - 3], pts[pts.Count - 2], pts[pts.Count - 1] },
|
||||
0) < 0.2f * 0.2f)
|
||||
{
|
||||
|
|
|
@ -186,7 +186,7 @@ public class CrowdProfilingTool
|
|||
bool valid = true;
|
||||
foreach (FindRandomPointResult zone in zones)
|
||||
{
|
||||
if (DemoMath.vDistSqr(zone.getRandomPt(), result.result.getRandomPt(), 0) < zoneSeparation)
|
||||
if (RecastMath.vDistSqr(zone.getRandomPt(), result.result.getRandomPt(), 0) < zoneSeparation)
|
||||
{
|
||||
valid = false;
|
||||
break;
|
||||
|
@ -310,7 +310,7 @@ public class CrowdProfilingTool
|
|||
List<FindRandomPointResult> potentialTargets = new();
|
||||
foreach (FindRandomPointResult zone in zones)
|
||||
{
|
||||
if (DemoMath.vDistSqr(zone.getRandomPt(), ag.npos, 0) > zoneRadius * zoneRadius)
|
||||
if (RecastMath.vDistSqr(zone.getRandomPt(), ag.npos, 0) > zoneRadius * zoneRadius)
|
||||
{
|
||||
potentialTargets.Add(zone);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ using DotRecast.Recast.Demo.Geom;
|
|||
using ImGuiNET;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDraw;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDrawPrimitives;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Recast.Demo.Tools;
|
||||
|
||||
|
@ -323,10 +324,10 @@ public class CrowdTool : Tool
|
|||
|
||||
private float[] calcVel(float[] pos, float[] tgt, float speed)
|
||||
{
|
||||
float[] vel = DetourCommon.vSub(tgt, pos);
|
||||
float[] vel = vSub(tgt, pos);
|
||||
vel[1] = 0.0f;
|
||||
DetourCommon.vNormalize(vel);
|
||||
return DetourCommon.vScale(vel, speed);
|
||||
vNormalize(vel);
|
||||
return vScale(vel, speed);
|
||||
}
|
||||
|
||||
public override void handleRender(NavMeshRenderer renderer)
|
||||
|
@ -414,7 +415,7 @@ public class CrowdTool : Tool
|
|||
dd.begin(LINES, 3.0f);
|
||||
float[] prev = new float[3];
|
||||
float preva = 1;
|
||||
DetourCommon.vCopy(prev, pos);
|
||||
vCopy(prev, pos);
|
||||
for (int j = 0; j < AGENT_MAX_TRAIL - 1; ++j)
|
||||
{
|
||||
int idx = (trail.htrail + AGENT_MAX_TRAIL - j) % AGENT_MAX_TRAIL;
|
||||
|
@ -423,7 +424,7 @@ public class CrowdTool : Tool
|
|||
dd.vertex(prev[0], prev[1] + 0.1f, prev[2], 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)));
|
||||
preva = a;
|
||||
DetourCommon.vCopy(prev, trail.trail, v);
|
||||
vCopy(prev, trail.trail, v);
|
||||
}
|
||||
|
||||
dd.end();
|
||||
|
@ -500,7 +501,7 @@ public class CrowdTool : Tool
|
|||
float[] s = ag.boundary.getSegment(j);
|
||||
float[] s0 = new float[] { s[0], s[1], s[2] };
|
||||
float[] s3 = new float[] { s[3], s[4], s[5] };
|
||||
if (DetourCommon.triArea2D(pos, s0, s3) < 0.0f)
|
||||
if (triArea2D(pos, s0, s3) < 0.0f)
|
||||
col = duDarkenCol(col);
|
||||
|
||||
dd.appendArrow(s[0], s[1] + 0.2f, s[2], s[3], s[4] + 0.2f, s[5], 0.0f, 0.3f, col);
|
||||
|
|
|
@ -33,7 +33,7 @@ using ImGuiNET;
|
|||
using Silk.NET.Windowing;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDraw;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDrawPrimitives;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Recast.Demo.Tools;
|
||||
|
||||
|
@ -252,7 +252,7 @@ public class DynamicUpdateTool : Tool
|
|||
float[] baseUp = new float[] { 0, 1, 0 };
|
||||
float[] forward = new float[] { (1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble()) };
|
||||
vNormalize(forward);
|
||||
float[] side = DemoMath.vCross(forward, baseUp);
|
||||
float[] side = RecastMath.vCross(forward, baseUp);
|
||||
BoxCollider @base = new BoxCollider(baseCenter, BoxCollider.getHalfEdges(baseUp, forward, baseExtent),
|
||||
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb);
|
||||
float[] roofExtent = new float[] { 4.5f, 4.5f, 8f };
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using DotRecast.Recast.Demo.Draw;
|
||||
using static DotRecast.Recast.RecastVectors;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.Demo.Tools.Gizmos.GizmoHelper;
|
||||
|
||||
namespace DotRecast.Recast.Demo.Tools.Gizmos;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using DotRecast.Recast.Demo.Draw;
|
||||
using static DotRecast.Recast.RecastVectors;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.Demo.Tools.Gizmos.GizmoHelper;
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using System;
|
||||
using DotRecast.Recast.Demo.Draw;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Recast.Demo.Tools.Gizmos;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
using DotRecast.Recast.Demo.Draw;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.Demo.Tools.Gizmos.GizmoHelper;
|
||||
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ using DotRecast.Recast.Demo.Builder;
|
|||
using DotRecast.Recast.Demo.Draw;
|
||||
using DotRecast.Recast.Demo.Geom;
|
||||
using ImGuiNET;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDraw;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDrawPrimitives;
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ public class OffMeshConnectionTool : Tool
|
|||
DemoOffMeshConnection nearestConnection = null;
|
||||
foreach (DemoOffMeshConnection offMeshCon in geom.getOffMeshConnections())
|
||||
{
|
||||
float d = Math.Min(DemoMath.vDistSqr(p, offMeshCon.verts, 0), DemoMath.vDistSqr(p, offMeshCon.verts, 3));
|
||||
float d = Math.Min(RecastMath.vDistSqr(p, offMeshCon.verts, 0), RecastMath.vDistSqr(p, offMeshCon.verts, 3));
|
||||
if (d < nearestDist && Math.Sqrt(d) < sample.getSettingsUI().getAgentRadius())
|
||||
{
|
||||
nearestDist = d;
|
||||
|
|
|
@ -6,7 +6,7 @@ using DotRecast.Detour;
|
|||
using DotRecast.Recast.Demo.Builder;
|
||||
using DotRecast.Recast.Demo.Draw;
|
||||
using ImGuiNET;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDraw;
|
||||
using static DotRecast.Recast.Demo.Draw.DebugDrawPrimitives;
|
||||
|
||||
|
@ -257,7 +257,7 @@ public class TestNavmeshTool : Tool
|
|||
|
||||
// Find movement delta.
|
||||
float[] delta = vSub(steerTarget.steerPos, iterPos);
|
||||
float len = (float)Math.Sqrt(DemoMath.vDot(delta, delta));
|
||||
float len = (float)Math.Sqrt(RecastMath.vDot(delta, delta));
|
||||
// If the steer target is end of path or off-mesh link, do not move past the location.
|
||||
if ((endOfPath || offMeshConnection) && len < STEP_SIZE)
|
||||
{
|
||||
|
@ -882,8 +882,8 @@ public class TestNavmeshTool : Tool
|
|||
float[] s = wallSegments.getSegmentVerts()[j];
|
||||
float[] s3 = new float[] { s[3], s[4], s[5] };
|
||||
// Skip too distant segments.
|
||||
Tuple<float, float> distSqr = DetourCommon.distancePtSegSqr2D(m_spos, s, 0, 3);
|
||||
if (distSqr.Item1 > DemoMath.sqr(m_neighbourhoodRadius))
|
||||
Tuple<float, float> distSqr = distancePtSegSqr2D(m_spos, s, 0, 3);
|
||||
if (distSqr.Item1 > RecastMath.sqr(m_neighbourhoodRadius))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -903,7 +903,7 @@ public class TestNavmeshTool : Tool
|
|||
else
|
||||
{
|
||||
int col = duRGBA(192, 32, 16, 192);
|
||||
if (DetourCommon.triArea2D(m_spos, s, s3) < 0.0f)
|
||||
if (triArea2D(m_spos, s, s3) < 0.0f)
|
||||
{
|
||||
col = duRGBA(96, 32, 16, 192);
|
||||
}
|
||||
|
@ -1026,7 +1026,7 @@ public class TestNavmeshTool : Tool
|
|||
{
|
||||
// In case of partial path, make sure the end point is clamped to the last polygon.
|
||||
float[] epos = new float[3];
|
||||
DetourCommon.vCopy(epos, m_epos);
|
||||
vCopy(epos, m_epos);
|
||||
if (m_polys[m_polys.Count - 1] != m_endRef)
|
||||
{
|
||||
Result<ClosestPointOnPolyResult> result = m_navQuery
|
||||
|
|
|
@ -22,7 +22,7 @@ using System;
|
|||
|
||||
namespace DotRecast.Recast
|
||||
{
|
||||
public class RecastCommon
|
||||
public static class RecastCommon
|
||||
{
|
||||
/// Gets neighbor connection data for the specified direction.
|
||||
/// @param[in] s The span to check.
|
||||
|
@ -75,10 +75,5 @@ namespace DotRecast.Recast
|
|||
int con = s.con;
|
||||
s.con = (con & ~(0x3f << shift)) | ((i & 0x3f) << shift);
|
||||
}
|
||||
|
||||
public static int clamp(int v, int min, int max)
|
||||
{
|
||||
return Math.Max(Math.Min(max, v), min);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,11 +18,12 @@ freely, subject to the following restrictions:
|
|||
|
||||
using System;
|
||||
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.RecastConstants;
|
||||
using static DotRecast.Recast.RecastVectors;
|
||||
|
||||
namespace DotRecast.Recast
|
||||
{
|
||||
using static RecastConstants;
|
||||
using static RecastVectors;
|
||||
|
||||
public class RecastCompact
|
||||
{
|
||||
private const int MAX_LAYERS = RC_NOT_CONNECTED - 1;
|
||||
|
@ -92,8 +93,8 @@ namespace DotRecast.Recast
|
|||
{
|
||||
int bot = s.smax;
|
||||
int top = s.next != null ? (int)s.next.smin : MAX_HEIGHT;
|
||||
chf.spans[idx].y = RecastCommon.clamp(bot, 0, MAX_HEIGHT);
|
||||
chf.spans[idx].h = RecastCommon.clamp(top - bot, 0, MAX_HEIGHT);
|
||||
chf.spans[idx].y = clamp(bot, 0, MAX_HEIGHT);
|
||||
chf.spans[idx].h = clamp(top - bot, 0, MAX_HEIGHT);
|
||||
chf.areas[idx] = s.area;
|
||||
idx++;
|
||||
c.count++;
|
||||
|
|
|
@ -19,12 +19,12 @@ freely, subject to the following restrictions:
|
|||
using System;
|
||||
using DotRecast.Core;
|
||||
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.RecastConstants;
|
||||
using static DotRecast.Recast.RecastVectors;
|
||||
|
||||
namespace DotRecast.Recast
|
||||
{
|
||||
using static RecastConstants;
|
||||
using static RecastVectors;
|
||||
using static RecastCommon;
|
||||
|
||||
public class RecastFilledVolumeRasterization
|
||||
{
|
||||
private const float EPSILON = 0.00001f;
|
||||
|
@ -230,8 +230,8 @@ namespace DotRecast.Recast
|
|||
int smax = (int)Math.Ceiling((h[1] - hf.bmin[1]) * ich);
|
||||
if (smin != smax)
|
||||
{
|
||||
int ismin = RecastCommon.clamp(smin, 0, SPAN_MAX_HEIGHT);
|
||||
int ismax = RecastCommon.clamp(smax, ismin + 1, SPAN_MAX_HEIGHT);
|
||||
int ismin = clamp(smin, 0, SPAN_MAX_HEIGHT);
|
||||
int ismax = clamp(smax, ismin + 1, SPAN_MAX_HEIGHT);
|
||||
RecastRasterization.addSpan(hf, x, z, ismin, ismax, area, flagMergeThr);
|
||||
}
|
||||
}
|
||||
|
@ -786,11 +786,6 @@ namespace DotRecast.Recast
|
|||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
|
||||
public static float clamp(float v, float min, float max)
|
||||
{
|
||||
return Math.Max(Math.Min(max, v), min);
|
||||
}
|
||||
|
||||
private static bool overlapBounds(float[] amin, float[] amax, float[] bounds)
|
||||
{
|
||||
bool overlap = true;
|
||||
|
|
|
@ -21,11 +21,12 @@ freely, subject to the following restrictions:
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using DotRecast.Core;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.RecastCommon;
|
||||
using static DotRecast.Recast.RecastConstants;
|
||||
|
||||
namespace DotRecast.Recast
|
||||
{
|
||||
using static RecastCommon;
|
||||
using static RecastConstants;
|
||||
|
||||
public class RecastMeshDetail
|
||||
{
|
||||
|
@ -273,8 +274,8 @@ namespace DotRecast.Recast
|
|||
{
|
||||
int ix = (int)Math.Floor(fx * ics + 0.01f);
|
||||
int iz = (int)Math.Floor(fz * ics + 0.01f);
|
||||
ix = RecastCommon.clamp(ix - hp.xmin, 0, hp.width - 1);
|
||||
iz = RecastCommon.clamp(iz - hp.ymin, 0, hp.height - 1);
|
||||
ix = clamp(ix - hp.xmin, 0, hp.width - 1);
|
||||
iz = clamp(iz - hp.ymin, 0, hp.height - 1);
|
||||
int h = hp.data[ix + iz * hp.width];
|
||||
if (h == RC_UNSET_HEIGHT)
|
||||
{
|
||||
|
|
|
@ -19,10 +19,11 @@ freely, subject to the following restrictions:
|
|||
*/
|
||||
|
||||
using System;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.RecastConstants;
|
||||
|
||||
namespace DotRecast.Recast
|
||||
{
|
||||
using static RecastConstants;
|
||||
|
||||
public class RecastRasterization
|
||||
{
|
||||
|
@ -269,8 +270,8 @@ namespace DotRecast.Recast
|
|||
int w = hf.width;
|
||||
int h = hf.height;
|
||||
// use -1 rather than 0 to cut the polygon properly at the start of the tile
|
||||
z0 = RecastCommon.clamp(z0, -1, h - 1);
|
||||
z1 = RecastCommon.clamp(z1, 0, h - 1);
|
||||
z0 = clamp(z0, -1, h - 1);
|
||||
z1 = clamp(z1, 0, h - 1);
|
||||
|
||||
// Clip the triangle into all grid cells it touches.
|
||||
float[] buf = new float[7 * 3 * 4];
|
||||
|
@ -320,8 +321,8 @@ namespace DotRecast.Recast
|
|||
continue;
|
||||
}
|
||||
|
||||
x0 = RecastCommon.clamp(x0, -1, w - 1);
|
||||
x1 = RecastCommon.clamp(x1, 0, w - 1);
|
||||
x0 = clamp(x0, -1, w - 1);
|
||||
x1 = clamp(x1, 0, w - 1);
|
||||
|
||||
int nv, nv2 = nvRow;
|
||||
for (int x = x0; x <= x1; ++x)
|
||||
|
@ -366,8 +367,8 @@ namespace DotRecast.Recast
|
|||
spanMax = by;
|
||||
|
||||
// Snap the span to the heightfield height grid.
|
||||
int spanMinCellIndex = RecastCommon.clamp((int)Math.Floor(spanMin * inverseCellHeight), 0, SPAN_MAX_HEIGHT);
|
||||
int spanMaxCellIndex = RecastCommon.clamp((int)Math.Ceiling(spanMax * inverseCellHeight), spanMinCellIndex + 1, SPAN_MAX_HEIGHT);
|
||||
int spanMinCellIndex = clamp((int)Math.Floor(spanMin * inverseCellHeight), 0, SPAN_MAX_HEIGHT);
|
||||
int spanMaxCellIndex = clamp((int)Math.Ceiling(spanMax * inverseCellHeight), spanMinCellIndex + 1, SPAN_MAX_HEIGHT);
|
||||
|
||||
addSpan(hf, x, z, spanMinCellIndex, spanMaxCellIndex, area, flagMergeThreshold);
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ using NUnit.Framework;
|
|||
|
||||
namespace DotRecast.Detour.Crowd.Test;
|
||||
|
||||
using static DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
public class AbstractCrowdTest
|
||||
{
|
||||
|
|
|
@ -23,7 +23,7 @@ using DotRecast.Detour.Io;
|
|||
using DotRecast.Recast;
|
||||
using DotRecast.Recast.Geom;
|
||||
using NUnit.Framework;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Test.Io;
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ freely, subject to the following restrictions:
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using NUnit.Framework;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.Test;
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ freely, subject to the following restrictions:
|
|||
using DotRecast.Core;
|
||||
using DotRecast.Detour.TileCache.Io.Compress;
|
||||
using DotRecast.Recast.Geom;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
using static DotRecast.Recast.RecastVectors;
|
||||
|
||||
namespace DotRecast.Detour.TileCache.Test;
|
||||
|
|
|
@ -22,7 +22,7 @@ using System.Collections.Generic;
|
|||
using DotRecast.Core;
|
||||
using DotRecast.Recast;
|
||||
using DotRecast.Recast.Geom;
|
||||
using static DotRecast.Detour.DetourCommon;
|
||||
using static DotRecast.Core.RecastMath;
|
||||
|
||||
namespace DotRecast.Detour.TileCache.Test;
|
||||
|
||||
|
|
Loading…
Reference in New Issue