Пример #1
0
        public void Update(GameTime gameTime)
        {
            #region Knockback
            Vector2 temp;
            foreach (Enemy enemy in enemies)
            {
                temp = CheckHit();
                if (temp.X == 1 && knockback == false)
                {
                    Healthbar.LoseHealth(2 * GameSettings.Instance.Tilescale.X * 0.1f);
                    knockback            = true;
                    knockbacktimer       = 0.2f;
                    knockbackdirection.X = 0;
                    sprSheetY            = PlayerEnums.Action.Hit;
                    sprSheetX            = 4;
                    knockbackdirection   = temp;

                    return;
                }
            }

            if (knockback)
            {
                SpeedScale = 2.0f;
                switch ((int)knockbackdirection.Y)
                {
                case 1:
                    Move(direction = new Vector2(0, -1), gameTime);
                    break;

                case 2:
                    Move(direction = new Vector2(-1, 0), gameTime);
                    break;

                case 3:
                    Move(direction = new Vector2(0, 1), gameTime);
                    break;

                case 4:
                    Move(direction = new Vector2(1, 0), gameTime);
                    break;
                }

                knockbacktimer -= gameTime.ElapsedGameTime.TotalSeconds;

                if (knockbacktimer <= 0)
                {
                    knockback            = false;
                    knockbackdirection.Y = 0;
                }
                else
                {
                    SetAnimationFrame();
                    sprite.Update(gameTime);
                    CurrentWeapon.Update(gameTime);
                    return;
                }
            }
            #endregion

            //Check if keys are pressed
            #region Attack
            if (InputManager.Instance.KeyDown(Keys.Space) || Controller.A_Button(false))
            {
                switch (CurrentWeapon.weapontype)
                {
                case PlayerEnums.Weapontype.Spear:
                    if (!(State == PlayerEnums.ActionState.Thrust))
                    {
                        State = PlayerEnums.ActionState.Thrust;
                    }
                    break;

                case PlayerEnums.Weapontype.Sword:
                    if (!(State == PlayerEnums.ActionState.Slash))
                    {
                        State = PlayerEnums.ActionState.Slash;
                    }
                    break;

                case PlayerEnums.Weapontype.Bow:
                    if (!(State == PlayerEnums.ActionState.Shoot))
                    {
                        State = PlayerEnums.ActionState.Shoot;
                    }
                    break;
                }
            }
            #endregion
            #region Movement
            else
            {
                if (InputManager.Instance.KeyDown(Keys.W) || Controller.Up(false))
                {
                    State         = PlayerEnums.ActionState.Walk;
                    lookDirection = PlayerEnums.LookDirection.Up;
                    direction.Y   = -1;
                    Interval      = BaseInterval * (int)State / (int)PlayerEnums.ActionState.Walk;
                }
                if (InputManager.Instance.KeyDown(Keys.S) || Controller.Down(false))
                {
                    State         = PlayerEnums.ActionState.Walk;
                    lookDirection = PlayerEnums.LookDirection.Down;
                    direction.Y   = 1;
                    Interval      = BaseInterval * (int)State / (int)PlayerEnums.ActionState.Walk;
                }
                if (InputManager.Instance.KeyDown(Keys.A) || Controller.Left(false))
                {
                    State         = PlayerEnums.ActionState.Walk;
                    lookDirection = PlayerEnums.LookDirection.left;
                    direction.X   = -1;
                    Interval      = BaseInterval * (int)State / (int)PlayerEnums.ActionState.Walk;
                }
                if (InputManager.Instance.KeyDown(Keys.D) || Controller.Right(false))
                {
                    State         = PlayerEnums.ActionState.Walk;
                    lookDirection = PlayerEnums.LookDirection.Right;
                    direction.X   = 1;
                    Interval      = BaseInterval * (int)State / (int)PlayerEnums.ActionState.Walk;
                }
            }
            #endregion

            #region Keyreleased
            if (InputManager.Instance.KeyReleased(Keys.Space))
            {
                RecentlyShot     = false;
                State            = PlayerEnums.ActionState.None;
                sprSheetY        = PlayerEnums.Action.None;
                sprSheetX        = 0;
                sprite.SprSheetX = 0;
                direction        = new Vector2(0, 0);
            }

            bool ControlsActive = false;
            for (int i = 0; i < 8; i++)
            {
                if (Controller.prevbuttons[i] == '1' && !Controller.Button(i))
                {
                    ControlsActive = true;
                }
            }


            if (ControlsActive || (InputManager.Instance.KeyReleased(Keys.W) || InputManager.Instance.KeyReleased(Keys.A) || InputManager.Instance.KeyReleased(Keys.S) || InputManager.Instance.KeyReleased(Keys.D)) && InputManager.Instance.KeyDown(Keys.Space) == false)
            {
                State            = PlayerEnums.ActionState.None;
                sprSheetY        = PlayerEnums.Action.None;
                sprSheetX        = 0;
                sprite.SprSheetX = 0;
                direction        = new Vector2(0, 0);
            }
            #endregion

            #region SwitchWeapon
            if (InputManager.Instance.KeyPressed(Keys.LeftShift) || Controller.B_Button(true))
            {
                int tempID = 1;
                if (CurrentWeapon.WeaponID != CurrentWeapon.GetMaxID)
                {
                    tempID = CurrentWeapon.WeaponID + 1;
                }
                CurrentWeapon = this.inventory.Find(x => x.WeaponID == tempID);
                CurrentWeapon.setPosition(sprite.Position);
            }
            #endregion
            #region DebugMode
            if (InputManager.Instance.KeyPressed(Keys.Tab))
            {
                Debug = !Debug;
            }
            #endregion
            else if (State == PlayerEnums.ActionState.Walk)
            {
                Move(direction, gameTime);
                CheckZone(sprite.Position);
            }
            else if (State == PlayerEnums.ActionState.Thrust || State == PlayerEnums.ActionState.Slash || State == PlayerEnums.ActionState.Shoot)
            {
                Attack(gameTime);
            }

            SetAnimationFrame();
            if (Debug)
            {
                boundingBox.Update(gameTime);
            }
            sprite.Update(gameTime);
            CurrentWeapon.Update(gameTime);

            foreach (Arrow arrow in Arrows)
            {
                arrow.Update(gameTime);
                if (arrow.CheckCollision(layer[0]))
                {
                    if (Arrows.Remove(arrow))
                    {
                        break;
                    }
                }
            }
        }
