rename in DotRecast.Detour.Dynamic

This commit is contained in:
ikpil 2023-09-16 12:49:58 +09:00
parent fea18a5064
commit 3ff14834f0
34 changed files with 201 additions and 201 deletions

View File

@ -17,11 +17,9 @@ freely, subject to the following restrictions:
3. This notice may not be removed or altered from any source distribution.
*/
using DotRecast.Core;
namespace DotRecast.Detour.Dynamic.Io
namespace DotRecast.Core
{
public static class ByteUtils
public static class RcByteUtils
{
public static int GetInt(byte[] data, int position, RcByteOrder order)
{
@ -30,13 +28,17 @@ namespace DotRecast.Detour.Dynamic.Io
public static int GetIntBE(byte[] data, int position)
{
return ((data[position] & 0xff) << 24) | ((data[position + 1] & 0xff) << 16) | ((data[position + 2] & 0xff) << 8)
return ((data[position] & 0xff) << 24)
| ((data[position + 1] & 0xff) << 16)
| ((data[position + 2] & 0xff) << 8)
| (data[position + 3] & 0xff);
}
public static int GetIntLE(byte[] data, int position)
{
return ((data[position + 3] & 0xff) << 24) | ((data[position + 2] & 0xff) << 16) | ((data[position + 1] & 0xff) << 8)
return ((data[position + 3] & 0xff) << 24)
| ((data[position + 2] & 0xff) << 16)
| ((data[position + 1] & 0xff) << 8)
| (data[position] & 0xff);
}

View File

@ -21,7 +21,7 @@ freely, subject to the following restrictions:
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using DotRecast.Core;
using DotRecast.Detour.Crowd.Tracking;

View File

@ -23,12 +23,12 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public class BoxCollider : AbstractCollider
public class DtBoxCollider : DtCollider
{
private readonly RcVec3f center;
private readonly RcVec3f[] halfEdges;
public BoxCollider(RcVec3f center, RcVec3f[] halfEdges, int area, float flagMergeThreshold) :
public DtBoxCollider(RcVec3f center, RcVec3f[] halfEdges, int area, float flagMergeThreshold) :
base(area, flagMergeThreshold, Bounds(center, halfEdges))
{
this.center = center;

View File

@ -23,13 +23,13 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public class CapsuleCollider : AbstractCollider
public class DtCapsuleCollider : DtCollider
{
private readonly RcVec3f start;
private readonly RcVec3f end;
private readonly float radius;
public CapsuleCollider(RcVec3f start, RcVec3f end, float radius, int area, float flagMergeThreshold)
public DtCapsuleCollider(RcVec3f start, RcVec3f end, float radius, int area, float flagMergeThreshold)
: base(area, flagMergeThreshold, Bounds(start, end, radius))
{
this.start = start;

View File

@ -22,13 +22,13 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public abstract class AbstractCollider : ICollider
public abstract class DtCollider : IDtCollider
{
protected readonly int area;
protected readonly float flagMergeThreshold;
protected readonly float[] _bounds;
public AbstractCollider(int area, float flagMergeThreshold, float[] bounds)
public DtCollider(int area, float flagMergeThreshold, float[] bounds)
{
this.area = area;
this.flagMergeThreshold = flagMergeThreshold;

View File

@ -25,18 +25,18 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public class CompositeCollider : ICollider
public class DtCompositeCollider : IDtCollider
{
private readonly List<ICollider> colliders;
private readonly List<IDtCollider> colliders;
private readonly float[] _bounds;
public CompositeCollider(List<ICollider> colliders)
public DtCompositeCollider(List<IDtCollider> colliders)
{
this.colliders = colliders;
_bounds = Bounds(colliders);
}
public CompositeCollider(params ICollider[] colliders)
public DtCompositeCollider(params IDtCollider[] colliders)
{
this.colliders = colliders.ToList();
_bounds = Bounds(this.colliders);
@ -47,14 +47,14 @@ namespace DotRecast.Detour.Dynamic.Colliders
return _bounds;
}
private static float[] Bounds(List<ICollider> colliders)
private static float[] Bounds(List<IDtCollider> colliders)
{
float[] bounds = new float[]
{
float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity,
float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity
};
foreach (ICollider collider in colliders)
foreach (IDtCollider collider in colliders)
{
float[] b = collider.Bounds();
bounds[0] = Math.Min(bounds[0], b[0]);

View File

@ -23,19 +23,19 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public class ConvexTrimeshCollider : AbstractCollider
public class DtConvexTrimeshCollider : DtCollider
{
private readonly float[] vertices;
private readonly int[] triangles;
public ConvexTrimeshCollider(float[] vertices, int[] triangles, int area, float flagMergeThreshold)
: base(area, flagMergeThreshold, TrimeshCollider.ComputeBounds(vertices))
public DtConvexTrimeshCollider(float[] vertices, int[] triangles, int area, float flagMergeThreshold)
: base(area, flagMergeThreshold, DtTrimeshCollider.ComputeBounds(vertices))
{
this.vertices = vertices;
this.triangles = triangles;
}
public ConvexTrimeshCollider(float[] vertices, int[] triangles, float[] bounds, int area, float flagMergeThreshold)
public DtConvexTrimeshCollider(float[] vertices, int[] triangles, float[] bounds, int area, float flagMergeThreshold)
: base(area, flagMergeThreshold, bounds)
{
this.vertices = vertices;

View File

@ -23,13 +23,13 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public class CylinderCollider : AbstractCollider
public class DtCylinderCollider : DtCollider
{
private readonly RcVec3f start;
private readonly RcVec3f end;
private readonly float radius;
public CylinderCollider(RcVec3f start, RcVec3f end, float radius, int area, float flagMergeThreshold) :
public DtCylinderCollider(RcVec3f start, RcVec3f end, float radius, int area, float flagMergeThreshold) :
base(area, flagMergeThreshold, Bounds(start, end, radius))
{
this.start = start;

View File

@ -23,12 +23,12 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public class SphereCollider : AbstractCollider
public class DtSphereCollider : DtCollider
{
private readonly RcVec3f center;
private readonly float radius;
public SphereCollider(RcVec3f center, float radius, int area, float flagMergeThreshold)
public DtSphereCollider(RcVec3f center, float radius, int area, float flagMergeThreshold)
: base(area, flagMergeThreshold, Bounds(center, radius))
{
this.center = center;

View File

@ -23,19 +23,19 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public class TrimeshCollider : AbstractCollider
public class DtTrimeshCollider : DtCollider
{
private readonly float[] vertices;
private readonly int[] triangles;
public TrimeshCollider(float[] vertices, int[] triangles, int area, float flagMergeThreshold)
public DtTrimeshCollider(float[] vertices, int[] triangles, int area, float flagMergeThreshold)
: base(area, flagMergeThreshold, ComputeBounds(vertices))
{
this.vertices = vertices;
this.triangles = triangles;
}
public TrimeshCollider(float[] vertices, int[] triangles, float[] bounds, int area, float flagMergeThreshold) :
public DtTrimeshCollider(float[] vertices, int[] triangles, float[] bounds, int area, float flagMergeThreshold) :
base(area, flagMergeThreshold, bounds)
{
this.vertices = vertices;

View File

@ -22,7 +22,7 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Colliders
{
public interface ICollider
public interface IDtCollider
{
float[] Bounds();
void Rasterize(RcHeightfield hf, RcTelemetry telemetry);

View File

@ -20,7 +20,6 @@ freely, subject to the following restrictions:
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using DotRecast.Core;
@ -30,22 +29,22 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic
{
public class DynamicNavMesh
public class DtDynamicNavMesh
{
public const int MAX_VERTS_PER_POLY = 6;
public readonly DynamicNavMeshConfig config;
public readonly DtDynamicNavMeshConfig config;
private readonly RecastBuilder builder;
private readonly Dictionary<long, DynamicTile> _tiles = new Dictionary<long, DynamicTile>();
private readonly Dictionary<long, DtDynamicTile> _tiles = new Dictionary<long, DtDynamicTile>();
private readonly RcTelemetry telemetry;
private readonly DtNavMeshParams navMeshParams;
private readonly BlockingCollection<IUpdateQueueItem> updateQueue = new BlockingCollection<IUpdateQueueItem>();
private readonly BlockingCollection<IDtDaynmicTileJob> updateQueue = new BlockingCollection<IDtDaynmicTileJob>();
private readonly RcAtomicLong currentColliderId = new RcAtomicLong(0);
private DtNavMesh _navMesh;
private bool dirty = true;
public DynamicNavMesh(VoxelFile voxelFile)
public DtDynamicNavMesh(DtVoxelFile voxelFile)
{
config = new DynamicNavMeshConfig(voxelFile.useTiles, voxelFile.tileSizeX, voxelFile.tileSizeZ, voxelFile.cellSize);
config = new DtDynamicNavMeshConfig(voxelFile.useTiles, voxelFile.tileSizeX, voxelFile.tileSizeZ, voxelFile.cellSize);
config.walkableHeight = voxelFile.walkableHeight;
config.walkableRadius = voxelFile.walkableRadius;
config.walkableClimb = voxelFile.walkableClimb;
@ -69,7 +68,7 @@ namespace DotRecast.Detour.Dynamic
navMeshParams.maxPolys = 0x8000;
foreach (var t in voxelFile.tiles)
{
_tiles.Add(LookupKey(t.tileX, t.tileZ), new DynamicTile(t));
_tiles.Add(LookupKey(t.tileX, t.tileZ), new DtDynamicTile(t));
}
;
@ -84,9 +83,9 @@ namespace DotRecast.Detour.Dynamic
/**
* Voxel queries require checkpoints to be enabled in {@link DynamicNavMeshConfig}
*/
public VoxelQuery VoxelQuery()
public DtVoxelQuery VoxelQuery()
{
return new VoxelQuery(navMeshParams.orig, navMeshParams.tileWidth, navMeshParams.tileHeight, LookupHeightfield);
return new DtVoxelQuery(navMeshParams.orig, navMeshParams.tileWidth, navMeshParams.tileHeight, LookupHeightfield);
}
private RcHeightfield LookupHeightfield(int x, int z)
@ -94,16 +93,16 @@ namespace DotRecast.Detour.Dynamic
return GetTileAt(x, z)?.checkpoint.heightfield;
}
public long AddCollider(ICollider collider)
public long AddCollider(IDtCollider collider)
{
long cid = currentColliderId.IncrementAndGet();
updateQueue.Add(new AddColliderQueueItem(cid, collider, GetTiles(collider.Bounds())));
updateQueue.Add(new DtDynamicTileColliderAdditionJob(cid, collider, GetTiles(collider.Bounds())));
return cid;
}
public void RemoveCollider(long colliderId)
{
updateQueue.Add(new RemoveColliderQueueItem(colliderId, GetTilesByCollider(colliderId)));
updateQueue.Add(new DtDynamicTileColliderRemovalJob(colliderId, GetTilesByCollider(colliderId)));
}
/**
@ -123,14 +122,14 @@ namespace DotRecast.Detour.Dynamic
return Rebuild(ProcessQueue());
}
private bool Rebuild(ICollection<DynamicTile> stream)
private bool Rebuild(ICollection<DtDynamicTile> stream)
{
foreach (var dynamicTile in stream)
Rebuild(dynamicTile);
return UpdateNavMesh();
}
private HashSet<DynamicTile> ProcessQueue()
private HashSet<DtDynamicTile> ProcessQueue()
{
var items = ConsumeQueue();
foreach (var item in items)
@ -141,9 +140,9 @@ namespace DotRecast.Detour.Dynamic
return items.SelectMany(i => i.AffectedTiles()).ToHashSet();
}
private List<IUpdateQueueItem> ConsumeQueue()
private List<IDtDaynmicTileJob> ConsumeQueue()
{
List<IUpdateQueueItem> items = new List<IUpdateQueueItem>();
List<IDtDaynmicTileJob> items = new List<IDtDaynmicTileJob>();
while (updateQueue.TryTake(out var item))
{
items.Add(item);
@ -152,7 +151,7 @@ namespace DotRecast.Detour.Dynamic
return items;
}
private void Process(IUpdateQueueItem item)
private void Process(IDtDaynmicTileJob item)
{
foreach (var tile in item.AffectedTiles())
{
@ -177,13 +176,13 @@ namespace DotRecast.Detour.Dynamic
return Rebuild(ProcessQueue(), executor);
}
private Task<bool> Rebuild(ICollection<DynamicTile> tiles, TaskFactory executor)
private Task<bool> Rebuild(ICollection<DtDynamicTile> tiles, TaskFactory executor)
{
var tasks = tiles.Select(tile => executor.StartNew(() => Rebuild(tile))).ToArray();
return Task.WhenAll(tasks).ContinueWith(k => UpdateNavMesh());
}
private ICollection<DynamicTile> GetTiles(float[] bounds)
private ICollection<DtDynamicTile> GetTiles(float[] bounds)
{
if (bounds == null)
{
@ -194,12 +193,12 @@ namespace DotRecast.Detour.Dynamic
int minz = (int)Math.Floor((bounds[2] - navMeshParams.orig.z) / navMeshParams.tileHeight);
int maxx = (int)Math.Floor((bounds[3] - navMeshParams.orig.x) / navMeshParams.tileWidth);
int maxz = (int)Math.Floor((bounds[5] - navMeshParams.orig.z) / navMeshParams.tileHeight);
List<DynamicTile> tiles = new List<DynamicTile>();
List<DtDynamicTile> tiles = new List<DtDynamicTile>();
for (int z = minz; z <= maxz; ++z)
{
for (int x = minx; x <= maxx; ++x)
{
DynamicTile tile = GetTileAt(x, z);
DtDynamicTile tile = GetTileAt(x, z);
if (tile != null)
{
tiles.Add(tile);
@ -210,12 +209,12 @@ namespace DotRecast.Detour.Dynamic
return tiles;
}
private List<DynamicTile> GetTilesByCollider(long cid)
private List<DtDynamicTile> GetTilesByCollider(long cid)
{
return _tiles.Values.Where(t => t.ContainsCollider(cid)).ToList();
}
private void Rebuild(DynamicTile tile)
private void Rebuild(DtDynamicTile tile)
{
DtNavMeshCreateParams option = new DtNavMeshCreateParams();
option.walkableHeight = config.walkableHeight;
@ -238,7 +237,7 @@ namespace DotRecast.Detour.Dynamic
return false;
}
private DynamicTile GetTileAt(int x, int z)
private DtDynamicTile GetTileAt(int x, int z)
{
return _tiles.TryGetValue(LookupKey(x, z), out var tile)
? tile
@ -250,7 +249,7 @@ namespace DotRecast.Detour.Dynamic
return (z << 32) | x;
}
public List<VoxelTile> VoxelTiles()
public List<DtVoxelTile> VoxelTiles()
{
return _tiles.Values.Select(t => t.voxelTile).ToList();
}

View File

@ -21,7 +21,7 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic
{
public class DynamicNavMeshConfig
public class DtDynamicNavMeshConfig
{
public readonly bool useTiles;
public readonly int tileSizeX;
@ -47,7 +47,7 @@ namespace DotRecast.Detour.Dynamic
public bool enableCheckpoints = true;
public bool keepIntermediateResults = false;
public DynamicNavMeshConfig(bool useTiles, int tileSizeX, int tileSizeZ, float cellSize)
public DtDynamicNavMeshConfig(bool useTiles, int tileSizeX, int tileSizeZ, float cellSize)
{
this.useTiles = useTiles;
this.tileSizeX = tileSizeX;

View File

@ -20,7 +20,7 @@ freely, subject to the following restrictions:
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using DotRecast.Core;
using DotRecast.Detour.Dynamic.Colliders;
@ -29,22 +29,22 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic
{
public class DynamicTile
public class DtDynamicTile
{
public readonly VoxelTile voxelTile;
public DynamicTileCheckpoint checkpoint;
public readonly DtVoxelTile voxelTile;
public DtDynamicTileCheckpoint checkpoint;
public RecastBuilderResult recastResult;
private DtMeshData meshData;
private readonly ConcurrentDictionary<long, ICollider> colliders = new ConcurrentDictionary<long, ICollider>();
private readonly ConcurrentDictionary<long, IDtCollider> colliders = new ConcurrentDictionary<long, IDtCollider>();
private bool dirty = true;
private long id;
public DynamicTile(VoxelTile voxelTile)
public DtDynamicTile(DtVoxelTile voxelTile)
{
this.voxelTile = voxelTile;
}
public bool Build(RecastBuilder builder, DynamicNavMeshConfig config, RcTelemetry telemetry)
public bool Build(RecastBuilder builder, DtDynamicNavMeshConfig config, RcTelemetry telemetry)
{
if (dirty)
{
@ -59,7 +59,7 @@ namespace DotRecast.Detour.Dynamic
return false;
}
private RcHeightfield BuildHeightfield(DynamicNavMeshConfig config, RcTelemetry telemetry)
private RcHeightfield BuildHeightfield(DtDynamicNavMeshConfig config, RcTelemetry telemetry)
{
ICollection<long> rasterizedColliders = checkpoint != null
? checkpoint.colliders as ICollection<long>
@ -80,13 +80,13 @@ namespace DotRecast.Detour.Dynamic
if (config.enableCheckpoints)
{
checkpoint = new DynamicTileCheckpoint(heightfield, colliders.Keys.ToHashSet());
checkpoint = new DtDynamicTileCheckpoint(heightfield, colliders.Keys.ToHashSet());
}
return heightfield;
}
private RecastBuilderResult BuildRecast(RecastBuilder builder, DynamicNavMeshConfig config, VoxelTile vt,
private RecastBuilderResult BuildRecast(RecastBuilder builder, DtDynamicNavMeshConfig config, DtVoxelTile vt,
RcHeightfield heightfield, RcTelemetry telemetry)
{
RcConfig rcConfig = new RcConfig(
@ -97,7 +97,7 @@ namespace DotRecast.Detour.Dynamic
config.walkableSlopeAngle, config.walkableHeight, config.walkableRadius, config.walkableClimb,
config.minRegionArea, config.regionMergeArea,
config.maxEdgeLen, config.maxSimplificationError,
Math.Min(DynamicNavMesh.MAX_VERTS_PER_POLY, config.vertsPerPoly),
Math.Min(DtDynamicNavMesh.MAX_VERTS_PER_POLY, config.vertsPerPoly),
config.detailSampleDistance, config.detailSampleMaxError,
true, true, true, null, true);
RecastBuilderResult r = builder.Build(vt.tileX, vt.tileZ, null, rcConfig, heightfield, telemetry);
@ -109,7 +109,7 @@ namespace DotRecast.Detour.Dynamic
return r;
}
public void AddCollider(long cid, ICollider collider)
public void AddCollider(long cid, IDtCollider collider)
{
colliders[cid] = collider;
dirty = true;
@ -130,7 +130,7 @@ namespace DotRecast.Detour.Dynamic
}
private DtNavMeshCreateParams NavMeshCreateParams(int tilex, int tileZ, float cellSize, float cellHeight,
DynamicNavMeshConfig config, RecastBuilderResult rcResult)
DtDynamicNavMeshConfig config, RecastBuilderResult rcResult)
{
RcPolyMesh m_pmesh = rcResult.GetMesh();
RcPolyMeshDetail m_dmesh = rcResult.GetMeshDetail();

View File

@ -22,12 +22,12 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic
{
public class DynamicTileCheckpoint
public class DtDynamicTileCheckpoint
{
public readonly RcHeightfield heightfield;
public readonly ISet<long> colliders;
public DynamicTileCheckpoint(RcHeightfield heightfield, ISet<long> colliders)
public DtDynamicTileCheckpoint(RcHeightfield heightfield, ISet<long> colliders)
{
this.colliders = colliders;
this.heightfield = Clone(heightfield);

View File

@ -22,27 +22,27 @@ using DotRecast.Detour.Dynamic.Colliders;
namespace DotRecast.Detour.Dynamic
{
public class AddColliderQueueItem : IUpdateQueueItem
public class DtDynamicTileColliderAdditionJob : IDtDaynmicTileJob
{
private readonly long colliderId;
private readonly ICollider collider;
private readonly ICollection<DynamicTile> _affectedTiles;
private readonly long _colliderId;
private readonly IDtCollider _collider;
private readonly ICollection<DtDynamicTile> _affectedTiles;
public AddColliderQueueItem(long colliderId, ICollider collider, ICollection<DynamicTile> affectedTiles)
public DtDynamicTileColliderAdditionJob(long colliderId, IDtCollider collider, ICollection<DtDynamicTile> affectedTiles)
{
this.colliderId = colliderId;
this.collider = collider;
_colliderId = colliderId;
_collider = collider;
_affectedTiles = affectedTiles;
}
public ICollection<DynamicTile> AffectedTiles()
public ICollection<DtDynamicTile> AffectedTiles()
{
return _affectedTiles;
}
public void Process(DynamicTile tile)
public void Process(DtDynamicTile tile)
{
tile.AddCollider(colliderId, collider);
tile.AddCollider(_colliderId, _collider);
}
}
}

View File

@ -21,23 +21,23 @@ using System.Collections.Generic;
namespace DotRecast.Detour.Dynamic
{
public class RemoveColliderQueueItem : IUpdateQueueItem
public class DtDynamicTileColliderRemovalJob : IDtDaynmicTileJob
{
private readonly long colliderId;
private readonly ICollection<DynamicTile> _affectedTiles;
private readonly ICollection<DtDynamicTile> _affectedTiles;
public RemoveColliderQueueItem(long colliderId, ICollection<DynamicTile> affectedTiles)
public DtDynamicTileColliderRemovalJob(long colliderId, ICollection<DtDynamicTile> affectedTiles)
{
this.colliderId = colliderId;
this._affectedTiles = affectedTiles;
}
public ICollection<DynamicTile> AffectedTiles()
public ICollection<DtDynamicTile> AffectedTiles()
{
return _affectedTiles;
}
public void Process(DynamicTile tile)
public void Process(DtDynamicTile tile)
{
tile.RemoveCollider(colliderId);
}

View File

@ -28,14 +28,14 @@ namespace DotRecast.Detour.Dynamic
*
* "A Fast Voxel Traversal Algorithm for Ray Tracing" by John Amanatides and Andrew Woo
*/
public class VoxelQuery
public class DtVoxelQuery
{
private readonly RcVec3f origin;
private readonly float tileWidth;
private readonly float tileDepth;
private readonly Func<int, int, RcHeightfield> heightfieldProvider;
public VoxelQuery(RcVec3f origin, float tileWidth, float tileDepth, Func<int, int, RcHeightfield> heightfieldProvider)
public DtVoxelQuery(RcVec3f origin, float tileWidth, float tileDepth, Func<int, int, RcHeightfield> heightfieldProvider)
{
this.origin = origin;
this.tileWidth = tileWidth;

View File

@ -21,10 +21,10 @@ using System.Collections.Generic;
namespace DotRecast.Detour.Dynamic
{
public interface IUpdateQueueItem
public interface IDtDaynmicTileJob
{
ICollection<DynamicTile> AffectedTiles();
ICollection<DtDynamicTile> AffectedTiles();
void Process(DynamicTile tile);
void Process(DtDynamicTile tile);
}
}

View File

@ -24,7 +24,7 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Io
{
public class VoxelFile
public class DtVoxelFile
{
public static readonly RcByteOrder PREFERRED_BYTE_ORDER = RcByteOrder.BIG_ENDIAN;
public const int MAGIC = 'V' << 24 | 'O' << 16 | 'X' << 8 | 'L';
@ -55,14 +55,14 @@ namespace DotRecast.Detour.Dynamic.Io
public int tileSizeZ;
public RcVec3f rotation = new RcVec3f();
public float[] bounds = new float[6];
public readonly List<VoxelTile> tiles = new List<VoxelTile>();
public readonly List<DtVoxelTile> tiles = new List<DtVoxelTile>();
public void AddTile(VoxelTile tile)
public void AddTile(DtVoxelTile tile)
{
tiles.Add(tile);
}
public RcConfig GetConfig(VoxelTile tile, RcAreaModification walkbableAreaMod, bool buildMeshDetail)
public RcConfig GetConfig(DtVoxelTile tile, RcAreaModification walkbableAreaMod, bool buildMeshDetail)
{
return new RcConfig(useTiles, tileSizeX, tileSizeZ,
tile.borderSize,
@ -77,9 +77,9 @@ namespace DotRecast.Detour.Dynamic.Io
walkbableAreaMod, buildMeshDetail);
}
public static VoxelFile From(RcConfig config, List<RecastBuilderResult> results)
public static DtVoxelFile From(RcConfig config, List<RecastBuilderResult> results)
{
VoxelFile f = new VoxelFile();
DtVoxelFile f = new DtVoxelFile();
f.version = 1;
f.partition = config.Partition;
f.filterLowHangingObstacles = config.FilterLowHangingObstacles;
@ -108,7 +108,7 @@ namespace DotRecast.Detour.Dynamic.Io
};
foreach (RecastBuilderResult r in results)
{
f.tiles.Add(new VoxelTile(r.tileX, r.tileZ, r.GetSolidHeightfield()));
f.tiles.Add(new DtVoxelTile(r.tileX, r.tileZ, r.GetSolidHeightfield()));
f.bounds[0] = Math.Min(f.bounds[0], r.GetSolidHeightfield().bmin.x);
f.bounds[1] = Math.Min(f.bounds[1], r.GetSolidHeightfield().bmin.y);
f.bounds[2] = Math.Min(f.bounds[2], r.GetSolidHeightfield().bmin.z);
@ -120,11 +120,11 @@ namespace DotRecast.Detour.Dynamic.Io
return f;
}
public static VoxelFile From(DynamicNavMesh mesh)
public static DtVoxelFile From(DtDynamicNavMesh mesh)
{
VoxelFile f = new VoxelFile();
DtVoxelFile f = new DtVoxelFile();
f.version = 1;
DynamicNavMeshConfig config = mesh.config;
DtDynamicNavMeshConfig config = mesh.config;
f.partition = config.partition;
f.filterLowHangingObstacles = config.filterLowHangingObstacles;
f.filterLedgeSpans = config.filterLedgeSpans;
@ -150,10 +150,10 @@ namespace DotRecast.Detour.Dynamic.Io
float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity,
float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity
};
foreach (VoxelTile vt in mesh.VoxelTiles())
foreach (DtVoxelTile vt in mesh.VoxelTiles())
{
RcHeightfield heightfield = vt.Heightfield();
f.tiles.Add(new VoxelTile(vt.tileX, vt.tileZ, heightfield));
f.tiles.Add(new DtVoxelTile(vt.tileX, vt.tileZ, heightfield));
f.bounds[0] = Math.Min(f.bounds[0], vt.boundsMin.x);
f.bounds[1] = Math.Min(f.bounds[1], vt.boundsMin.y);
f.bounds[2] = Math.Min(f.bounds[2], vt.boundsMin.z);

View File

@ -23,24 +23,24 @@ using DotRecast.Detour.Io;
namespace DotRecast.Detour.Dynamic.Io
{
public class VoxelFileReader
public class DtVoxelFileReader
{
private readonly IRcCompressor _compressor;
public VoxelFileReader(IRcCompressor compressor)
public DtVoxelFileReader(IRcCompressor compressor)
{
_compressor = compressor;
}
public VoxelFile Read(BinaryReader stream)
public DtVoxelFile Read(BinaryReader stream)
{
RcByteBuffer buf = IOUtils.ToByteBuffer(stream);
VoxelFile file = new VoxelFile();
DtVoxelFile file = new DtVoxelFile();
int magic = buf.GetInt();
if (magic != VoxelFile.MAGIC)
if (magic != DtVoxelFile.MAGIC)
{
magic = IOUtils.SwapEndianness(magic);
if (magic != VoxelFile.MAGIC)
if (magic != DtVoxelFile.MAGIC)
{
throw new IOException("Invalid magic");
}
@ -49,8 +49,8 @@ namespace DotRecast.Detour.Dynamic.Io
}
file.version = buf.GetInt();
bool isExportedFromAstar = (file.version & VoxelFile.VERSION_EXPORTER_MASK) == 0;
bool compression = (file.version & VoxelFile.VERSION_COMPRESSION_MASK) == VoxelFile.VERSION_COMPRESSION_LZ4;
bool isExportedFromAstar = (file.version & DtVoxelFile.VERSION_EXPORTER_MASK) == 0;
bool compression = (file.version & DtVoxelFile.VERSION_COMPRESSION_MASK) == DtVoxelFile.VERSION_COMPRESSION_LZ4;
file.walkableRadius = buf.GetFloat();
file.walkableHeight = buf.GetFloat();
file.walkableClimb = buf.GetFloat();
@ -138,7 +138,7 @@ namespace DotRecast.Detour.Dynamic.Io
RcByteBuffer data = new RcByteBuffer(bytes);
data.Order(buf.Order());
file.AddTile(new VoxelTile(tileX, tileZ, width, depth, boundsMin, boundsMax, cellSize, cellHeight, borderSize, data));
file.AddTile(new DtVoxelTile(tileX, tileZ, width, depth, boundsMin, boundsMax, cellSize, cellHeight, borderSize, data));
buf.Position(position + voxelSize);
}

View File

@ -23,24 +23,24 @@ using DotRecast.Detour.Io;
namespace DotRecast.Detour.Dynamic.Io
{
public class VoxelFileWriter : DtWriter
public class DtVoxelFileWriter : DtWriter
{
private readonly IRcCompressor _compressor;
public VoxelFileWriter(IRcCompressor compressor)
public DtVoxelFileWriter(IRcCompressor compressor)
{
_compressor = compressor;
}
public void Write(BinaryWriter stream, VoxelFile f, bool compression)
public void Write(BinaryWriter stream, DtVoxelFile f, bool compression)
{
Write(stream, f, VoxelFile.PREFERRED_BYTE_ORDER, compression);
Write(stream, f, DtVoxelFile.PREFERRED_BYTE_ORDER, compression);
}
public void Write(BinaryWriter stream, VoxelFile f, RcByteOrder byteOrder, bool compression)
public void Write(BinaryWriter stream, DtVoxelFile f, RcByteOrder byteOrder, bool compression)
{
Write(stream, VoxelFile.MAGIC, byteOrder);
Write(stream, VoxelFile.VERSION_EXPORTER_RECAST4J | (compression ? VoxelFile.VERSION_COMPRESSION_LZ4 : 0), byteOrder);
Write(stream, DtVoxelFile.MAGIC, byteOrder);
Write(stream, DtVoxelFile.VERSION_EXPORTER_RECAST4J | (compression ? DtVoxelFile.VERSION_COMPRESSION_LZ4 : 0), byteOrder);
Write(stream, f.walkableRadius, byteOrder);
Write(stream, f.walkableHeight, byteOrder);
Write(stream, f.walkableClimb, byteOrder);
@ -67,13 +67,13 @@ namespace DotRecast.Detour.Dynamic.Io
Write(stream, f.bounds[4], byteOrder);
Write(stream, f.bounds[5], byteOrder);
Write(stream, f.tiles.Count, byteOrder);
foreach (VoxelTile t in f.tiles)
foreach (DtVoxelTile t in f.tiles)
{
WriteTile(stream, t, byteOrder, compression);
}
}
public void WriteTile(BinaryWriter stream, VoxelTile tile, RcByteOrder byteOrder, bool compression)
public void WriteTile(BinaryWriter stream, DtVoxelTile tile, RcByteOrder byteOrder, bool compression)
{
Write(stream, tile.tileX, byteOrder);
Write(stream, tile.tileZ, byteOrder);

View File

@ -22,7 +22,7 @@ using DotRecast.Recast;
namespace DotRecast.Detour.Dynamic.Io
{
public class VoxelTile
public class DtVoxelTile
{
private const int SERIALIZED_SPAN_COUNT_BYTES = 2;
private const int SERIALIZED_SPAN_BYTES = 12;
@ -37,7 +37,7 @@ namespace DotRecast.Detour.Dynamic.Io
public float cellHeight;
public readonly byte[] spanData;
public VoxelTile(int tileX, int tileZ, int width, int depth, RcVec3f boundsMin, RcVec3f boundsMax, float cellSize,
public DtVoxelTile(int tileX, int tileZ, int width, int depth, RcVec3f boundsMin, RcVec3f boundsMax, float cellSize,
float cellHeight, int borderSize, RcByteBuffer buffer)
{
this.tileX = tileX;
@ -49,10 +49,10 @@ namespace DotRecast.Detour.Dynamic.Io
this.cellSize = cellSize;
this.cellHeight = cellHeight;
this.borderSize = borderSize;
spanData = ToByteArray(buffer, width, depth, VoxelFile.PREFERRED_BYTE_ORDER);
spanData = ToByteArray(buffer, width, depth, DtVoxelFile.PREFERRED_BYTE_ORDER);
}
public VoxelTile(int tileX, int tileZ, RcHeightfield heightfield)
public DtVoxelTile(int tileX, int tileZ, RcHeightfield heightfield)
{
this.tileX = tileX;
this.tileZ = tileZ;
@ -63,12 +63,12 @@ namespace DotRecast.Detour.Dynamic.Io
cellSize = heightfield.cs;
cellHeight = heightfield.ch;
borderSize = heightfield.borderSize;
spanData = SerializeSpans(heightfield, VoxelFile.PREFERRED_BYTE_ORDER);
spanData = SerializeSpans(heightfield, DtVoxelFile.PREFERRED_BYTE_ORDER);
}
public RcHeightfield Heightfield()
{
return VoxelFile.PREFERRED_BYTE_ORDER == RcByteOrder.BIG_ENDIAN ? HeightfieldBE() : HeightfieldLE();
return DtVoxelFile.PREFERRED_BYTE_ORDER == RcByteOrder.BIG_ENDIAN ? HeightfieldBE() : HeightfieldLE();
}
private RcHeightfield HeightfieldBE()
@ -80,16 +80,16 @@ namespace DotRecast.Detour.Dynamic.Io
for (int x = 0; x < width; x++)
{
RcSpan prev = null;
int spanCount = ByteUtils.GetShortBE(spanData, position);
int spanCount = RcByteUtils.GetShortBE(spanData, position);
position += 2;
for (int s = 0; s < spanCount; s++)
{
RcSpan span = new RcSpan();
span.smin = ByteUtils.GetIntBE(spanData, position);
span.smin = RcByteUtils.GetIntBE(spanData, position);
position += 4;
span.smax = ByteUtils.GetIntBE(spanData, position);
span.smax = RcByteUtils.GetIntBE(spanData, position);
position += 4;
span.area = ByteUtils.GetIntBE(spanData, position);
span.area = RcByteUtils.GetIntBE(spanData, position);
position += 4;
if (prev == null)
{
@ -117,16 +117,16 @@ namespace DotRecast.Detour.Dynamic.Io
for (int x = 0; x < width; x++)
{
RcSpan prev = null;
int spanCount = ByteUtils.GetShortLE(spanData, position);
int spanCount = RcByteUtils.GetShortLE(spanData, position);
position += 2;
for (int s = 0; s < spanCount; s++)
{
RcSpan span = new RcSpan();
span.smin = ByteUtils.GetIntLE(spanData, position);
span.smin = RcByteUtils.GetIntLE(spanData, position);
position += 4;
span.smax = ByteUtils.GetIntLE(spanData, position);
span.smax = RcByteUtils.GetIntLE(spanData, position);
position += 4;
span.area = ByteUtils.GetIntLE(spanData, position);
span.area = RcByteUtils.GetIntLE(spanData, position);
position += 4;
if (prev == null)
{
@ -169,13 +169,13 @@ namespace DotRecast.Detour.Dynamic.Io
{
for (int x = 0; x < heightfield.width; x++)
{
position = ByteUtils.PutShort(counts[pz + x], data, position, order);
position = RcByteUtils.PutShort(counts[pz + x], data, position, order);
RcSpan span = heightfield.spans[pz + x];
while (span != null)
{
position = ByteUtils.PutInt(span.smin, data, position, order);
position = ByteUtils.PutInt(span.smax, data, position, order);
position = ByteUtils.PutInt(span.area, data, position, order);
position = RcByteUtils.PutInt(span.smin, data, position, order);
position = RcByteUtils.PutInt(span.smax, data, position, order);
position = RcByteUtils.PutInt(span.area, data, position, order);
span = span.next;
}
}
@ -199,15 +199,15 @@ namespace DotRecast.Detour.Dynamic.Io
for (int i = 0; i < l; i++)
{
int count = buf.GetShort();
ByteUtils.PutShort(count, data, position, order);
RcByteUtils.PutShort(count, data, position, order);
position += 2;
for (int j = 0; j < count; j++)
{
ByteUtils.PutInt(buf.GetInt(), data, position, order);
RcByteUtils.PutInt(buf.GetInt(), data, position, order);
position += 4;
ByteUtils.PutInt(buf.GetInt(), data, position, order);
RcByteUtils.PutInt(buf.GetInt(), data, position, order);
position += 4;
ByteUtils.PutInt(buf.GetInt(), data, position, order);
RcByteUtils.PutInt(buf.GetInt(), data, position, order);
position += 4;
}
}

View File

@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using DotRecast.Core;
using DotRecast.Recast;
using static DotRecast.Core.RcMath;
namespace DotRecast.Detour.Extras.Jumplink
{

View File

@ -15,7 +15,7 @@ public class DtVoxelTileLZ4DemoCompressor : IRcCompressor
public byte[] Decompress(byte[] data)
{
int compressedSize = ByteUtils.GetIntBE(data, 0);
int compressedSize = RcByteUtils.GetIntBE(data, 0);
return LZ4Pickler.Unpickle(data.AsSpan(4, compressedSize));
}
@ -28,7 +28,7 @@ public class DtVoxelTileLZ4DemoCompressor : IRcCompressor
{
byte[] compressed = LZ4Pickler.Pickle(data, LZ4Level.L12_MAX);
byte[] result = new byte[4 + compressed.Length];
ByteUtils.PutInt(compressed.Length, result, 0, RcByteOrder.BIG_ENDIAN);
RcByteUtils.PutInt(compressed.Length, result, 0, RcByteOrder.BIG_ENDIAN);
Array.Copy(compressed, 0, result, 4, compressed.Length);
return result;
}

View File

@ -461,7 +461,7 @@ public class DynamicUpdateSampleTool : ISampleTool
_sample.Update(null, dynaMesh.RecastResults(), dynaMesh.NavMesh());
}
private void UpdateTo(DynamicNavMeshConfig config)
private void UpdateTo(DtDynamicNavMeshConfig config)
{
config.partition = partitioning;
config.walkableHeight = walkableHeight;
@ -481,7 +481,7 @@ public class DynamicUpdateSampleTool : ISampleTool
config.detailSampleMaxError = detailSampleMaxError;
}
private void UpdateFrom(DynamicNavMeshConfig config)
private void UpdateFrom(DtDynamicNavMeshConfig config)
{
cellSize = config.cellSize;
partitioning = config.partition;

View File

@ -28,7 +28,7 @@ namespace DotRecast.Recast.Toolset.Gizmos
public readonly RcVec3f[] halfEdges;
public RcBoxGizmo(RcVec3f center, RcVec3f extent, RcVec3f forward, RcVec3f up) :
this(center, BoxCollider.GetHalfEdges(up, forward, extent))
this(center, DtBoxCollider.GetHalfEdges(up, forward, extent))
{
}

View File

@ -6,9 +6,9 @@ namespace DotRecast.Recast.Toolset.Gizmos
public class RcGizmo
{
public readonly IRcGizmoMeshFilter Gizmo;
public readonly ICollider Collider;
public readonly IDtCollider Collider;
public RcGizmo(ICollider collider, IRcGizmoMeshFilter gizmo)
public RcGizmo(IDtCollider collider, IRcGizmoMeshFilter gizmo)
{
Collider = collider;
Gizmo = gizmo;

View File

@ -14,7 +14,7 @@ namespace DotRecast.Recast.Toolset.Tools
{
public class RcDynamicUpdateTool : IRcToolable
{
private DynamicNavMesh dynaMesh;
private DtDynamicNavMesh dynaMesh;
private readonly Dictionary<long, RcGizmo> colliderGizmos;
private readonly Random random;
@ -41,7 +41,7 @@ namespace DotRecast.Recast.Toolset.Tools
return "Dynamic Updates";
}
public DynamicNavMesh GetDynamicNavMesh()
public DtDynamicNavMesh GetDynamicNavMesh()
{
return dynaMesh;
}
@ -140,14 +140,14 @@ namespace DotRecast.Recast.Toolset.Tools
return colliderWithGizmo;
}
public DynamicNavMesh Load(string filename, IRcCompressor compressor)
public DtDynamicNavMesh Load(string filename, IRcCompressor compressor)
{
using var fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
using var br = new BinaryReader(fs);
VoxelFileReader reader = new VoxelFileReader(compressor);
VoxelFile voxelFile = reader.Read(br);
DtVoxelFileReader reader = new DtVoxelFileReader(compressor);
DtVoxelFile voxelFile = reader.Read(br);
dynaMesh = new DynamicNavMesh(voxelFile);
dynaMesh = new DtDynamicNavMesh(voxelFile);
dynaMesh.config.keepIntermediateResults = true;
colliderGizmos.Clear();
@ -157,10 +157,10 @@ namespace DotRecast.Recast.Toolset.Tools
public void Save(string filename, bool compression, IRcCompressor compressor)
{
VoxelFile voxelFile = VoxelFile.From(dynaMesh);
DtVoxelFile voxelFile = DtVoxelFile.From(dynaMesh);
using var fs = new FileStream(filename, FileMode.CreateNew, FileAccess.Write);
using var bw = new BinaryWriter(fs);
VoxelFileWriter writer = new VoxelFileWriter(compressor);
DtVoxelFileWriter writer = new DtVoxelFileWriter(compressor);
writer.Write(bw, voxelFile, compression);
}
@ -168,7 +168,7 @@ namespace DotRecast.Recast.Toolset.Tools
public RcGizmo SphereCollider(RcVec3f p, float walkableClimb)
{
float radius = 1 + (float)random.NextDouble() * 10;
var collider = new SphereCollider(p, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var collider = new DtSphereCollider(p, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var gizmo = GizmoFactory.Sphere(p, radius);
return new RcGizmo(collider, gizmo);
@ -189,7 +189,7 @@ namespace DotRecast.Recast.Toolset.Tools
a.z *= len;
RcVec3f start = RcVec3f.Of(p.x, p.y, p.z);
RcVec3f end = RcVec3f.Of(p.x + a.x, p.y + a.y, p.z + a.z);
var collider = new CapsuleCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var collider = new DtCapsuleCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var gizmo = GizmoFactory.Capsule(start, end, radius);
return new RcGizmo(collider, gizmo);
}
@ -203,8 +203,8 @@ namespace DotRecast.Recast.Toolset.Tools
);
RcVec3f forward = RcVec3f.Of((1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble()));
RcVec3f up = RcVec3f.Of((1f - 2 * (float)random.NextDouble()), 0.01f + (float)random.NextDouble(), (1f - 2 * (float)random.NextDouble()));
RcVec3f[] halfEdges = Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(up, forward, extent);
var collider = new BoxCollider(p, halfEdges, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
RcVec3f[] halfEdges = Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(up, forward, extent);
var collider = new DtBoxCollider(p, halfEdges, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var gizmo = GizmoFactory.Box(p, halfEdges);
return new RcGizmo(collider, gizmo);
}
@ -220,7 +220,7 @@ namespace DotRecast.Recast.Toolset.Tools
a[2] *= len;
RcVec3f start = RcVec3f.Of(p.x, p.y, p.z);
RcVec3f end = RcVec3f.Of(p.x + a.x, p.y + a.y, p.z + a.z);
var collider = new CylinderCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var collider = new DtCylinderCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var gizmo = GizmoFactory.Cylinder(start, end, radius);
return new RcGizmo(collider, gizmo);
@ -234,14 +234,14 @@ namespace DotRecast.Recast.Toolset.Tools
RcVec3f forward = RcVec3f.Of((1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble()));
forward.Normalize();
RcVec3f side = RcVec3f.Cross(forward, baseUp);
BoxCollider @base = new BoxCollider(baseCenter, Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(baseUp, forward, baseExtent),
DtBoxCollider @base = new DtBoxCollider(baseCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(baseUp, forward, baseExtent),
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, walkableClimb);
var roofUp = RcVec3f.Zero;
RcVec3f roofExtent = RcVec3f.Of(4.5f, 4.5f, 8f);
var rx = RcMatrix4x4f.CreateFromRotate(45, forward.x, forward.y, forward.z);
roofUp = MulMatrixVector(ref roofUp, rx, baseUp);
RcVec3f roofCenter = RcVec3f.Of(p.x, p.y + 6, p.z);
BoxCollider roof = new BoxCollider(roofCenter, Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(roofUp, forward, roofExtent),
DtBoxCollider roof = new DtBoxCollider(roofCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(roofUp, forward, roofExtent),
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, walkableClimb);
RcVec3f trunkStart = RcVec3f.Of(
baseCenter.x - forward.x * 15 + side.x * 6,
@ -249,17 +249,17 @@ namespace DotRecast.Recast.Toolset.Tools
baseCenter.z - forward.z * 15 + side.z * 6
);
RcVec3f trunkEnd = RcVec3f.Of(trunkStart.x, trunkStart.y + 10, trunkStart.z);
CapsuleCollider trunk = new CapsuleCollider(trunkStart, trunkEnd, 0.5f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
DtCapsuleCollider trunk = new DtCapsuleCollider(trunkStart, trunkEnd, 0.5f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
walkableClimb);
RcVec3f crownCenter = RcVec3f.Of(
baseCenter.x - forward.x * 15 + side.x * 6, p.y + 10,
baseCenter.z - forward.z * 15 + side.z * 6
);
SphereCollider crown = new SphereCollider(crownCenter, 4f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS,
DtSphereCollider crown = new DtSphereCollider(crownCenter, 4f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS,
walkableClimb);
CompositeCollider collider = new CompositeCollider(@base, roof, trunk, crown);
IRcGizmoMeshFilter baseGizmo = GizmoFactory.Box(baseCenter, Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(baseUp, forward, baseExtent));
IRcGizmoMeshFilter roofGizmo = GizmoFactory.Box(roofCenter, Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(roofUp, forward, roofExtent));
DtCompositeCollider collider = new DtCompositeCollider(@base, roof, trunk, crown);
IRcGizmoMeshFilter baseGizmo = GizmoFactory.Box(baseCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(baseUp, forward, baseExtent));
IRcGizmoMeshFilter roofGizmo = GizmoFactory.Box(roofCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(roofUp, forward, roofExtent));
IRcGizmoMeshFilter trunkGizmo = GizmoFactory.Capsule(trunkStart, trunkEnd, 0.5f);
IRcGizmoMeshFilter crownGizmo = GizmoFactory.Sphere(crownCenter, 4f);
IRcGizmoMeshFilter gizmo = GizmoFactory.Composite(baseGizmo, roofGizmo, trunkGizmo, crownGizmo);
@ -279,7 +279,7 @@ namespace DotRecast.Recast.Toolset.Tools
public RcGizmo ConvexTrimesh(RcVec3f p, float walkableClimb)
{
float[] verts = TransformVertices(p, convexGeom, 360);
var collider = new ConvexTrimeshCollider(verts, convexGeom.faces,
var collider = new DtConvexTrimeshCollider(verts, convexGeom.faces,
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, walkableClimb * 10);
var gizmo = GizmoFactory.Trimesh(verts, convexGeom.faces);
return new RcGizmo(collider, gizmo);
@ -288,7 +288,7 @@ namespace DotRecast.Recast.Toolset.Tools
private RcGizmo TrimeshCollider(RcVec3f p, DemoInputGeomProvider geom, float walkableClimb)
{
float[] verts = TransformVertices(p, geom, 0);
var collider = new TrimeshCollider(verts, geom.faces, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
var collider = new DtTrimeshCollider(verts, geom.faces, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
walkableClimb * 10);
var gizmo = GizmoFactory.Trimesh(verts, geom.faces);

View File

@ -26,10 +26,10 @@ public class DynamicNavMeshTest
using var br = new BinaryReader(ms);
// load voxels from file
VoxelFileReader reader = new VoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
VoxelFile f = reader.Read(br);
DtVoxelFileReader reader = new DtVoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
DtVoxelFile f = reader.Read(br);
// create dynamic navmesh
DynamicNavMesh mesh = new DynamicNavMesh(f);
DtDynamicNavMesh mesh = new DtDynamicNavMesh(f);
// build navmesh asynchronously using multiple threads
Task<bool> future = mesh.Build(Task.Factory);
// wait for build to complete
@ -49,7 +49,7 @@ public class DynamicNavMeshTest
Assert.That(path.Count, Is.EqualTo(16));
// place obstacle
ICollider colldier = new SphereCollider(SPHERE_POS, 20, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GROUND, 0.1f);
IDtCollider colldier = new DtSphereCollider(SPHERE_POS, 20, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GROUND, 0.1f);
long colliderId = mesh.AddCollider(colldier);
// update navmesh asynchronously

View File

@ -34,7 +34,7 @@ namespace DotRecast.Detour.Dynamic.Test.Io
public byte[] Decompress(byte[] data)
{
int compressedSize = ByteUtils.GetIntBE(data, 0);
int compressedSize = RcByteUtils.GetIntBE(data, 0);
return LZ4Pickler.Unpickle(data.AsSpan(4, compressedSize));
}
@ -47,7 +47,7 @@ namespace DotRecast.Detour.Dynamic.Test.Io
{
byte[] compressed = LZ4Pickler.Pickle(data, LZ4Level.L12_MAX);
byte[] result = new byte[4 + compressed.Length];
ByteUtils.PutInt(compressed.Length, result, 0, RcByteOrder.BIG_ENDIAN);
RcByteUtils.PutInt(compressed.Length, result, 0, RcByteOrder.BIG_ENDIAN);
Array.Copy(compressed, 0, result, 4, compressed.Length);
return result;
}

View File

@ -34,8 +34,8 @@ public class VoxelFileReaderTest
using var ms = new MemoryStream(bytes);
using var br = new BinaryReader(ms);
VoxelFileReader reader = new VoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
VoxelFile f = reader.Read(br);
DtVoxelFileReader reader = new DtVoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
DtVoxelFile f = reader.Read(br);
Assert.That(f.useTiles, Is.False);
Assert.That(f.bounds, Is.EqualTo(new float[] { -100.0f, 0f, -100f, 100f, 5f, 100f }));
Assert.That(f.cellSize, Is.EqualTo(0.25f));
@ -60,8 +60,8 @@ public class VoxelFileReaderTest
using var ms = new MemoryStream(bytes);
using var br = new BinaryReader(ms);
VoxelFileReader reader = new VoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
VoxelFile f = reader.Read(br);
DtVoxelFileReader reader = new DtVoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
DtVoxelFile f = reader.Read(br);
Assert.That(f.useTiles, Is.True);
Assert.That(f.bounds, Is.EqualTo(new float[] { -100.0f, 0f, -100f, 100f, 5f, 100f }));

View File

@ -35,7 +35,7 @@ public class VoxelFileReaderWriterTest
using var ms = new MemoryStream(bytes);
using var br = new BinaryReader(ms);
VoxelFile f = ReadWriteRead(br, compression);
DtVoxelFile f = ReadWriteRead(br, compression);
Assert.That(f.useTiles, Is.False);
Assert.That(f.bounds, Is.EqualTo(new[] { -100.0f, 0f, -100f, 100f, 5f, 100f }));
Assert.That(f.cellSize, Is.EqualTo(0.25f));
@ -63,7 +63,7 @@ public class VoxelFileReaderWriterTest
using var ms = new MemoryStream(bytes);
using var br = new BinaryReader(ms);
VoxelFile f = ReadWriteRead(br, compression);
DtVoxelFile f = ReadWriteRead(br, compression);
Assert.That(f.useTiles, Is.True);
Assert.That(f.bounds, Is.EqualTo(new[] { -100.0f, 0f, -100f, 100f, 5f, 100f }));
@ -86,14 +86,14 @@ public class VoxelFileReaderWriterTest
Assert.That(f.tiles[0].boundsMax, Is.EqualTo(RcVec3f.Of(-78.75f, 5.0f, -78.75f)));
}
private VoxelFile ReadWriteRead(BinaryReader bis, bool compression)
private DtVoxelFile ReadWriteRead(BinaryReader bis, bool compression)
{
VoxelFileReader reader = new VoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
VoxelFile f = reader.Read(bis);
DtVoxelFileReader reader = new DtVoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
DtVoxelFile f = reader.Read(bis);
using var msw = new MemoryStream();
using var bw = new BinaryWriter(msw);
VoxelFileWriter writer = new VoxelFileWriter(DtVoxelTileLZ4ForTestCompressor.Shared);
DtVoxelFileWriter writer = new DtVoxelFileWriter(DtVoxelTileLZ4ForTestCompressor.Shared);
writer.Write(bw, f, compression);
using var msr = new MemoryStream(msw.ToArray());

View File

@ -56,7 +56,7 @@ public class VoxelQueryTest
captorZ.Add(z);
});
VoxelQuery query = new VoxelQuery(ORIGIN, TILE_WIDTH, TILE_DEPTH, hfProvider.Object);
DtVoxelQuery query = new DtVoxelQuery(ORIGIN, TILE_WIDTH, TILE_DEPTH, hfProvider.Object);
RcVec3f start = RcVec3f.Of(120, 10, 365);
RcVec3f end = RcVec3f.Of(320, 10, 57);
@ -71,8 +71,8 @@ public class VoxelQueryTest
[Test]
public void ShouldHandleRaycastWithoutObstacles()
{
DynamicNavMesh mesh = CreateDynaMesh();
VoxelQuery query = mesh.VoxelQuery();
DtDynamicNavMesh mesh = CreateDynaMesh();
DtVoxelQuery query = mesh.VoxelQuery();
RcVec3f start = RcVec3f.Of(7.4f, 0.5f, -64.8f);
RcVec3f end = RcVec3f.Of(31.2f, 0.5f, -75.3f);
bool isHit = query.Raycast(start, end, out var hit);
@ -82,8 +82,8 @@ public class VoxelQueryTest
[Test]
public void ShouldHandleRaycastWithObstacles()
{
DynamicNavMesh mesh = CreateDynaMesh();
VoxelQuery query = mesh.VoxelQuery();
DtDynamicNavMesh mesh = CreateDynaMesh();
DtVoxelQuery query = mesh.VoxelQuery();
RcVec3f start = RcVec3f.Of(32.3f, 0.5f, 47.9f);
RcVec3f end = RcVec3f.Of(-31.2f, 0.5f, -29.8f);
bool isHit = query.Raycast(start, end, out var hit);
@ -91,17 +91,17 @@ public class VoxelQueryTest
Assert.That(hit, Is.EqualTo(0.5263836f).Within(1e-7f));
}
private DynamicNavMesh CreateDynaMesh()
private DtDynamicNavMesh CreateDynaMesh()
{
var bytes = Loader.ToBytes("test_tiles.voxels");
using var ms = new MemoryStream(bytes);
using var br = new BinaryReader(ms);
// load voxels from file
VoxelFileReader reader = new VoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
VoxelFile f = reader.Read(br);
DtVoxelFileReader reader = new DtVoxelFileReader(DtVoxelTileLZ4ForTestCompressor.Shared);
DtVoxelFile f = reader.Read(br);
// create dynamic navmesh
var mesh = new DynamicNavMesh(f);
var mesh = new DtDynamicNavMesh(f);
// build navmesh asynchronously using multiple threads
Task<bool> future = mesh.Build(Task.Factory);
// wait for build to complete