forked from bit/DotRecastNetSim
refactor: rename for unity3d
This commit is contained in:
parent
25bc69f2e4
commit
087582c42e
|
@ -387,7 +387,7 @@ public class RecastDemo : IRecastDemoChannel
|
||||||
new OffMeshConnectionSampleTool(),
|
new OffMeshConnectionSampleTool(),
|
||||||
new ConvexVolumeSampleTool(),
|
new ConvexVolumeSampleTool(),
|
||||||
new CrowdSampleTool(),
|
new CrowdSampleTool(),
|
||||||
new CrowdProfilingSampleTool(),
|
new CrowdAgentProfilingSampleTool(),
|
||||||
new JumpLinkBuilderSampleTool(),
|
new JumpLinkBuilderSampleTool(),
|
||||||
new DynamicUpdateSampleTool()
|
new DynamicUpdateSampleTool()
|
||||||
);
|
);
|
||||||
|
|
|
@ -33,17 +33,17 @@ using static DotRecast.Recast.Demo.Draw.DebugDraw;
|
||||||
|
|
||||||
namespace DotRecast.Recast.Demo.Tools;
|
namespace DotRecast.Recast.Demo.Tools;
|
||||||
|
|
||||||
public class CrowdProfilingSampleTool : ISampleTool
|
public class CrowdAgentProfilingSampleTool : ISampleTool
|
||||||
{
|
{
|
||||||
private static readonly ILogger Logger = Log.ForContext<CrowdProfilingSampleTool>();
|
private static readonly ILogger Logger = Log.ForContext<CrowdAgentProfilingSampleTool>();
|
||||||
|
|
||||||
private DemoSample _sample;
|
private DemoSample _sample;
|
||||||
private DtNavMesh m_nav;
|
private DtNavMesh m_nav;
|
||||||
|
|
||||||
private readonly RcCrowdProfilingTool _tool;
|
private readonly RcCrowdAgentProfilingTool _tool;
|
||||||
|
|
||||||
|
|
||||||
public CrowdProfilingSampleTool()
|
public CrowdAgentProfilingSampleTool()
|
||||||
{
|
{
|
||||||
_tool = new();
|
_tool = new();
|
||||||
}
|
}
|
||||||
|
@ -139,19 +139,19 @@ public class CrowdProfilingSampleTool : ISampleTool
|
||||||
|
|
||||||
foreach (DtCrowdAgent ag in crowd.GetActiveAgents())
|
foreach (DtCrowdAgent ag in crowd.GetActiveAgents())
|
||||||
{
|
{
|
||||||
CrowdAgentData crowAgentData = (CrowdAgentData)ag.option.userData;
|
RcCrowdAgentData crowAgentData = (RcCrowdAgentData)ag.option.userData;
|
||||||
|
|
||||||
float height = ag.option.height;
|
float height = ag.option.height;
|
||||||
float radius = ag.option.radius;
|
float radius = ag.option.radius;
|
||||||
RcVec3f pos = ag.npos;
|
RcVec3f pos = ag.npos;
|
||||||
|
|
||||||
int col = DuRGBA(220, 220, 220, 128);
|
int col = DuRGBA(220, 220, 220, 128);
|
||||||
if (crowAgentData.type == CrowdAgentType.TRAVELLER)
|
if (crowAgentData.type == RcCrowdAgentType.TRAVELLER)
|
||||||
{
|
{
|
||||||
col = DuRGBA(100, 160, 100, 128);
|
col = DuRGBA(100, 160, 100, 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (crowAgentData.type == CrowdAgentType.VILLAGER)
|
if (crowAgentData.type == RcCrowdAgentType.VILLAGER)
|
||||||
{
|
{
|
||||||
col = DuRGBA(120, 80, 160, 128);
|
col = DuRGBA(120, 80, 160, 128);
|
||||||
}
|
}
|
|
@ -44,8 +44,8 @@ public class CrowdSampleTool : ISampleTool
|
||||||
|
|
||||||
private DtNavMesh m_nav;
|
private DtNavMesh m_nav;
|
||||||
|
|
||||||
private CrowdToolMode m_mode = CrowdToolMode.CREATE;
|
private RcCrowdToolMode m_mode = RcCrowdToolMode.CREATE;
|
||||||
private int m_modeIdx = CrowdToolMode.CREATE.Idx;
|
private int m_modeIdx = RcCrowdToolMode.CREATE.Idx;
|
||||||
|
|
||||||
private int _expandSelectedDebugDraw = 1;
|
private int _expandSelectedDebugDraw = 1;
|
||||||
private bool _showCorners = true;
|
private bool _showCorners = true;
|
||||||
|
@ -71,16 +71,16 @@ public class CrowdSampleTool : ISampleTool
|
||||||
{
|
{
|
||||||
ImGui.Text($"Crowd Tool Mode");
|
ImGui.Text($"Crowd Tool Mode");
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
CrowdToolMode previousToolMode = m_mode;
|
RcCrowdToolMode previousToolMode = m_mode;
|
||||||
ImGui.RadioButton(CrowdToolMode.CREATE.Label, ref m_modeIdx, CrowdToolMode.CREATE.Idx);
|
ImGui.RadioButton(RcCrowdToolMode.CREATE.Label, ref m_modeIdx, RcCrowdToolMode.CREATE.Idx);
|
||||||
ImGui.RadioButton(CrowdToolMode.MOVE_TARGET.Label, ref m_modeIdx, CrowdToolMode.MOVE_TARGET.Idx);
|
ImGui.RadioButton(RcCrowdToolMode.MOVE_TARGET.Label, ref m_modeIdx, RcCrowdToolMode.MOVE_TARGET.Idx);
|
||||||
ImGui.RadioButton(CrowdToolMode.SELECT.Label, ref m_modeIdx, CrowdToolMode.SELECT.Idx);
|
ImGui.RadioButton(RcCrowdToolMode.SELECT.Label, ref m_modeIdx, RcCrowdToolMode.SELECT.Idx);
|
||||||
ImGui.RadioButton(CrowdToolMode.TOGGLE_POLYS.Label, ref m_modeIdx, CrowdToolMode.TOGGLE_POLYS.Idx);
|
ImGui.RadioButton(RcCrowdToolMode.TOGGLE_POLYS.Label, ref m_modeIdx, RcCrowdToolMode.TOGGLE_POLYS.Idx);
|
||||||
ImGui.NewLine();
|
ImGui.NewLine();
|
||||||
|
|
||||||
if (previousToolMode.Idx != m_modeIdx)
|
if (previousToolMode.Idx != m_modeIdx)
|
||||||
{
|
{
|
||||||
m_mode = CrowdToolMode.Values[m_modeIdx];
|
m_mode = RcCrowdToolMode.Values[m_modeIdx];
|
||||||
}
|
}
|
||||||
|
|
||||||
var crowdCfg = _tool.GetCrowdConfig();
|
var crowdCfg = _tool.GetCrowdConfig();
|
||||||
|
@ -219,18 +219,18 @@ public class CrowdSampleTool : ISampleTool
|
||||||
// Trail
|
// Trail
|
||||||
foreach (DtCrowdAgent ag in crowd.GetActiveAgents())
|
foreach (DtCrowdAgent ag in crowd.GetActiveAgents())
|
||||||
{
|
{
|
||||||
CrowdAgentTrail trail = agentTrails[ag.idx];
|
RcCrowdAgentTrail trail = agentTrails[ag.idx];
|
||||||
RcVec3f pos = ag.npos;
|
RcVec3f pos = ag.npos;
|
||||||
|
|
||||||
dd.Begin(LINES, 3.0f);
|
dd.Begin(LINES, 3.0f);
|
||||||
RcVec3f prev = new RcVec3f();
|
RcVec3f prev = new RcVec3f();
|
||||||
float preva = 1;
|
float preva = 1;
|
||||||
prev = pos;
|
prev = pos;
|
||||||
for (int j = 0; j < CrowdAgentTrail.AGENT_MAX_TRAIL - 1; ++j)
|
for (int j = 0; j < RcCrowdAgentTrail.AGENT_MAX_TRAIL - 1; ++j)
|
||||||
{
|
{
|
||||||
int idx = (trail.htrail + CrowdAgentTrail.AGENT_MAX_TRAIL - j) % CrowdAgentTrail.AGENT_MAX_TRAIL;
|
int idx = (trail.htrail + RcCrowdAgentTrail.AGENT_MAX_TRAIL - j) % RcCrowdAgentTrail.AGENT_MAX_TRAIL;
|
||||||
int v = idx * 3;
|
int v = idx * 3;
|
||||||
float a = 1 - j / (float)CrowdAgentTrail.AGENT_MAX_TRAIL;
|
float a = 1 - j / (float)RcCrowdAgentTrail.AGENT_MAX_TRAIL;
|
||||||
dd.Vertex(prev.x, prev.y + 0.1f, prev.z, 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;
|
||||||
|
@ -480,7 +480,7 @@ public class CrowdSampleTool : ISampleTool
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_mode == CrowdToolMode.CREATE)
|
if (m_mode == RcCrowdToolMode.CREATE)
|
||||||
{
|
{
|
||||||
if (shift)
|
if (shift)
|
||||||
{
|
{
|
||||||
|
@ -498,17 +498,17 @@ public class CrowdSampleTool : ISampleTool
|
||||||
_tool.AddAgent(p, settings.agentRadius, settings.agentHeight, settings.agentMaxAcceleration, settings.agentMaxSpeed);
|
_tool.AddAgent(p, settings.agentRadius, settings.agentHeight, settings.agentMaxAcceleration, settings.agentMaxSpeed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_mode == CrowdToolMode.MOVE_TARGET)
|
else if (m_mode == RcCrowdToolMode.MOVE_TARGET)
|
||||||
{
|
{
|
||||||
_tool.SetMoveTarget(p, shift);
|
_tool.SetMoveTarget(p, shift);
|
||||||
}
|
}
|
||||||
else if (m_mode == CrowdToolMode.SELECT)
|
else if (m_mode == RcCrowdToolMode.SELECT)
|
||||||
{
|
{
|
||||||
// Highlight
|
// Highlight
|
||||||
DtCrowdAgent ahit = _tool.HitTestAgents(s, p);
|
DtCrowdAgent ahit = _tool.HitTestAgents(s, p);
|
||||||
_tool.HighlightAgent(ahit);
|
_tool.HighlightAgent(ahit);
|
||||||
}
|
}
|
||||||
else if (m_mode == CrowdToolMode.TOGGLE_POLYS)
|
else if (m_mode == RcCrowdToolMode.TOGGLE_POLYS)
|
||||||
{
|
{
|
||||||
DtNavMesh nav = _sample.GetNavMesh();
|
DtNavMesh nav = _sample.GetNavMesh();
|
||||||
DtNavMeshQuery navquery = _sample.GetNavMeshQuery();
|
DtNavMeshQuery navquery = _sample.GetNavMeshQuery();
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
private DemoSample _sample;
|
private DemoSample _sample;
|
||||||
private readonly RcDynamicUpdateTool _tool;
|
private readonly RcDynamicUpdateTool _tool;
|
||||||
|
|
||||||
private DynamicUpdateToolMode mode = DynamicUpdateToolMode.BUILD;
|
private RcDynamicUpdateToolMode mode = RcDynamicUpdateToolMode.BUILD;
|
||||||
private float cellSize = 0.3f;
|
private float cellSize = 0.3f;
|
||||||
|
|
||||||
// build config
|
// build config
|
||||||
|
@ -75,7 +75,7 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
private long buildTime;
|
private long buildTime;
|
||||||
private long raycastTime;
|
private long raycastTime;
|
||||||
|
|
||||||
private DynamicColliderShape colliderShape = DynamicColliderShape.SPHERE;
|
private RcDynamicColliderShape colliderShape = RcDynamicColliderShape.SPHERE;
|
||||||
|
|
||||||
private readonly TaskFactory executor;
|
private readonly TaskFactory executor;
|
||||||
|
|
||||||
|
@ -101,20 +101,20 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
|
|
||||||
ImGui.Text($"Dynamic Update Tool Modes");
|
ImGui.Text($"Dynamic Update Tool Modes");
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
ImGui.RadioButton(DynamicUpdateToolMode.BUILD.Label, ref prevModeIdx, DynamicUpdateToolMode.BUILD.Idx);
|
ImGui.RadioButton(RcDynamicUpdateToolMode.BUILD.Label, ref prevModeIdx, RcDynamicUpdateToolMode.BUILD.Idx);
|
||||||
ImGui.RadioButton(DynamicUpdateToolMode.COLLIDERS.Label, ref prevModeIdx, DynamicUpdateToolMode.COLLIDERS.Idx);
|
ImGui.RadioButton(RcDynamicUpdateToolMode.COLLIDERS.Label, ref prevModeIdx, RcDynamicUpdateToolMode.COLLIDERS.Idx);
|
||||||
ImGui.RadioButton(DynamicUpdateToolMode.RAYCAST.Label, ref prevModeIdx, DynamicUpdateToolMode.RAYCAST.Idx);
|
ImGui.RadioButton(RcDynamicUpdateToolMode.RAYCAST.Label, ref prevModeIdx, RcDynamicUpdateToolMode.RAYCAST.Idx);
|
||||||
ImGui.NewLine();
|
ImGui.NewLine();
|
||||||
|
|
||||||
if (prevModeIdx != mode.Idx)
|
if (prevModeIdx != mode.Idx)
|
||||||
{
|
{
|
||||||
mode = DynamicUpdateToolMode.Values[prevModeIdx];
|
mode = RcDynamicUpdateToolMode.Values[prevModeIdx];
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.Text($"Selected mode - {mode.Label}");
|
ImGui.Text($"Selected mode - {mode.Label}");
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
|
|
||||||
if (mode == DynamicUpdateToolMode.BUILD)
|
if (mode == RcDynamicUpdateToolMode.BUILD)
|
||||||
{
|
{
|
||||||
var loadVoxelPopupStrId = "Load Voxels Popup";
|
var loadVoxelPopupStrId = "Load Voxels Popup";
|
||||||
bool isLoadVoxelPopup = true;
|
bool isLoadVoxelPopup = true;
|
||||||
|
@ -224,30 +224,30 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == DynamicUpdateToolMode.COLLIDERS)
|
if (mode == RcDynamicUpdateToolMode.COLLIDERS)
|
||||||
{
|
{
|
||||||
var prevColliderShape = (int)colliderShape;
|
var prevColliderShape = (int)colliderShape;
|
||||||
|
|
||||||
ImGui.Text("Colliders");
|
ImGui.Text("Colliders");
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
ImGui.Checkbox("Show", ref showColliders);
|
ImGui.Checkbox("Show", ref showColliders);
|
||||||
ImGui.RadioButton("Sphere", ref prevColliderShape, (int)DynamicColliderShape.SPHERE);
|
ImGui.RadioButton("Sphere", ref prevColliderShape, (int)RcDynamicColliderShape.SPHERE);
|
||||||
ImGui.RadioButton("Capsule", ref prevColliderShape, (int)DynamicColliderShape.CAPSULE);
|
ImGui.RadioButton("Capsule", ref prevColliderShape, (int)RcDynamicColliderShape.CAPSULE);
|
||||||
ImGui.RadioButton("Box", ref prevColliderShape, (int)DynamicColliderShape.BOX);
|
ImGui.RadioButton("Box", ref prevColliderShape, (int)RcDynamicColliderShape.BOX);
|
||||||
ImGui.RadioButton("Cylinder", ref prevColliderShape, (int)DynamicColliderShape.CYLINDER);
|
ImGui.RadioButton("Cylinder", ref prevColliderShape, (int)RcDynamicColliderShape.CYLINDER);
|
||||||
ImGui.RadioButton("Composite", ref prevColliderShape, (int)DynamicColliderShape.COMPOSITE);
|
ImGui.RadioButton("Composite", ref prevColliderShape, (int)RcDynamicColliderShape.COMPOSITE);
|
||||||
ImGui.RadioButton("Convex Trimesh", ref prevColliderShape, (int)DynamicColliderShape.CONVEX);
|
ImGui.RadioButton("Convex Trimesh", ref prevColliderShape, (int)RcDynamicColliderShape.CONVEX);
|
||||||
ImGui.RadioButton("Trimesh Bridge", ref prevColliderShape, (int)DynamicColliderShape.TRIMESH_BRIDGE);
|
ImGui.RadioButton("Trimesh Bridge", ref prevColliderShape, (int)RcDynamicColliderShape.TRIMESH_BRIDGE);
|
||||||
ImGui.RadioButton("Trimesh House", ref prevColliderShape, (int)DynamicColliderShape.TRIMESH_HOUSE);
|
ImGui.RadioButton("Trimesh House", ref prevColliderShape, (int)RcDynamicColliderShape.TRIMESH_HOUSE);
|
||||||
ImGui.NewLine();
|
ImGui.NewLine();
|
||||||
|
|
||||||
if (prevColliderShape != (int)colliderShape)
|
if (prevColliderShape != (int)colliderShape)
|
||||||
{
|
{
|
||||||
colliderShape = (DynamicColliderShape)prevColliderShape;
|
colliderShape = (RcDynamicColliderShape)prevColliderShape;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == DynamicUpdateToolMode.RAYCAST)
|
if (mode == RcDynamicUpdateToolMode.RAYCAST)
|
||||||
{
|
{
|
||||||
ImGui.Text($"Raycast Time: {raycastTime} ms");
|
ImGui.Text($"Raycast Time: {raycastTime} ms");
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
|
@ -276,7 +276,7 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
|
|
||||||
public void HandleRender(NavMeshRenderer renderer)
|
public void HandleRender(NavMeshRenderer renderer)
|
||||||
{
|
{
|
||||||
if (mode == DynamicUpdateToolMode.COLLIDERS)
|
if (mode == RcDynamicUpdateToolMode.COLLIDERS)
|
||||||
{
|
{
|
||||||
if (showColliders)
|
if (showColliders)
|
||||||
{
|
{
|
||||||
|
@ -287,7 +287,7 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == DynamicUpdateToolMode.RAYCAST)
|
if (mode == RcDynamicUpdateToolMode.RAYCAST)
|
||||||
{
|
{
|
||||||
RecastDebugDraw dd = renderer.GetDebugDraw();
|
RecastDebugDraw dd = renderer.GetDebugDraw();
|
||||||
int startCol = DuRGBA(128, 25, 0, 192);
|
int startCol = DuRGBA(128, 25, 0, 192);
|
||||||
|
@ -356,7 +356,7 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
|
|
||||||
public void HandleClick(RcVec3f s, RcVec3f p, bool shift)
|
public void HandleClick(RcVec3f s, RcVec3f p, bool shift)
|
||||||
{
|
{
|
||||||
if (mode == DynamicUpdateToolMode.COLLIDERS)
|
if (mode == RcDynamicUpdateToolMode.COLLIDERS)
|
||||||
{
|
{
|
||||||
if (!shift)
|
if (!shift)
|
||||||
{
|
{
|
||||||
|
@ -364,7 +364,7 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == DynamicUpdateToolMode.RAYCAST)
|
if (mode == RcDynamicUpdateToolMode.RAYCAST)
|
||||||
{
|
{
|
||||||
if (shift)
|
if (shift)
|
||||||
{
|
{
|
||||||
|
@ -392,7 +392,7 @@ public class DynamicUpdateSampleTool : ISampleTool
|
||||||
|
|
||||||
public void HandleClickRay(RcVec3f start, RcVec3f dir, bool shift)
|
public void HandleClickRay(RcVec3f start, RcVec3f dir, bool shift)
|
||||||
{
|
{
|
||||||
if (mode == DynamicUpdateToolMode.COLLIDERS)
|
if (mode == RcDynamicUpdateToolMode.COLLIDERS)
|
||||||
{
|
{
|
||||||
if (shift)
|
if (shift)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using DotRecast.Core;
|
using DotRecast.Core;
|
||||||
using static DotRecast.Core.RcMath;
|
using static DotRecast.Core.RcMath;
|
||||||
using static DotRecast.Recast.Toolset.Gizmos.GizmoHelper;
|
using static DotRecast.Recast.Toolset.Gizmos.RcGizmoHelper;
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Gizmos
|
namespace DotRecast.Recast.Toolset.Gizmos
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using DotRecast.Core;
|
using DotRecast.Core;
|
||||||
using static DotRecast.Core.RcMath;
|
using static DotRecast.Core.RcMath;
|
||||||
using static DotRecast.Recast.Toolset.Gizmos.GizmoHelper;
|
using static DotRecast.Recast.Toolset.Gizmos.RcGizmoHelper;
|
||||||
|
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Gizmos
|
namespace DotRecast.Recast.Toolset.Gizmos
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Gizmos
|
namespace DotRecast.Recast.Toolset.Gizmos
|
||||||
{
|
{
|
||||||
public static class GizmoFactory
|
public static class RcGizmoFactory
|
||||||
{
|
{
|
||||||
public static RcBoxGizmo Box(RcVec3f center, RcVec3f[] halfEdges)
|
public static RcBoxGizmo Box(RcVec3f center, RcVec3f[] halfEdges)
|
||||||
{
|
{
|
|
@ -2,7 +2,7 @@ using System;
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Gizmos
|
namespace DotRecast.Recast.Toolset.Gizmos
|
||||||
{
|
{
|
||||||
public static class GizmoHelper
|
public static class RcGizmoHelper
|
||||||
{
|
{
|
||||||
private static readonly int SEGMENTS = 16;
|
private static readonly int SEGMENTS = 16;
|
||||||
private static readonly int RINGS = 8;
|
private static readonly int RINGS = 8;
|
|
@ -1,5 +1,5 @@
|
||||||
using DotRecast.Core;
|
using DotRecast.Core;
|
||||||
using static DotRecast.Recast.Toolset.Gizmos.GizmoHelper;
|
using static DotRecast.Recast.Toolset.Gizmos.RcGizmoHelper;
|
||||||
|
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Gizmos
|
namespace DotRecast.Recast.Toolset.Gizmos
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
using DotRecast.Core;
|
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
|
||||||
{
|
|
||||||
public class CrowdToolMode
|
|
||||||
{
|
|
||||||
public static readonly CrowdToolMode CREATE = new CrowdToolMode(0, "Create Agents");
|
|
||||||
public static readonly CrowdToolMode MOVE_TARGET = new CrowdToolMode(1, "Move Target");
|
|
||||||
public static readonly CrowdToolMode SELECT = new CrowdToolMode(2, "Select Agent");
|
|
||||||
public static readonly CrowdToolMode TOGGLE_POLYS = new CrowdToolMode(3, "Toggle Polys");
|
|
||||||
|
|
||||||
public static readonly RcImmutableArray<CrowdToolMode> Values = RcImmutableArray.Create(
|
|
||||||
CREATE,
|
|
||||||
MOVE_TARGET,
|
|
||||||
SELECT,
|
|
||||||
TOGGLE_POLYS
|
|
||||||
);
|
|
||||||
|
|
||||||
public int Idx { get; }
|
|
||||||
public string Label { get; }
|
|
||||||
|
|
||||||
private CrowdToolMode(int idx, string label)
|
|
||||||
{
|
|
||||||
Idx = idx;
|
|
||||||
Label = label;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
using DotRecast.Core;
|
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
|
||||||
{
|
|
||||||
public class DynamicUpdateToolMode
|
|
||||||
{
|
|
||||||
public static readonly DynamicUpdateToolMode BUILD = new DynamicUpdateToolMode(0, "Build");
|
|
||||||
public static readonly DynamicUpdateToolMode COLLIDERS = new DynamicUpdateToolMode(1, "Colliders");
|
|
||||||
public static readonly DynamicUpdateToolMode RAYCAST = new DynamicUpdateToolMode(2, "Raycast");
|
|
||||||
|
|
||||||
public static readonly RcImmutableArray<DynamicUpdateToolMode> Values = RcImmutableArray.Create(
|
|
||||||
BUILD, COLLIDERS, RAYCAST
|
|
||||||
);
|
|
||||||
|
|
||||||
public int Idx { get; }
|
|
||||||
public string Label { get; }
|
|
||||||
|
|
||||||
private DynamicUpdateToolMode(int idx, string label)
|
|
||||||
{
|
|
||||||
Idx = idx;
|
|
||||||
Label = label;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
public class CrowdAgentData
|
public class RcCrowdAgentData
|
||||||
{
|
{
|
||||||
public readonly CrowdAgentType type;
|
public readonly RcCrowdAgentType type;
|
||||||
public readonly RcVec3f home = new RcVec3f();
|
public readonly RcVec3f home = new RcVec3f();
|
||||||
|
|
||||||
public CrowdAgentData(CrowdAgentType type, RcVec3f home)
|
public RcCrowdAgentData(RcCrowdAgentType type, RcVec3f home)
|
||||||
{
|
{
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.home = home;
|
this.home = home;
|
|
@ -7,9 +7,9 @@ using DotRecast.Recast.Toolset.Builder;
|
||||||
|
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
public class RcCrowdProfilingTool : IRcToolable
|
public class RcCrowdAgentProfilingTool : IRcToolable
|
||||||
{
|
{
|
||||||
private CrowdProfilingToolConfig _cfg;
|
private RcCrowdAgentProfilingToolConfig _cfg;
|
||||||
|
|
||||||
private DtCrowdConfig _crowdCfg;
|
private DtCrowdConfig _crowdCfg;
|
||||||
private DtCrowd crowd;
|
private DtCrowd crowd;
|
||||||
|
@ -21,19 +21,19 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
private readonly List<DtPolyPoint> _polyPoints;
|
private readonly List<DtPolyPoint> _polyPoints;
|
||||||
private long crowdUpdateTime;
|
private long crowdUpdateTime;
|
||||||
|
|
||||||
public RcCrowdProfilingTool()
|
public RcCrowdAgentProfilingTool()
|
||||||
{
|
{
|
||||||
_cfg = new CrowdProfilingToolConfig();
|
_cfg = new RcCrowdAgentProfilingToolConfig();
|
||||||
_agCfg = new DtCrowdAgentConfig();
|
_agCfg = new DtCrowdAgentConfig();
|
||||||
_polyPoints = new List<DtPolyPoint>();
|
_polyPoints = new List<DtPolyPoint>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetName()
|
public string GetName()
|
||||||
{
|
{
|
||||||
return "Crowd Profiling";
|
return "Crowd Agent Profiling";
|
||||||
}
|
}
|
||||||
|
|
||||||
public CrowdProfilingToolConfig GetToolConfig()
|
public RcCrowdAgentProfilingToolConfig GetToolConfig()
|
||||||
{
|
{
|
||||||
return _cfg;
|
return _cfg;
|
||||||
}
|
}
|
||||||
|
@ -170,7 +170,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
for (int i = 0; i < _cfg.agents; i++)
|
for (int i = 0; i < _cfg.agents; i++)
|
||||||
{
|
{
|
||||||
float tr = rnd.Next();
|
float tr = rnd.Next();
|
||||||
CrowdAgentType type = CrowdAgentType.MOB;
|
RcCrowdAgentType type = RcCrowdAgentType.MOB;
|
||||||
float mobsPcnt = _cfg.percentMobs / 100f;
|
float mobsPcnt = _cfg.percentMobs / 100f;
|
||||||
if (tr > mobsPcnt)
|
if (tr > mobsPcnt)
|
||||||
{
|
{
|
||||||
|
@ -178,11 +178,11 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
float travellerPcnt = _cfg.percentTravellers / 100f;
|
float travellerPcnt = _cfg.percentTravellers / 100f;
|
||||||
if (tr > travellerPcnt)
|
if (tr > travellerPcnt)
|
||||||
{
|
{
|
||||||
type = CrowdAgentType.VILLAGER;
|
type = RcCrowdAgentType.VILLAGER;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
type = CrowdAgentType.TRAVELLER;
|
type = RcCrowdAgentType.TRAVELLER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,13 +190,13 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
var randomPt = RcVec3f.Zero;
|
var randomPt = RcVec3f.Zero;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case CrowdAgentType.MOB:
|
case RcCrowdAgentType.MOB:
|
||||||
status = GetMobPosition(navquery, filter, out randomPt);
|
status = GetMobPosition(navquery, filter, out randomPt);
|
||||||
break;
|
break;
|
||||||
case CrowdAgentType.VILLAGER:
|
case RcCrowdAgentType.VILLAGER:
|
||||||
status = GetVillagerPosition(navquery, filter, out randomPt);
|
status = GetVillagerPosition(navquery, filter, out randomPt);
|
||||||
break;
|
break;
|
||||||
case CrowdAgentType.TRAVELLER:
|
case RcCrowdAgentType.TRAVELLER:
|
||||||
status = GetVillagerPosition(navquery, filter, out randomPt);
|
status = GetVillagerPosition(navquery, filter, out randomPt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -227,16 +227,16 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
if (NeedsNewTarget(ag))
|
if (NeedsNewTarget(ag))
|
||||||
{
|
{
|
||||||
CrowdAgentData crowAgentData = (CrowdAgentData)ag.option.userData;
|
RcCrowdAgentData crowAgentData = (RcCrowdAgentData)ag.option.userData;
|
||||||
switch (crowAgentData.type)
|
switch (crowAgentData.type)
|
||||||
{
|
{
|
||||||
case CrowdAgentType.MOB:
|
case RcCrowdAgentType.MOB:
|
||||||
MoveMob(navquery, filter, ag, crowAgentData);
|
MoveMob(navquery, filter, ag, crowAgentData);
|
||||||
break;
|
break;
|
||||||
case CrowdAgentType.VILLAGER:
|
case RcCrowdAgentType.VILLAGER:
|
||||||
MoveVillager(navquery, filter, ag, crowAgentData);
|
MoveVillager(navquery, filter, ag, crowAgentData);
|
||||||
break;
|
break;
|
||||||
case CrowdAgentType.TRAVELLER:
|
case RcCrowdAgentType.TRAVELLER:
|
||||||
MoveTraveller(navquery, filter, ag, crowAgentData);
|
MoveTraveller(navquery, filter, ag, crowAgentData);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
crowdUpdateTime = (endTime - startTime) / TimeSpan.TicksPerMillisecond;
|
crowdUpdateTime = (endTime - startTime) / TimeSpan.TicksPerMillisecond;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MoveMob(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, CrowdAgentData crowAgentData)
|
private void MoveMob(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, RcCrowdAgentData crowAgentData)
|
||||||
{
|
{
|
||||||
// Move somewhere
|
// Move somewhere
|
||||||
var status = navquery.FindNearestPoly(ag.npos, crowd.GetQueryExtents(), filter, out var nearestRef, out var nearestPt, out var _);
|
var status = navquery.FindNearestPoly(ag.npos, crowd.GetQueryExtents(), filter, out var nearestRef, out var nearestPt, out var _);
|
||||||
|
@ -262,7 +262,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MoveVillager(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, CrowdAgentData crowAgentData)
|
private void MoveVillager(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, RcCrowdAgentData crowAgentData)
|
||||||
{
|
{
|
||||||
// Move somewhere close
|
// Move somewhere close
|
||||||
var status = navquery.FindNearestPoly(ag.npos, crowd.GetQueryExtents(), filter, out var nearestRef, out var nearestPt, out var _);
|
var status = navquery.FindNearestPoly(ag.npos, crowd.GetQueryExtents(), filter, out var nearestRef, out var nearestPt, out var _);
|
||||||
|
@ -277,7 +277,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MoveTraveller(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, CrowdAgentData crowAgentData)
|
private void MoveTraveller(DtNavMeshQuery navquery, IDtQueryFilter filter, DtCrowdAgent ag, RcCrowdAgentData crowAgentData)
|
||||||
{
|
{
|
||||||
// Move to another zone
|
// Move to another zone
|
||||||
List<DtPolyPoint> potentialTargets = new List<DtPolyPoint>();
|
List<DtPolyPoint> potentialTargets = new List<DtPolyPoint>();
|
||||||
|
@ -315,10 +315,10 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DtCrowdAgent AddAgent(RcVec3f p, CrowdAgentType type, float agentRadius, float agentHeight, float agentMaxAcceleration, float agentMaxSpeed)
|
private DtCrowdAgent AddAgent(RcVec3f p, RcCrowdAgentType type, float agentRadius, float agentHeight, float agentMaxAcceleration, float agentMaxSpeed)
|
||||||
{
|
{
|
||||||
DtCrowdAgentParams ap = GetAgentParams(agentRadius, agentHeight, agentMaxAcceleration, agentMaxSpeed);
|
DtCrowdAgentParams ap = GetAgentParams(agentRadius, agentHeight, agentMaxAcceleration, agentMaxSpeed);
|
||||||
ap.userData = new CrowdAgentData(type, p);
|
ap.userData = new RcCrowdAgentData(type, p);
|
||||||
return crowd.AddAgent(p, ap);
|
return crowd.AddAgent(p, ap);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
public class CrowdProfilingToolConfig
|
public class RcCrowdAgentProfilingToolConfig
|
||||||
{
|
{
|
||||||
public int expandSimOptions = 1;
|
public int expandSimOptions = 1;
|
||||||
public int expandCrowdOptions = 1;
|
public int expandCrowdOptions = 1;
|
|
@ -1,6 +1,6 @@
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
public class CrowdAgentTrail
|
public class RcCrowdAgentTrail
|
||||||
{
|
{
|
||||||
public const int AGENT_MAX_TRAIL = 64;
|
public const int AGENT_MAX_TRAIL = 64;
|
||||||
public float[] trail = new float[AGENT_MAX_TRAIL * 3];
|
public float[] trail = new float[AGENT_MAX_TRAIL * 3];
|
|
@ -1,6 +1,6 @@
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
public enum CrowdAgentType
|
public enum RcCrowdAgentType
|
||||||
{
|
{
|
||||||
VILLAGER,
|
VILLAGER,
|
||||||
TRAVELLER,
|
TRAVELLER,
|
|
@ -14,7 +14,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
private DtCrowd crowd;
|
private DtCrowd crowd;
|
||||||
private readonly DtCrowdAgentDebugInfo _agentDebug;
|
private readonly DtCrowdAgentDebugInfo _agentDebug;
|
||||||
private long crowdUpdateTime;
|
private long crowdUpdateTime;
|
||||||
private readonly Dictionary<long, CrowdAgentTrail> _trails;
|
private readonly Dictionary<long, RcCrowdAgentTrail> _trails;
|
||||||
private long _moveTargetRef;
|
private long _moveTargetRef;
|
||||||
private RcVec3f _moveTargetPos;
|
private RcVec3f _moveTargetPos;
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
_agCfg = new DtCrowdAgentConfig();
|
_agCfg = new DtCrowdAgentConfig();
|
||||||
_agentDebug = new DtCrowdAgentDebugInfo();
|
_agentDebug = new DtCrowdAgentDebugInfo();
|
||||||
_agentDebug.vod = new DtObstacleAvoidanceDebugData(2048);
|
_agentDebug.vod = new DtObstacleAvoidanceDebugData(2048);
|
||||||
_trails = new Dictionary<long, CrowdAgentTrail>();
|
_trails = new Dictionary<long, RcCrowdAgentTrail>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
return _agentDebug;
|
return _agentDebug;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dictionary<long, CrowdAgentTrail> GetCrowdAgentTrails()
|
public Dictionary<long, RcCrowdAgentTrail> GetCrowdAgentTrails()
|
||||||
{
|
{
|
||||||
return _trails;
|
return _trails;
|
||||||
}
|
}
|
||||||
|
@ -147,9 +147,9 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
// Update agent trails
|
// Update agent trails
|
||||||
foreach (DtCrowdAgent ag in crowd.GetActiveAgents())
|
foreach (DtCrowdAgent ag in crowd.GetActiveAgents())
|
||||||
{
|
{
|
||||||
CrowdAgentTrail trail = _trails[ag.idx];
|
RcCrowdAgentTrail trail = _trails[ag.idx];
|
||||||
// Update agent movement trail.
|
// Update agent movement trail.
|
||||||
trail.htrail = (trail.htrail + 1) % CrowdAgentTrail.AGENT_MAX_TRAIL;
|
trail.htrail = (trail.htrail + 1) % RcCrowdAgentTrail.AGENT_MAX_TRAIL;
|
||||||
trail.trail[trail.htrail * 3] = ag.npos.x;
|
trail.trail[trail.htrail * 3] = ag.npos.x;
|
||||||
trail.trail[trail.htrail * 3 + 1] = ag.npos.y;
|
trail.trail[trail.htrail * 3 + 1] = ag.npos.y;
|
||||||
trail.trail[trail.htrail * 3 + 2] = ag.npos.z;
|
trail.trail[trail.htrail * 3 + 2] = ag.npos.z;
|
||||||
|
@ -182,11 +182,11 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
// Init trail
|
// Init trail
|
||||||
if (!_trails.TryGetValue(ag.idx, out var trail))
|
if (!_trails.TryGetValue(ag.idx, out var trail))
|
||||||
{
|
{
|
||||||
trail = new CrowdAgentTrail();
|
trail = new RcCrowdAgentTrail();
|
||||||
_trails.Add(ag.idx, trail);
|
_trails.Add(ag.idx, trail);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < CrowdAgentTrail.AGENT_MAX_TRAIL; ++i)
|
for (int i = 0; i < RcCrowdAgentTrail.AGENT_MAX_TRAIL; ++i)
|
||||||
{
|
{
|
||||||
trail.trail[i * 3] = p.x;
|
trail.trail[i * 3] = p.x;
|
||||||
trail.trail[i * 3 + 1] = p.y;
|
trail.trail[i * 3 + 1] = p.y;
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
using DotRecast.Core;
|
||||||
|
|
||||||
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
|
{
|
||||||
|
public class RcCrowdToolMode
|
||||||
|
{
|
||||||
|
public static readonly RcCrowdToolMode CREATE = new RcCrowdToolMode(0, "Create Agents");
|
||||||
|
public static readonly RcCrowdToolMode MOVE_TARGET = new RcCrowdToolMode(1, "Move Target");
|
||||||
|
public static readonly RcCrowdToolMode SELECT = new RcCrowdToolMode(2, "Select Agent");
|
||||||
|
public static readonly RcCrowdToolMode TOGGLE_POLYS = new RcCrowdToolMode(3, "Toggle Polys");
|
||||||
|
|
||||||
|
public static readonly RcImmutableArray<RcCrowdToolMode> Values = RcImmutableArray.Create(
|
||||||
|
CREATE,
|
||||||
|
MOVE_TARGET,
|
||||||
|
SELECT,
|
||||||
|
TOGGLE_POLYS
|
||||||
|
);
|
||||||
|
|
||||||
|
public int Idx { get; }
|
||||||
|
public string Label { get; }
|
||||||
|
|
||||||
|
private RcCrowdToolMode(int idx, string label)
|
||||||
|
{
|
||||||
|
Idx = idx;
|
||||||
|
Label = label;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
namespace DotRecast.Recast.Toolset.Tools
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
public enum DynamicColliderShape
|
public enum RcDynamicColliderShape
|
||||||
{
|
{
|
||||||
SPHERE,
|
SPHERE,
|
||||||
CAPSULE,
|
CAPSULE,
|
|
@ -88,7 +88,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public RcGizmo AddShape(DynamicColliderShape colliderShape, RcVec3f p)
|
public RcGizmo AddShape(RcDynamicColliderShape colliderShape, RcVec3f p)
|
||||||
{
|
{
|
||||||
if (dynaMesh == null)
|
if (dynaMesh == null)
|
||||||
{
|
{
|
||||||
|
@ -97,35 +97,35 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
|
|
||||||
RcGizmo colliderWithGizmo = null;
|
RcGizmo colliderWithGizmo = null;
|
||||||
{
|
{
|
||||||
if (colliderShape == DynamicColliderShape.SPHERE)
|
if (colliderShape == RcDynamicColliderShape.SPHERE)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = SphereCollider(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = SphereCollider(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
else if (colliderShape == DynamicColliderShape.CAPSULE)
|
else if (colliderShape == RcDynamicColliderShape.CAPSULE)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = CapsuleCollider(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = CapsuleCollider(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
else if (colliderShape == DynamicColliderShape.BOX)
|
else if (colliderShape == RcDynamicColliderShape.BOX)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = BoxCollider(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = BoxCollider(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
else if (colliderShape == DynamicColliderShape.CYLINDER)
|
else if (colliderShape == RcDynamicColliderShape.CYLINDER)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = CylinderCollider(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = CylinderCollider(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
else if (colliderShape == DynamicColliderShape.COMPOSITE)
|
else if (colliderShape == RcDynamicColliderShape.COMPOSITE)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = CompositeCollider(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = CompositeCollider(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
else if (colliderShape == DynamicColliderShape.TRIMESH_BRIDGE)
|
else if (colliderShape == RcDynamicColliderShape.TRIMESH_BRIDGE)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = TrimeshBridge(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = TrimeshBridge(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
else if (colliderShape == DynamicColliderShape.TRIMESH_HOUSE)
|
else if (colliderShape == RcDynamicColliderShape.TRIMESH_HOUSE)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = TrimeshHouse(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = TrimeshHouse(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
else if (colliderShape == DynamicColliderShape.CONVEX)
|
else if (colliderShape == RcDynamicColliderShape.CONVEX)
|
||||||
{
|
{
|
||||||
colliderWithGizmo = ConvexTrimesh(p, dynaMesh.config.walkableClimb);
|
colliderWithGizmo = ConvexTrimesh(p, dynaMesh.config.walkableClimb);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
{
|
{
|
||||||
float radius = 1 + (float)random.NextDouble() * 10;
|
float radius = 1 + (float)random.NextDouble() * 10;
|
||||||
var collider = new DtSphereCollider(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);
|
var gizmo = RcGizmoFactory.Sphere(p, radius);
|
||||||
|
|
||||||
return new RcGizmo(collider, gizmo);
|
return new RcGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
RcVec3f start = RcVec3f.Of(p.x, p.y, p.z);
|
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);
|
RcVec3f end = RcVec3f.Of(p.x + a.x, p.y + a.y, p.z + a.z);
|
||||||
var collider = new DtCapsuleCollider(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);
|
var gizmo = RcGizmoFactory.Capsule(start, end, radius);
|
||||||
return new RcGizmo(collider, gizmo);
|
return new RcGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
RcVec3f up = RcVec3f.Of((1f - 2 * (float)random.NextDouble()), 0.01f + (float)random.NextDouble(), (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.DtBoxCollider.GetHalfEdges(up, forward, extent);
|
RcVec3f[] halfEdges = Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(up, forward, extent);
|
||||||
var collider = new DtBoxCollider(p, halfEdges, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
|
var collider = new DtBoxCollider(p, halfEdges, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
|
||||||
var gizmo = GizmoFactory.Box(p, halfEdges);
|
var gizmo = RcGizmoFactory.Box(p, halfEdges);
|
||||||
return new RcGizmo(collider, gizmo);
|
return new RcGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
RcVec3f start = RcVec3f.Of(p.x, p.y, p.z);
|
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);
|
RcVec3f end = RcVec3f.Of(p.x + a.x, p.y + a.y, p.z + a.z);
|
||||||
var collider = new DtCylinderCollider(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);
|
var gizmo = RcGizmoFactory.Cylinder(start, end, radius);
|
||||||
|
|
||||||
return new RcGizmo(collider, gizmo);
|
return new RcGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
@ -258,11 +258,11 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
DtSphereCollider crown = new DtSphereCollider(crownCenter, 4f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS,
|
DtSphereCollider crown = new DtSphereCollider(crownCenter, 4f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS,
|
||||||
walkableClimb);
|
walkableClimb);
|
||||||
DtCompositeCollider collider = new DtCompositeCollider(@base, roof, trunk, crown);
|
DtCompositeCollider collider = new DtCompositeCollider(@base, roof, trunk, crown);
|
||||||
IRcGizmoMeshFilter baseGizmo = GizmoFactory.Box(baseCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(baseUp, forward, baseExtent));
|
IRcGizmoMeshFilter baseGizmo = RcGizmoFactory.Box(baseCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(baseUp, forward, baseExtent));
|
||||||
IRcGizmoMeshFilter roofGizmo = GizmoFactory.Box(roofCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(roofUp, forward, roofExtent));
|
IRcGizmoMeshFilter roofGizmo = RcGizmoFactory.Box(roofCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(roofUp, forward, roofExtent));
|
||||||
IRcGizmoMeshFilter trunkGizmo = GizmoFactory.Capsule(trunkStart, trunkEnd, 0.5f);
|
IRcGizmoMeshFilter trunkGizmo = RcGizmoFactory.Capsule(trunkStart, trunkEnd, 0.5f);
|
||||||
IRcGizmoMeshFilter crownGizmo = GizmoFactory.Sphere(crownCenter, 4f);
|
IRcGizmoMeshFilter crownGizmo = RcGizmoFactory.Sphere(crownCenter, 4f);
|
||||||
IRcGizmoMeshFilter gizmo = GizmoFactory.Composite(baseGizmo, roofGizmo, trunkGizmo, crownGizmo);
|
IRcGizmoMeshFilter gizmo = RcGizmoFactory.Composite(baseGizmo, roofGizmo, trunkGizmo, crownGizmo);
|
||||||
return new RcGizmo(collider, gizmo);
|
return new RcGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
float[] verts = TransformVertices(p, convexGeom, 360);
|
float[] verts = TransformVertices(p, convexGeom, 360);
|
||||||
var collider = new DtConvexTrimeshCollider(verts, convexGeom.faces,
|
var collider = new DtConvexTrimeshCollider(verts, convexGeom.faces,
|
||||||
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, walkableClimb * 10);
|
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, walkableClimb * 10);
|
||||||
var gizmo = GizmoFactory.Trimesh(verts, convexGeom.faces);
|
var gizmo = RcGizmoFactory.Trimesh(verts, convexGeom.faces);
|
||||||
return new RcGizmo(collider, gizmo);
|
return new RcGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@ namespace DotRecast.Recast.Toolset.Tools
|
||||||
float[] verts = TransformVertices(p, geom, 0);
|
float[] verts = TransformVertices(p, geom, 0);
|
||||||
var collider = new DtTrimeshCollider(verts, geom.faces, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
|
var collider = new DtTrimeshCollider(verts, geom.faces, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
|
||||||
walkableClimb * 10);
|
walkableClimb * 10);
|
||||||
var gizmo = GizmoFactory.Trimesh(verts, geom.faces);
|
var gizmo = RcGizmoFactory.Trimesh(verts, geom.faces);
|
||||||
|
|
||||||
return new RcGizmo(collider, gizmo);
|
return new RcGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
using DotRecast.Core;
|
||||||
|
|
||||||
|
namespace DotRecast.Recast.Toolset.Tools
|
||||||
|
{
|
||||||
|
public class RcDynamicUpdateToolMode
|
||||||
|
{
|
||||||
|
public static readonly RcDynamicUpdateToolMode BUILD = new RcDynamicUpdateToolMode(0, "Build");
|
||||||
|
public static readonly RcDynamicUpdateToolMode COLLIDERS = new RcDynamicUpdateToolMode(1, "Colliders");
|
||||||
|
public static readonly RcDynamicUpdateToolMode RAYCAST = new RcDynamicUpdateToolMode(2, "Raycast");
|
||||||
|
|
||||||
|
public static readonly RcImmutableArray<RcDynamicUpdateToolMode> Values = RcImmutableArray.Create(
|
||||||
|
BUILD, COLLIDERS, RAYCAST
|
||||||
|
);
|
||||||
|
|
||||||
|
public int Idx { get; }
|
||||||
|
public string Label { get; }
|
||||||
|
|
||||||
|
private RcDynamicUpdateToolMode(int idx, string label)
|
||||||
|
{
|
||||||
|
Idx = idx;
|
||||||
|
Label = label;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue