Exemplo n.º 1
0
        public static void CircleCollider_IsHitByTest(
            float cx, float cy, float r,
            float rx, float ry, float directionX, float directionY, float distance,
            bool shouldHit, float ix = 0f, float iy = 0f, float nx = 0f, float ny = 0f)
        {
            using (var circleBody = new DynamicBody()) {
                circleBody.SetWorldPosition(new Vector2(cx, cy));
                circleBody.Collider = new CircleCollider(r);
                circleBody.Initialize(null);

                var ray = new LineSegment(new Vector2(rx, ry), new Vector2(directionX, directionY), distance);
                Assert.AreEqual(shouldHit, circleBody.Collider.IsHitBy(ray, out var hit));

                if (shouldHit)
                {
                    var normal       = new Vector2(nx, ny);
                    var intersection = new Vector2(ix, iy);

                    Assert.AreEqual(normal.X, hit.Normal.X, 0.0001f);
                    Assert.AreEqual(normal.Y, hit.Normal.Y, 0.0001f);
                    Assert.AreEqual(intersection.X, hit.ContactPoint.X, 0.0001f);
                    Assert.AreEqual(intersection.Y, hit.ContactPoint.Y, 0.0001f);
                    Assert.AreEqual(circleBody.Collider, hit.Collider);
                }
            }
        }
Exemplo n.º 2
0
        public static void PolygonCollider_ContainsPoint(float x1, float y1, float w, float h, float x2, float y2, bool shouldContain)
        {
            using (var quadBody = new DynamicBody()) {
                quadBody.SetWorldPosition(new Vector2(x1, y1));
                quadBody.Collider = PolygonCollider.CreateRectangle(w, h);
                quadBody.Initialize(null);

                Assert.AreEqual(shouldContain, quadBody.Collider.Contains(new Vector2(x2, y2)));
            }
        }
Exemplo n.º 3
0
        public static void CircleCollider_ContainsPointTest(float x1, float y1, float r1, float x2, float y2, bool shouldContain)
        {
            using (var circleBody = new DynamicBody()) {
                circleBody.SetWorldPosition(new Vector2(x1, y1));
                circleBody.Collider = new CircleCollider(r1);
                var circle = circleBody.Collider as CircleCollider;
                circleBody.Initialize(null);

                Assert.AreEqual(shouldContain, circle.Contains(new Vector2(x2, y2)));
            }
        }
Exemplo n.º 4
0
        public static void CircleCollider_ContainsQuadTest(float x1, float y1, float r1, float x2, float y2, float w, float h, bool shouldContain)
        {
            using (var circleBody = new DynamicBody())
                using (var quadBody = new DynamicBody()) {
                    circleBody.SetWorldPosition(new Vector2(x1, y1));
                    circleBody.Collider = new CircleCollider(r1);
                    circleBody.Initialize(null);

                    quadBody.SetWorldPosition(new Vector2(x2, y2));
                    quadBody.Collider = PolygonCollider.CreateRectangle(w, h);
                    quadBody.Initialize(null);

                    Assert.AreEqual(shouldContain, circleBody.Collider.Contains(quadBody.Collider));
                }
        }
Exemplo n.º 5
0
        public static void CircleCollider_ContainsCircleTest(float x1, float y1, float r1, float x2, float y2, float r2, bool shouldContain)
        {
            using (var circleBody1 = new DynamicBody())
                using (var circleBody2 = new DynamicBody()) {
                    circleBody1.SetWorldPosition(new Vector2(x1, y1));
                    circleBody1.Collider = new CircleCollider(r1);
                    circleBody1.Initialize(null);

                    circleBody2.SetWorldPosition(new Vector2(x2, y2));
                    circleBody2.Collider = new CircleCollider(r2);
                    circleBody2.Initialize(null);

                    Assert.AreEqual(shouldContain, circleBody1.Collider.Contains(circleBody2.Collider));
                }
        }
Exemplo n.º 6
0
        public static void PolygonCollider_ContainsPolygon(float x1, float y1, float w1, float h1, float x2, float y2, float w2, float h2, bool shouldContain)
        {
            using (var quadBody1 = new DynamicBody())
                using (var quadBody2 = new DynamicBody()) {
                    quadBody1.SetWorldPosition(new Vector2(x1, y1));
                    quadBody1.Collider = PolygonCollider.CreateRectangle(w1, w1);
                    quadBody1.Initialize(null);

                    quadBody2.SetWorldPosition(new Vector2(x2, y2));
                    quadBody2.Collider = PolygonCollider.CreateRectangle(w2, w2);
                    quadBody2.Initialize(null);

                    Assert.AreEqual(shouldContain, quadBody1.Collider.Contains(quadBody2.Collider));
                }
        }
Exemplo n.º 7
0
        public static void PolyGonCollider_QuadIsHitByTest(float qx, float qy, float qw, float qh, float rx, float ry, float directionX, float directionY, float distance, bool shouldHit, float ix = 0f, float iy = 0f, float nx = 0f, float ny = 0f)
        {
            using (var quadBody = new DynamicBody()) {
                quadBody.SetWorldPosition(new Vector2(qx, qy));
                quadBody.Collider = PolygonCollider.CreateRectangle(qw, qh);
                quadBody.Initialize(null);

                var ray = new LineSegment(new Vector2(rx, ry), new Vector2(directionX, directionY), distance);
                Assert.AreEqual(shouldHit, quadBody.Collider.IsHitBy(ray, out var hit));

                if (shouldHit)
                {
                    var normal       = new Vector2(nx, ny);
                    var intersection = new Vector2(ix, iy);

                    Assert.AreEqual(normal, hit.Normal);
                    Assert.AreEqual(intersection, hit.ContactPoint);
                    Assert.AreEqual(quadBody.Collider, hit.Collider);
                }
            }
        }
