예제 #1
0
        public void Entity_OnDestroy_ShouldUnregisterEventHandlersWithLevel()
        {
            // Arrange
            Level  l  = new Level(null, 200, 200);
            Entity e1 = new EntityWall(0, 0, 10, 10);
            Entity e2 = new EntityWall(10, 0, 10, 10);

            // Zet ze op een bots koers
            e1.Speed = new Vector(1, 0);
            e2.Speed = new Vector(-1, 0);

            // Act
            l.SpawnEntity(e1);
            l.SpawnEntity(e2);
            l.DestroyEntity(e2);
            l.Update(1);

            // We checken of de event handlers geregistreerd zijn door
            // een botsing te simuleren. Als ze NIET botsen, dan is de
            // handler dus successvol ongeregistreerd.

            // Assert
            Assert.AreEqual(new Vector(1, 0), e1.Position);
            Assert.AreEqual(new Vector(10, 0), e2.Position);
        }
예제 #2
0
        public void Collision_GetTarget_WhenProvidedEntityIsRelevant_ShouldReturnProvidedEntity()
        {
            // Arrange
            Entity    e1 = new EntityWall(0, 0, 0, 0);
            Entity    e2 = new EntityWall(0, 0, 0, 0);
            Collision c1 = new Collision(e1, e2, 0);

            // Act
            Entity target = c1.GetTarget(e1);

            // Assert
            Assert.AreEqual(e1, target);
        }
예제 #3
0
        public void CollisionHelper_FindCollision_WhenNoMovingEntity_ShouldReturnNull()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 5, 5); // X1=0, Y1=0, X2=4, Y2=4
            Entity e2 = new EntityWall(5, 0, 5, 5); // X1=5, Y1=0, X2=9, Y2=9

            // Act
            Collision c1 = e1.FindCollision(e2);
            Collision c2 = e2.FindCollision(e1);

            // Assert
            Assert.IsNull(c1);
            Assert.IsNull(c2);
        }
예제 #4
0
        public void Entity_MoveForVector_ShouldMoveAlongVector()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 10, 10);

            e1.Speed = new Vector(1, 0);

            // Act
            e1.Move(null, 1);

            // Assert
            Assert.AreEqual(e1.X1, 1);
            Assert.AreEqual(0.95, e1.Speed.X);
        }
예제 #5
0
        public void Collision_IsRelevant_WhenProvidedEntityIsNotRelevant_ShouldReturnFalse()
        {
            // Arrange
            Entity    e1 = new EntityWall(0, 0, 0, 0);
            Entity    e2 = new EntityWall(0, 0, 0, 0);
            Entity    e3 = new EntityWall(0, 0, 0, 0);
            Collision c1 = new Collision(e1, e2, 0);

            // Act
            bool relevant = c1.IsRelevant(e3);

            // Assert
            Assert.IsFalse(relevant);
        }
예제 #6
0
        public void Collision_GetOther_WhenProvidedEntityIsIrrelevant_ShouldReturnNull()
        {
            // Arrange
            Entity    e1 = new EntityWall(0, 0, 0, 0);
            Entity    e2 = new EntityWall(0, 0, 0, 0);
            Entity    e3 = new EntityWall(0, 0, 0, 0);
            Collision c1 = new Collision(e1, e2, 0);

            // Act
            Entity target = c1.GetOther(e3);

            // Assert
            Assert.AreEqual(null, target);
        }
        public void CollisionState_Done_WhenOffsetSmallerThanSpeed_ShouldReturnFalse()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 10, 10);

            e1.Speed = new Vector(4, 0);

            CollisionState cs1 = new CollisionState(e1, 4);

            // Act
            cs1.Next();

            // Assert
            Assert.IsFalse(cs1.Done);
        }
예제 #8
0
        public void Collision_IsRelevant_WhenProvidedEntityIsRelevant_ShouldReturnTrue()
        {
            // Arrange
            Entity    e1 = new EntityWall(0, 0, 0, 0);
            Entity    e2 = new EntityWall(0, 0, 0, 0);
            Collision c1 = new Collision(e1, e2, 0);

            // Act
            bool relevant1 = c1.IsRelevant(e1);
            bool relevant2 = c1.IsRelevant(e2);

            // Assert
            Assert.IsTrue(relevant1);
            Assert.IsTrue(relevant2);
        }
