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); }
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)); }
public static Vector3 HandleCollision(SphereCollision collider, BoundPlaneCollision collidable, Vector3 position, Vector3 normal) { return(SphereOnPlaneCollision.HandleCollision(collider, collidable, position, normal)); }
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)); }