static Collider ConfigTempCollider(int argIndex, ProxyForceFieldPrimitive vp) { var col = EnsureCollider(argIndex, vp.primitiveType); SetupCollider(col, vp); col.enabled = true; return(col); }
public void DebugDraw(Color color) { var corners = ProxyForceFieldPrimitive.UnitSamplesPointsForType(Primitive.primitiveType); var center = Pose.position; foreach (var c in corners) { var world = WorldFromUnitPoint(c); Debug.DrawLine(center, world, color); } }
static void SetupCollider(Collider c, ProxyForceFieldPrimitive vp) { if (vp.primitiveType == ProxyForceFieldPrimitive.FieldPrimitiveType.Sphere) { var sc = (SphereCollider)c; sc.radius = vp.MaxRadius; } else { var bc = (BoxCollider)c; bc.size = vp.vectorRadii * 2.0f; } }
public void TestPrimitives() { ProxyForceFieldPrimitive prim = ProxyForceFieldPrimitive.Default; Assert.True(prim.primitiveType == ProxyForceFieldPrimitive.FieldPrimitiveType.Box); { var s2 = prim.SampleDistanceVectorFromPointLocal(new Vector3(1.5f, 0, 0), ProxyForceFieldPrimitive.ShapeSample.Fill); Assert.True(s2.HasSample); AssertNear(s2.Distance, 1.0f); AssertNear(s2.ToSurface, new Vector3(-1, 0, 0)); AssertNear(Mathf.Abs(s2.Distance), s2.ToSurface.magnitude); } { var s2 = prim.SampleDistanceVectorFromPointLocal(new Vector3(1.0f, 0, 0), ProxyForceFieldPrimitive.ShapeSample.Edge); Assert.True(s2.HasSample); AssertNear(s2.Distance, Mathf.Sqrt(2.0f) * 0.5f); } { var testPnt = Vector3.one * 1.5f; var s2 = prim.SampleDistanceVectorFromPointLocal(testPnt, ProxyForceFieldPrimitive.ShapeSample.Fill); Assert.True(s2.HasSample); AssertNear(Mathf.Abs(s2.Distance), s2.ToSurface.magnitude); AssertNear(s2.ToSurface, Vector3.one * -1.0f); AssertNear(s2.Distance, Vector3.one.magnitude); } { var primPose = new Pose(new Vector3(5, 0, 0), Quaternion.identity); ProxyForceFieldPrimitivePosed posed = new ProxyForceFieldPrimitivePosed(prim, primPose); var s2 = posed.SampleDistanceFieldWorld(new Vector3(6.0f, 0, 0), ProxyForceFieldPrimitive.ShapeSample.Fill); Assert.True(s2.HasSample); AssertNear(s2.Distance, 0.5f); } }
//public VolumetricPrimitivePosed() { } public ProxyForceFieldPrimitivePosed(ProxyForceFieldPrimitive _prim, Pose _pose) { Primitive = _prim; Pose = _pose; }