Exemplo n.º 8
0
        public static void CircleCollider_CollidesWithQuadTest(float x1, float y1, float r1, float x2, float y2, float w, float h, bool collisionOccured)
        {
            using (var circleBody = new DynamicBody())
                using (var quadBody = new DynamicBody()) {
                    circleBody.SetWorldPosition(new Vector2(x1, y1));
                    circleBody.Collider = new CircleCollider(r1);
                    circleBody.Initialize(null);

                    quadBody.SetWorldPosition(new Vector2(x2, y2));
                    quadBody.Collider = PolygonCollider.CreateRectangle(w, h);
                    quadBody.Initialize(null);

                    Assert.AreEqual(collisionOccured, circleBody.Collider.CollidesWith(quadBody.Collider, out var collision1));
                    Assert.AreEqual(collisionOccured, quadBody.Collider.CollidesWith(circleBody.Collider, out var collision2));

                    if (collisionOccured)
                    {
                        Assert.AreEqual(collision1.MinimumTranslationVector.Length(), collision2.MinimumTranslationVector.Length(), 0.0001f);
                        Assert.AreEqual(collision1.FirstCollider, collision2.SecondCollider);
                        Assert.AreEqual(collision1.SecondCollider, collision2.FirstCollider);
                        Assert.AreEqual(collision1.FirstContainsSecond, collision2.SecondContainsFirst);
                        Assert.AreEqual(collision1.SecondContainsFirst, collision2.FirstContainsSecond);

                        var originalPosition = circleBody.WorldTransform.Position;
                        circleBody.SetWorldPosition(originalPosition + collision1.MinimumTranslationVector);
                        Assert.False(circleBody.Collider.CollidesWith(quadBody.Collider, out collision1));
                        circleBody.SetWorldPosition(originalPosition);

                        quadBody.SetWorldPosition(quadBody.WorldTransform.Position + collision2.MinimumTranslationVector);
                        Assert.False(quadBody.Collider.CollidesWith(circleBody.Collider, out collision2));
                    }
                    else
                    {
                        Assert.Null(collision1);
                        Assert.Null(collision2);
                    }
                }
        }
Exemplo n.º 9
0
        public static void RectangleCollider_RectangleCollidesWithRectangleTest(float x1, float y1, float w1, float h1, float x2, float y2, float w2, float h2, bool collisionOccured)
        {
            using (var rectangleBody1 = new DynamicBody())
                using (var rectangleBody2 = new DynamicBody()) {
                    rectangleBody1.SetWorldPosition(new Vector2(x1, y1));
                    rectangleBody1.Collider = new RectangleCollider(w1, h2);
                    rectangleBody1.Initialize(null);

                    rectangleBody2.SetWorldPosition(new Vector2(x2, y2));
                    rectangleBody2.Collider = new RectangleCollider(w2, h2);
                    rectangleBody2.Initialize(null);

                    Assert.AreEqual(collisionOccured, rectangleBody1.Collider.CollidesWith(rectangleBody2.Collider, out var collision1));
                    Assert.AreEqual(collisionOccured, rectangleBody2.Collider.CollidesWith(rectangleBody1.Collider, out var collision2));

                    if (collisionOccured)
                    {
                        Assert.AreEqual(collision1.MinimumTranslationVector.Length(), collision2.MinimumTranslationVector.Length(), 0.0001f);
                        Assert.AreEqual(collision1.FirstCollider, collision2.SecondCollider);
                        Assert.AreEqual(collision1.SecondCollider, collision2.FirstCollider);
                        Assert.AreEqual(collision1.FirstContainsSecond, collision2.SecondContainsFirst);
                        Assert.AreEqual(collision1.SecondContainsFirst, collision2.FirstContainsSecond);

                        var originalPosition = rectangleBody1.WorldTransform.Position;
                        rectangleBody1.SetWorldPosition(originalPosition + collision1.MinimumTranslationVector);
                        Assert.False(rectangleBody1.Collider.CollidesWith(rectangleBody2.Collider, out collision1));
                        rectangleBody1.SetWorldPosition(originalPosition);

                        rectangleBody2.SetWorldPosition(rectangleBody2.WorldTransform.Position + collision2.MinimumTranslationVector);
                        Assert.False(rectangleBody2.Collider.CollidesWith(rectangleBody1.Collider, out collision2));
                    }
                    else
                    {
                        Assert.Null(collision1);
                        Assert.Null(collision2);
                    }
                }
        }
Exemplo n.º 10
0
        public static void LineCollider_IsHitByTest(
            float x1, float y1, float x2, float y2,
            float rx1, float ry1, float rx2, float ry2,
            bool shouldHit, float ix = 0f, float iy = 0f, float nx = 0f, float ny = 0f)
        {
            using (var lineBody = new DynamicBody()) {
                lineBody.Collider = new LineCollider(new Vector2(x1, y1), new Vector2(x2, y2));
                lineBody.Initialize(null);

                var ray = new LineSegment(new Vector2(rx1, ry1), new Vector2(rx2, ry2));
                Assert.AreEqual(shouldHit, lineBody.Collider.IsHitBy(ray, out var hit));

                if (shouldHit)
                {
                    var normal       = new Vector2(nx, ny);
                    var intersection = new Vector2(ix, iy);

                    Assert.AreEqual(normal, hit.Normal);
                    Assert.AreEqual(intersection, hit.ContactPoint);
                    Assert.AreEqual(lineBody.Collider, hit.Collider);
                }
            }
        }