示例#1
0
        public void Update(TimeSpan elapsedInFrame)
        {
            JumpMotion.Active = Player.Motion.CurrentMotionPerSecond.Y == 0 && Input.GetButtonPressed(GameKeys.Jump);

            Player.Direction = Input.Pad.GetInputDirection(Player.Direction, Axis.X);

            bool isWalking = Input.Pad.GetInputAmount(Axis.X) != 0;

            if (Player.Motion.CurrentMotionPerSecond.Y == 0 && isAttacking.IsActive)
            {
                isWalking = false;
            }

            WalkMotion.Motion.Active = isWalking;

            if (Player.IsOnLadder.Active)
            {
                if (Player.Direction.Axis() == Axis.X)
                {
                    Player.Direction = Direction.Up;
                }

                Player.Direction = Input.Pad.GetInputDirection(Direction.Up, Axis.Y);

                ClimbMotion.Active        = true;
                ClimbMotion.Motion.Active = Input.Pad.GetInputAmount(Axis.Y) != 0;
            }
            else
            {
                ClimbMotion.Active = false;
            }

            if (!Player.IsOnGround.Active)
            {
                highestPointAboveGround = (float)Math.Min(highestPointAboveGround, Player.Position.Bottom);
            }

            if (hasLandedOnGround.JustStarted())
            {
                float maxSoundDistance = 64;
                var   distanceFallen   = ((float)Player.Position.Bottom - highestPointAboveGround).KeepInsideRange(0, maxSoundDistance);

                var distanceFallenPct = distanceFallen / maxSoundDistance;
                if (distanceFallen > 0.1)
                {
                    AudioEngine.Instance.PlaySound(Sounds.HitGround, distanceFallenPct);
                }

                highestPointAboveGround = Int32.MaxValue;
            }

            if (isAttacking.JustStarted())
            {
                AudioEngine.Instance.PlaySound(Sounds.Swish);
                var attack = new Swoosh();
                if (Player.HasBetterAttack)
                {
                    attack.PositionRelativeTo(Player, 8, -4);
                    attack.MoveInDirection(Player.Direction, Config.Provider.GetValue <int>("better attack speed"));
                }
                else
                {
                    attack.StayRelativeTo(Player, 8, -4);
                }
            }
        }