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;
     }
 }
Ejemplo n.º 4
0
        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;
 }