forked from mirror/DotRecast
remove Tuple<ICollider, IColliderGizmo>
This commit is contained in:
parent
fa1e0eaeaa
commit
e053f57571
|
@ -111,7 +111,7 @@ public class DynamicUpdateTool : IRcTool
|
||||||
{
|
{
|
||||||
if (!shift)
|
if (!shift)
|
||||||
{
|
{
|
||||||
Tuple<ICollider, IColliderGizmo> colliderWithGizmo = null;
|
ColliderWithGizmo colliderWithGizmo = null;
|
||||||
if (dynaMesh != null)
|
if (dynaMesh != null)
|
||||||
{
|
{
|
||||||
if (colliderShape == DynamicColliderShape.SPHERE)
|
if (colliderShape == DynamicColliderShape.SPHERE)
|
||||||
|
@ -150,9 +150,9 @@ public class DynamicUpdateTool : IRcTool
|
||||||
|
|
||||||
if (colliderWithGizmo != null)
|
if (colliderWithGizmo != null)
|
||||||
{
|
{
|
||||||
long id = dynaMesh.AddCollider(colliderWithGizmo.Item1);
|
long id = dynaMesh.AddCollider(colliderWithGizmo.Collider);
|
||||||
colliders.Add(id, colliderWithGizmo.Item1);
|
colliders.Add(id, colliderWithGizmo.Collider);
|
||||||
colliderGizmos.Add(id, colliderWithGizmo.Item2);
|
colliderGizmos.Add(id, colliderWithGizmo.Gizmo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,15 +186,16 @@ public class DynamicUpdateTool : IRcTool
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> SphereCollider(RcVec3f p)
|
private ColliderWithGizmo SphereCollider(RcVec3f p)
|
||||||
{
|
{
|
||||||
float radius = 1 + (float)random.NextDouble() * 10;
|
float radius = 1 + (float)random.NextDouble() * 10;
|
||||||
return Tuple.Create<ICollider, IColliderGizmo>(
|
var collider = new SphereCollider(p, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb);
|
||||||
new SphereCollider(p, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb),
|
var gizmo = GizmoFactory.Sphere(p, radius);
|
||||||
GizmoFactory.Sphere(p, radius));
|
|
||||||
|
return new ColliderWithGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> CapsuleCollider(RcVec3f p)
|
private ColliderWithGizmo CapsuleCollider(RcVec3f p)
|
||||||
{
|
{
|
||||||
float radius = 0.4f + (float)random.NextDouble() * 4f;
|
float radius = 0.4f + (float)random.NextDouble() * 4f;
|
||||||
RcVec3f a = RcVec3f.Of(
|
RcVec3f a = RcVec3f.Of(
|
||||||
|
@ -209,11 +210,12 @@ public class DynamicUpdateTool : IRcTool
|
||||||
a.z *= len;
|
a.z *= len;
|
||||||
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);
|
||||||
return Tuple.Create<ICollider, IColliderGizmo>(new CapsuleCollider(
|
var collider = new CapsuleCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb);
|
||||||
start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb), GizmoFactory.Capsule(start, end, radius));
|
var gizmo = GizmoFactory.Capsule(start, end, radius);
|
||||||
|
return new ColliderWithGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> BoxCollider(RcVec3f p)
|
private ColliderWithGizmo BoxCollider(RcVec3f p)
|
||||||
{
|
{
|
||||||
RcVec3f extent = RcVec3f.Of(
|
RcVec3f extent = RcVec3f.Of(
|
||||||
0.5f + (float)random.NextDouble() * 6f,
|
0.5f + (float)random.NextDouble() * 6f,
|
||||||
|
@ -223,11 +225,12 @@ public class DynamicUpdateTool : IRcTool
|
||||||
RcVec3f forward = RcVec3f.Of((1f - 2 * (float)random.NextDouble()), 0, (1f - 2 * (float)random.NextDouble()));
|
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 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);
|
RcVec3f[] halfEdges = Detour.Dynamic.Colliders.BoxCollider.GetHalfEdges(up, forward, extent);
|
||||||
return Tuple.Create<ICollider, IColliderGizmo>(
|
var collider = new BoxCollider(p, halfEdges, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb);
|
||||||
new BoxCollider(p, halfEdges, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb), GizmoFactory.Box(p, halfEdges));
|
var gizmo = GizmoFactory.Box(p, halfEdges);
|
||||||
|
return new ColliderWithGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> CylinderCollider(RcVec3f p)
|
private ColliderWithGizmo CylinderCollider(RcVec3f p)
|
||||||
{
|
{
|
||||||
float radius = 0.7f + (float)random.NextDouble() * 4f;
|
float radius = 0.7f + (float)random.NextDouble() * 4f;
|
||||||
RcVec3f a = RcVec3f.Of(1f - 2 * (float)random.NextDouble(), 0.01f + (float)random.NextDouble(), 1f - 2 * (float)random.NextDouble());
|
RcVec3f a = RcVec3f.Of(1f - 2 * (float)random.NextDouble(), 0.01f + (float)random.NextDouble(), 1f - 2 * (float)random.NextDouble());
|
||||||
|
@ -238,11 +241,13 @@ public class DynamicUpdateTool : IRcTool
|
||||||
a[2] *= len;
|
a[2] *= len;
|
||||||
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);
|
||||||
return Tuple.Create<ICollider, IColliderGizmo>(new CylinderCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER,
|
var collider = new CylinderCollider(start, end, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, dynaMesh.config.walkableClimb);
|
||||||
dynaMesh.config.walkableClimb), GizmoFactory.Cylinder(start, end, radius));
|
var gizmo = GizmoFactory.Cylinder(start, end, radius);
|
||||||
|
|
||||||
|
return new ColliderWithGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> CompositeCollider(RcVec3f p)
|
private ColliderWithGizmo CompositeCollider(RcVec3f p)
|
||||||
{
|
{
|
||||||
RcVec3f baseExtent = RcVec3f.Of(5, 3, 8);
|
RcVec3f baseExtent = RcVec3f.Of(5, 3, 8);
|
||||||
RcVec3f baseCenter = RcVec3f.Of(p.x, p.y + 3, p.z);
|
RcVec3f baseCenter = RcVec3f.Of(p.x, p.y + 3, p.z);
|
||||||
|
@ -279,33 +284,36 @@ public class DynamicUpdateTool : IRcTool
|
||||||
IColliderGizmo trunkGizmo = GizmoFactory.Capsule(trunkStart, trunkEnd, 0.5f);
|
IColliderGizmo trunkGizmo = GizmoFactory.Capsule(trunkStart, trunkEnd, 0.5f);
|
||||||
IColliderGizmo crownGizmo = GizmoFactory.Sphere(crownCenter, 4f);
|
IColliderGizmo crownGizmo = GizmoFactory.Sphere(crownCenter, 4f);
|
||||||
IColliderGizmo gizmo = GizmoFactory.Composite(baseGizmo, roofGizmo, trunkGizmo, crownGizmo);
|
IColliderGizmo gizmo = GizmoFactory.Composite(baseGizmo, roofGizmo, trunkGizmo, crownGizmo);
|
||||||
return Tuple.Create<ICollider, IColliderGizmo>(collider, gizmo);
|
return new ColliderWithGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> TrimeshBridge(RcVec3f p)
|
private ColliderWithGizmo TrimeshBridge(RcVec3f p)
|
||||||
{
|
{
|
||||||
return TrimeshCollider(p, bridgeGeom);
|
return TrimeshCollider(p, bridgeGeom);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> TrimeshHouse(RcVec3f p)
|
private ColliderWithGizmo TrimeshHouse(RcVec3f p)
|
||||||
{
|
{
|
||||||
return TrimeshCollider(p, houseGeom);
|
return TrimeshCollider(p, houseGeom);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> ConvexTrimesh(RcVec3f p)
|
private ColliderWithGizmo ConvexTrimesh(RcVec3f p)
|
||||||
{
|
{
|
||||||
float[] verts = TransformVertices(p, convexGeom, 360);
|
float[] verts = TransformVertices(p, convexGeom, 360);
|
||||||
ConvexTrimeshCollider collider = new ConvexTrimeshCollider(verts, convexGeom.faces,
|
var collider = new ConvexTrimeshCollider(verts, convexGeom.faces,
|
||||||
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb * 10);
|
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, dynaMesh.config.walkableClimb * 10);
|
||||||
return Tuple.Create<ICollider, IColliderGizmo>(collider, GizmoFactory.Trimesh(verts, convexGeom.faces));
|
var gizmo = GizmoFactory.Trimesh(verts, convexGeom.faces);
|
||||||
|
return new ColliderWithGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tuple<ICollider, IColliderGizmo> TrimeshCollider(RcVec3f p, DemoInputGeomProvider geom)
|
private ColliderWithGizmo TrimeshCollider(RcVec3f p, DemoInputGeomProvider geom)
|
||||||
{
|
{
|
||||||
float[] verts = TransformVertices(p, geom, 0);
|
float[] verts = TransformVertices(p, geom, 0);
|
||||||
TrimeshCollider collider = new TrimeshCollider(verts, geom.faces, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
|
var collider = new TrimeshCollider(verts, geom.faces, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
|
||||||
dynaMesh.config.walkableClimb * 10);
|
dynaMesh.config.walkableClimb * 10);
|
||||||
return Tuple.Create<ICollider, IColliderGizmo>(collider, GizmoFactory.Trimesh(verts, geom.faces));
|
var gizmo = GizmoFactory.Trimesh(verts, geom.faces);
|
||||||
|
|
||||||
|
return new ColliderWithGizmo(collider, gizmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private float[] TransformVertices(RcVec3f p, DemoInputGeomProvider geom, float ax)
|
private float[] TransformVertices(RcVec3f p, DemoInputGeomProvider geom, float ax)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
using DotRecast.Detour.Dynamic.Colliders;
|
||||||
|
|
||||||
|
namespace DotRecast.Recast.Demo.Tools.Gizmos;
|
||||||
|
|
||||||
|
public class ColliderWithGizmo
|
||||||
|
{
|
||||||
|
public readonly ICollider Collider;
|
||||||
|
public readonly IColliderGizmo Gizmo;
|
||||||
|
|
||||||
|
public ColliderWithGizmo(ICollider collider, IColliderGizmo gizmo)
|
||||||
|
{
|
||||||
|
Collider = collider;
|
||||||
|
Gizmo = gizmo;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue