예제 #1
0
        public void Limit_negative(PositionComponent position)
        {
            var sut = new LimitHorizontalVelocity(position, 100);

            sut.Target.Velocity.X = -200;

            sut.Update();

            Assert.Equal(-100, sut.Target.Velocity.X);
        }
예제 #2
0
        private UpdateByState CreateUpdatesByState(Inputs Inputs)
        {
            var attackCooldwon = new CooldownTracker(20);
            var HurtCooldwon   = new CooldownTracker(10);

            var changesSpeed                = new IncreaseHorizontalVelocity(this, 10);
            var decreaseVelocity            = new DecreaseHorizontalVelocity(this, 5);
            var limitHorizontalVelocity     = new LimitHorizontalVelocity(this, 100);
            var gravityChangesVerticalSpeed = new GravityChangesVerticalSpeed(this);

            var ChangePlayerStateToFalling     = new ChangePlayerStateToFalling(this);
            var changePlayerToIdle             = new ChangePlayerStateToIdle(this);
            var changePlayerToWalking          = new ChangePlayerStateToWalking(this);
            var ChangePlayerToJumpingState     = new ChangePlayerStateToJumping(this);
            var changePlayerStateToCrouch      = new ChangePlayerStateToCrouch(this);
            var changePlayerStateToLookingUp   = new ChangePlayerStateToLookingUp(this);
            var ChangePlayerStateToAttack      = new ChangePlayerStateToAttack(this, attackCooldwon);
            var ChangePlayerStateToAfterAttack = new ChangePlayerStateToAfterAttack(this, attackCooldwon);
            var ChangePlayerStateToHurt        = new ChangePlayerStateToHurt(this, HurtCooldwon);
            var ChangePlayerStateToAfterHurt   = new ChangePlayerStateToAfterHurt(this, HurtCooldwon);

            var updateByState = new UpdateByState(this);

            updateByState.Add(PlayerState.IDLE, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , decreaseVelocity
                                  , ChangePlayerStateToFalling
                                  , changePlayerToWalking
                                  , ChangePlayerToJumpingState
                                  , changePlayerStateToCrouch
                                  , changePlayerStateToLookingUp
                                  , ChangePlayerStateToAttack
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.FALLING, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , changePlayerToWalking
                                  , changePlayerToIdle
                                  , changePlayerStateToCrouch
                                  , changePlayerStateToLookingUp
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.WALKING, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , limitHorizontalVelocity
                                  , changesSpeed
                                  , changePlayerToWalking
                                  , ChangePlayerToJumpingState
                                  , ChangePlayerStateToFalling
                                  , changePlayerToIdle
                                  , changePlayerStateToCrouch
                                  , changePlayerStateToLookingUp
                                  , ChangePlayerStateToAttack
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.JUMP, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , ChangePlayerStateToFalling
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.CROUCH, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , decreaseVelocity
                                  , changePlayerToWalking
                                  , changePlayerToIdle
                                  , ChangePlayerStateToFalling
                                  , changePlayerStateToLookingUp
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.LOOKING_UP, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , decreaseVelocity
                                  , changePlayerToWalking
                                  , changePlayerToIdle
                                  , ChangePlayerStateToFalling
                                  , changePlayerStateToCrouch
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.ATTACK, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , decreaseVelocity
                                  , ChangePlayerStateToAfterAttack
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.AFTER_ATTACK, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , decreaseVelocity
                                  , changePlayerToIdle
                                  , changePlayerToWalking
                                  , ChangePlayerStateToFalling
                                  , changePlayerStateToCrouch
                                  , ChangePlayerStateToHurt
                                  ));

            updateByState.Add(PlayerState.HURT, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , decreaseVelocity
                                  , ChangePlayerStateToAfterHurt
                                  ));

            updateByState.Add(PlayerState.AFTER_HURT, new UpdateAggregation(
                                  gravityChangesVerticalSpeed
                                  , decreaseVelocity
                                  , changePlayerToIdle
                                  , changePlayerToWalking
                                  , ChangePlayerStateToFalling
                                  , changePlayerStateToCrouch
                                  , ChangePlayerStateToHurt
                                  ));

            return(updateByState);
        }