Beispiel #1
0
        public void CollisionManagerWorksWithinGame()
        {
            var rect   = new Collidable(new BoundingRectangle(Vector2d.Zero, new Size2d(30, 50)));
            var circle = new Collidable(new BoundingCircle(Vector2d.Zero, 10));
            var game   = new CollisionManagerGame();

            game.MonitorCollision(rect);
            game.MonitorCollision(circle);

            int rectCollisionTriggered    = 0;
            int circleCollisionTriggered  = 0;
            int managerCollisionTriggered = 0;

            rect.OnCollision += collisionData =>
            {
                Assert.Equal(circle, collisionData.With);
                rectCollisionTriggered++;
            };

            circle.OnCollision += collisionData =>
            {
                Assert.Equal(rect, collisionData.With);
                circleCollisionTriggered++;
            };

            game.RegisterCollisionEvent((first, second) =>
            {
                Assert.NotNull(first);
                Assert.NotNull(second);
                Assert.Equal(first, rect);
                Assert.Equal(second, circle);
                managerCollisionTriggered++;
            });

            Thread.Sleep(TimeSpan.FromSeconds(1));

            Assert.True(rectCollisionTriggered > 10);
            Assert.True(circleCollisionTriggered > 10);
            Assert.True(managerCollisionTriggered > 10);

            rect.Dispose();
            var savedRectCollisions    = rectCollisionTriggered;
            var savedCircleCollisions  = circleCollisionTriggered;
            var savedmanagerCollisions = managerCollisionTriggered;

            Thread.Sleep(TimeSpan.FromSeconds(1));

            Assert.Equal(savedRectCollisions, rectCollisionTriggered);
            Assert.Equal(savedCircleCollisions, circleCollisionTriggered);
            Assert.Equal(savedmanagerCollisions, managerCollisionTriggered);
        }
        public void CollisionManagerWorksWithinGame()
        {
            var rect = new Collidable(new BoundingRectangle(Vector2d.Zero, new Size2d(30, 50)));
            var circle = new Collidable(new BoundingCircle(Vector2d.Zero, 10));
            var game = new CollisionManagerGame();

            game.MonitorCollision(rect);
            game.MonitorCollision(circle);

            int rectCollisionTriggered = 0;
            int circleCollisionTriggered = 0;
            int managerCollisionTriggered = 0;

            rect.OnCollision += collisionData =>
            {
                Assert.Equal(circle, collisionData.With);
                rectCollisionTriggered++;
            };

            circle.OnCollision += collisionData =>
            {
                Assert.Equal(rect, collisionData.With);
                circleCollisionTriggered++;
            };

            game.RegisterCollisionEvent((first, second) =>
            {
                Assert.NotNull(first);
                Assert.NotNull(second);
                Assert.Equal(first, rect);
                Assert.Equal(second, circle);
                managerCollisionTriggered++;
            });

            Thread.Sleep(TimeSpan.FromSeconds(1));

            Assert.True(rectCollisionTriggered > 10);
            Assert.True(circleCollisionTriggered > 10);
            Assert.True(managerCollisionTriggered > 10);

            rect.Dispose();
            var savedRectCollisions = rectCollisionTriggered;
            var savedCircleCollisions = circleCollisionTriggered;
            var savedmanagerCollisions = managerCollisionTriggered;

            Thread.Sleep(TimeSpan.FromSeconds(1));

            Assert.Equal(savedRectCollisions, rectCollisionTriggered);
            Assert.Equal(savedCircleCollisions, circleCollisionTriggered);
            Assert.Equal(savedmanagerCollisions, managerCollisionTriggered);
        }