public void When_it_has_no_body_is_an_error()
        {
            var noCollidableBodies = new NoCollidableBodies();
            var spyPresenter       = new SpyPresenter();
            var system             = CollidableMovementSystem
                                     .WithCollidableBodiesAndPresenter(
                noCollidableBodies,
                spyPresenter);
            var player      = new Guid("8e7eaa84-f471-42ca-91ff-0eafe4cc5af3");
            var destination = new Vector3(3.0f, 0.0f, 3.0f);

            system.MoveEntityTowardsDestination(
                player,
                destination);
            Assert.IsTrue(spyPresenter.ReportedError);
        }
        public void Moves_it_as_far_as_possible_in_one_tick()
        {
            var noCollisions = new NoCollisions();
            var spyPresenter = new SpyPresenter();
            var system       = CollidableMovementSystem
                               .WithCollidableBodiesAndPresenter(
                noCollisions,
                spyPresenter);
            var player      = noCollisions.Player;
            var destination = new Vector3(2.0f, 0.0f, 2.0f);

            system.MoveEntityTowardsDestination(
                player,
                destination);
            Assert.IsFalse(spyPresenter.ReportedError);
            Assert.AreEqual(
                destination,
                spyPresenter.EndingLocation);
        }
        public void Moves_it_to_the_adjusted_collision_location_in_one_tick()
        {
            var alwaysCollisions = new AlwaysCollisions();
            var spyPresenter     = new SpyPresenter();
            var system           = CollidableMovementSystem
                                   .WithCollidableBodiesAndPresenter(
                alwaysCollisions,
                spyPresenter);
            var player                 = alwaysCollisions.Player;
            var destination            = new Vector3(5.0f, 0.0f, 5.0f);
            var expectedEndingLocation =
                alwaysCollisions.AdjustedCollisionLocation;

            system.MoveEntityTowardsDestination(
                player,
                destination);
            Assert.IsFalse(spyPresenter.ReportedError);
            Assert.AreEqual(
                expectedEndingLocation,
                spyPresenter.EndingLocation);
        }