예제 #9
0
        public void Collision_GetOther_WhenProvidedEntityIsRelevant_ShouldReturnOtherEntity()
        {
            // Arrange
            Entity    e1 = new EntityWall(0, 0, 0, 0);
            Entity    e2 = new EntityWall(0, 0, 0, 0);
            Collision c1 = new Collision(e1, e2, 0);

            // Act
            Entity target1 = c1.GetOther(e1);
            Entity target2 = c1.GetOther(e2);

            // Assert
            Assert.AreEqual(e2, target1);
            Assert.AreEqual(e1, target2);
        }
        public void CollisionState_Rectangle_ShouldReturnEntityAtCurrentHypotheticalFlooredPosition()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 10, 10);

            e1.Speed = new Vector(4, 0);

            CollisionState cs1 = new CollisionState(e1, 4);

            // Act
            cs1.Next();
            Rectangle r1 = cs1.Rectangle;

            // Assert
            Assert.AreEqual(new Vector(1, 0), cs1.Rectangle.Position);
        }
예제 #11
0
    public void RemoveWall(TileEntity tile, Direction dir)
    {
        EntityWall wall    = SelectEnter();
        GameObject wallObj = (wall.Point == null) ? null: wall.Point.gameObject;

        switch (dir)
        {
        case Direction.Left: tile.ChangeWall(Direction.Left, wallObj, wall.Type); break;

        case Direction.Right: tile.ChangeWall(Direction.Right, wallObj, wall.Type); break;

        case Direction.Up: tile.ChangeWall(Direction.Up, wallObj, wall.Type); break;

        case Direction.Down: tile.ChangeWall(Direction.Down, wallObj, wall.Type); break;
        }
    }
        public void CollisionState_Next_ShouldAddStepToOffset()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 10, 10);

            e1.Speed = new Vector(4, 0);

            CollisionState cs1 = new CollisionState(e1, 4);

            Vector expected = new Vector(1, 0);

            // Act
            cs1.Next();

            // Assert
            Assert.AreEqual(expected, cs1.Rectangle.Position);
        }
예제 #13
0
        public void CollisionHelper_FindCollision_WhenWillEndAsCollision_ShouldReturnNull()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 5, 5); // X1=0, Y1=0, X2=4, Y2=4
            Entity e2 = new EntityWall(7, 0, 5, 5); // X1=5, Y1=0, X2=9, Y2=9

            e1.Speed = new Vector(1, 0);
            e2.Speed = new Vector(-1, 0);

            // Act
            Collision c1 = e1.FindCollision(e2);
            Collision c2 = e2.FindCollision(e1);

            // Assert
            Assert.IsNull(c1);
            Assert.IsNull(c2);
        }
예제 #14
0
        public void CollisionHelper_FindCollision_WhenAreAlreadyColliding_ShouldReturnCollisionWithZeroFractionBefore()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 5, 5); // X1=0, Y1=0, X2=4, Y2=4
            Entity e2 = new EntityWall(5, 0, 5, 5); // X1=5, Y1=0, X2=9, Y2=9

            e1.Speed = new Vector(1, 0);
            e2.Speed = new Vector(-1, 0);

            // Act
            Collision c1 = e1.FindCollision(e2);
            Collision c2 = e2.FindCollision(e1);

            // Assert
            Assert.AreEqual(0, c1.FractionBefore);
            Assert.AreEqual(0, c2.FractionBefore);
        }
        public void CollisionState_Done_WhenOffsetGreaterThanSpeed_ShouldReturnTrue()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 10, 10);

            e1.Speed = new Vector(4, 0);

            CollisionState cs1 = new CollisionState(e1, 4);

            // Act
            for (int i = 0; i < 5; i++)
            {
                cs1.Next();
            }

            // Assert
            Assert.IsTrue(cs1.Done);
        }
        public void CollisionState_Fraction_ShouldReturnOffsetDividedBySpeed()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 10, 10);

            e1.Speed = new Vector(4, 0);

            CollisionState cs1 = new CollisionState(e1, 4);

            double expected = 1 / e1.Speed.Length;

            // Act
            cs1.Next();
            double frac = cs1.Fraction;

            // Assert
            Assert.AreEqual(expected, frac);
        }
        public void CollisionState_Previous_ShouldSubtractStepFromOffset()
        {
            // Arrange
            Entity e1 = new EntityWall(0, 0, 10, 10);

            e1.Speed = new Vector(4, 0);

            CollisionState cs1 = new CollisionState(e1, 4);

            Vector expected = new Vector(1, 0);

            // Act
            cs1.Next();
            cs1.Next();
            cs1.Previous();

            // Assert
            Assert.AreEqual(expected, cs1.Rectangle.Position);
        }