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; } } } }
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); }