Пример #2
0
        public void Update(GameTime gameTime)
        {
            if (Die)
            {
                DieAnimation(gameTime);
                return;
            }
            #region Knockback
            Vector2 temp = Vector2.Zero;
            for (int i = 0; i < PlayerState.Count; i++)
            {
                temp = CheckHit(i);
                if (temp.X == 1)
                {
                    LastHitBy = i;
                    break;
                }
            }
            if (temp.X == 1 && knockback == false)
            {
                healthbar.LoseHealth(2 * GameSettings.Instance.Tilescale.X * (0.2f * (PlayerLevels[LastHitBy] - Convert.ToInt32(levelindicator.Text.Text) / 10)));
                knockback            = true;
                knockbacktimer       = 0.2f;
                duration             = 0;
                knockbackdirection.X = 0;
                sprSheetY            = PlayerEnums.Action.Hit;
                sprSheetX            = 4;
                knockbackdirection   = temp;
            }
            foreach (Arrow Arrow in arrows)
            {
                Vector2 temp2 = CheckArrowHit(Arrow);
                if (temp2.X == 1 && knockback == false)
                {
                    LastHitBy = Arrow.PlayerID;
                    healthbar.LoseHealth(2 * GameSettings.Instance.Tilescale.X * (0.15f * (PlayerLevels[LastHitBy] - Convert.ToInt32(levelindicator.Text.Text) / 10)));
                    knockback            = true;
                    knockbacktimer       = 0.2f;
                    duration             = 0;
                    knockbackdirection.X = 0;
                    sprSheetY            = PlayerEnums.Action.Hit;
                    sprSheetX            = 4;
                    knockbackdirection   = temp2;
                    HitArrows.Add(Arrow);
                    arrows.Remove(Arrow);

                    break;
                }
            }

            if (knockback)
            {
                SpeedScale = 2.0f;
                switch ((int)knockbackdirection.Y)
                {
                case 1:
                    Move(direction = new Vector2(0, -1), gameTime);
                    break;

                case 2:
                    Move(direction = new Vector2(-1, 0), gameTime);
                    break;

                case 3:
                    Move(direction = new Vector2(0, 1), gameTime);
                    break;

                case 4:
                    Move(direction = new Vector2(1, 0), gameTime);
                    break;
                }

                knockbacktimer -= gameTime.ElapsedGameTime.TotalSeconds;

                if (knockbacktimer <= 0)
                {
                    knockback            = false;
                    knockbackdirection.Y = 0;
                }
                else
                {
                    SetAnimationFrame();
                    sprite.Update(gameTime);
                    weapon.Update(gameTime);
                    return;
                }
            }
            #endregion

            #region Movement
            if (State != PlayerEnums.ActionState.Thrust)
            {
                for (int i = 0; i < PlayerPosition.Count; i++)
                {
                    if ((((sprite.Position.X - PlayerPosition[i].X < AggroDistance && sprite.Position.X - PlayerPosition[i].X > 0) ||
                          (PlayerPosition[i].X - sprite.Position.X < AggroDistance && PlayerPosition[i].X - sprite.Position.X > 0)) &&
                         ((sprite.Position.Y - PlayerPosition[i].Y < AggroDistance && sprite.Position.Y - PlayerPosition[i].Y > 0) ||
                          (PlayerPosition[i].Y - sprite.Position.Y < AggroDistance && PlayerPosition[i].Y - sprite.Position.Y > 0))) &&
                        PlayerinZone(i))
                    {
                        Aggro      = true;
                        SpeedScale = 0.5f;
                        if (sprite.Position.Y - GameSettings.Instance.Tilescale.Y - PlayerPosition[i].Y > 0)
                        {
                            lookDirection = PlayerEnums.LookDirection.Up;
                            State         = PlayerEnums.ActionState.Walk;
                            direction.Y   = -1;
                        }
                        else if (sprite.Position.Y + GameSettings.Instance.Tilescale.Y - PlayerPosition[i].Y < 0)
                        {
                            lookDirection = PlayerEnums.LookDirection.Down;
                            State         = PlayerEnums.ActionState.Walk;
                            direction.Y   = 1;
                        }
                        else
                        {
                            direction.Y = 0;
                        }
                        if (sprite.Position.X - GameSettings.Instance.Tilescale.X - PlayerPosition[i].X > 0)
                        {
                            lookDirection = PlayerEnums.LookDirection.left;
                            State         = PlayerEnums.ActionState.Walk;
                            direction.X   = -1;
                        }
                        else if (sprite.Position.X + GameSettings.Instance.Tilescale.X - PlayerPosition[i].X < 0)
                        {
                            lookDirection = PlayerEnums.LookDirection.Right;
                            State         = PlayerEnums.ActionState.Walk;
                            direction.X   = 1;
                        }
                        else
                        {
                            direction.X = 0;
                        }

                        if (direction.Y == 0 && direction.X == 0)
                        {
                            State = PlayerEnums.ActionState.Thrust;
                            Attack(gameTime);
                        }
                        break;
                    }
                    else
                    {
                        Aggro = false;
                    }
                }
                if (Aggro == false)
                {
                    SpeedScale = 0.25f;
                    if (duration <= 0 && !MoveBreak)
                    {
                        minDuration = 1;
                        maxDuration = 4;
                        dir         = Random.Next(8);
                        duration    = Random.Next(minDuration, maxDuration);
                        MoveBreak   = true;
                    }
                    else if (duration <= 0 && MoveBreak)
                    {
                        minDuration = 0;
                        maxDuration = 2;
                        duration    = Random.Next(minDuration, maxDuration);
                        MoveBreak   = false;
                        State       = PlayerEnums.ActionState.None;
                        direction   = Vector2.Zero;
                        sprSheetX   = 0;
                        dir         = 8;
                    }
                    else
                    {
                        duration -= gameTime.ElapsedGameTime.TotalSeconds;
                    }

                    switch (dir)
                    {
                    case 0:    //up
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.Up;
                        direction     = new Vector2(0, -1);
                        break;

                    case 1:    //left
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.left;
                        direction     = new Vector2(-1, 0);
                        break;

                    case 2:    //down
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.Down;
                        direction     = new Vector2(0, 1);
                        break;

                    case 3:    //right
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.Right;
                        direction     = new Vector2(1, 0);
                        break;

                    case 4:    //left up
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.left;
                        direction     = new Vector2(-1, -1);
                        break;

                    case 5:    //left down
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.left;
                        direction     = new Vector2(-1, 1);
                        break;

                    case 6:    //right up
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.Right;
                        direction     = new Vector2(1, -1);
                        break;

                    case 7:    //right down
                        State         = PlayerEnums.ActionState.Walk;
                        lookDirection = PlayerEnums.LookDirection.Right;
                        direction     = new Vector2(1, 1);
                        break;
                    }

                    /*}
                     * else//no movement
                     * {
                     *  State = PlayerEnums.ActionState.None;
                     *  sprSheetY = PlayerEnums.Action.None;
                     *  sprSheetX = 0;
                     *  sprite.SprSheetX = 0;
                     *  direction = new Vector2(0, 0);
                     * }*/
                }
            }
            #endregion

            if (State == PlayerEnums.ActionState.Thrust)
            {
                Attack(gameTime);
                direction = new Vector2(0, 0);
            }
            else if (State != PlayerEnums.ActionState.None)
            {
                Move(direction, gameTime);
            }

            SetAnimationFrame();
            sprite.Update(gameTime);
            weapon.Update(gameTime);
        }