Example #1
0
        public static RayCollisionPoint GetCollision(Ray ray, BoundPlaneCollision plane)
        {
            RayCollisionPoint rcp = RayOnPlaneCollision.GetCollision(ray, plane, out float s1, out float s2);

            if (!rcp.DidCollide)
            {
                return(rcp);
            }

            rcp.SetCollide(plane.Restriction(s1, s2));

            return(rcp);
        }
Example #2
0
        public static Boolean GetCollision(SphereCollision collidableA, BoundPlaneCollision collidableB, out Vector3 position,
                                           out Vector3 normal, out float scale1, out float scale2)
        {
            if (SphereOnPlaneCollision.GetCollision(collidableA, collidableB, out position, out normal, out scale1, out scale2))
            {
                //Console.WriteLine($"SOBPC @{collidableB.Position + collidableB.Origin} + {scale1} * {collidableB.SpanVector1} + {scale2} * {collidableB.SpanVector2} = {position}");


                return(collidableB.Restriction(scale1, scale2));
            }

            return(false);
        }
        protected override void AddGameObjects(int entranceId)
        {
            AddObject(new EmptyGameObject().AddScript((scene, o, arg3) =>
            {
                if (KeyboardManager.IsKeyPressed(Keys.Escape))
                {
                    SceneManager.CloseScene();
                }
                if (KeyboardManager.IsKeyPressed(Keys.O))
                {
                    SceneManager.ChangeScene("collision-test");
                }
                if (KeyboardManager.IsKeyPressed(Keys.F4))
                {
                    SceneManager.ClearStack();
                }
            }));

            AddObject(new BasicCamera().Set3DEnabled(true).SetCameraTarget(new Vector3(0, 0, 1)).SetPosition(0, 1, -50).SetEnableCollision(false));


            // build the cube

            var planeCollision = new BoundPlaneCollision(new Vector3(), new Vector3(8, 0, 0), new Vector3(0, 0, 8), (f1, f2) => - 1 <= f1 && f1 <= 1 && -1 <= f2 && f2 <= 1);

            AddObject(
                new CollidableModelObject("planes/plane1")
                .SetPosition(-8, 0, 0)
                .SetCollision(planeCollision)
                .SetRotation(0, 0, -MathHelper.PiOver2)
                );

            AddObject(
                new CollidableModelObject("planes/plane1")
                .SetPosition(8, 0, 0)
                .SetCollision(planeCollision)
                .SetRotation(0, 0, MathHelper.PiOver2)
                );

            AddObject(
                new CollidableModelObject("planes/plane1")
                .SetPosition(0, 8, 0)
                .SetCollision(planeCollision)
                .SetRotation(0, 0, MathHelper.Pi)
                );

            AddObject(
                new CollidableModelObject("planes/plane1")
                .SetPosition(0, -8, 0)
                .SetCollision(planeCollision)
                .SetRotation(0, 0, 0)
                );

            AddObject(
                new CollidableModelObject("planes/plane1")
                .SetPosition(0, 0, 8)
                .SetCollision(planeCollision)
                .SetRotation(-MathHelper.PiOver2, 0, 0)
                );

            AddObject(
                new CollidableModelObject("planes/plane1")
                .SetPosition(0, 0, -8)
                .SetCollision(planeCollision)
                .SetRotation(MathHelper.PiOver2, 0, 0)
                );

            // add some objects to the cube



            // add balls

            Random random = new Random();

            for (int i = 0; i <= 20; i++)
            {
                AddObject(new TestBallObject().SetInertia((float)(5f * random.NextDouble()), 0, (float)(5f * random.NextDouble())).SetPosition((float)(5f * random.NextDouble()), (float)(5f * random.NextDouble()), (float)(5f * random.NextDouble())));
            }

            //for (float x = 15; x >= -15; x -= 2.5f)
            //	AddObject(new TestBallObject().SetPosition(x, 10 + Math.Abs(x) / 2.0f, 0));
        }
Example #4
0
 public static Vector3 HandleCollision(SphereCollision collider, BoundPlaneCollision collidable, Vector3 position, Vector3 normal)
 {
     return(SphereOnPlaneCollision.HandleCollision(collider, collidable, position, normal));
 }
Example #5
0
 public static Boolean GetCollision(SphereCollision collidableA, BoundPlaneCollision collidableB, out Vector3 position,
                                    out Vector3 normal)
 {
     return(GetCollision(collidableA, collidableB, out position, out normal, out var f1, out var f2));
 }