public void Update(KeyboardState keyboard, GamePadState pad, MouseState mouse, GameTime gameTime, Player player) { if (FirstGame.checkpoint && !slide) { this.Slide(600, player); slide = true; } if (GameMain.Status != "inventory") { if (player.GetType() == typeof(Jekyll)) { foreach (InteractZoneBlockWithPuzzle interBlock in InteractZoneBlockWithPuzzle.InteractZoneBlockList) { if (player.HitBox.Intersects(interBlock.HitBox)) { if (interBlock.IsActivate) { if (interBlock.Id == 0) { if (puzzle0 == null) puzzle0 = new Puzzle0(); else puzzle0.Update(pad, gameTime); } else if (interBlock.Id == 1) { if (puzzle1 == null) puzzle1 = new Puzzle1(); else puzzle1.Update(pad, gameTime); } if (puzzle0 != null && !puzzle0.Status) { interBlock.IsActivate = false; if (puzzle0.Success) { MovableNeutralBlock.MovableNeutralList[0].Activate = true; } puzzle0 = null; puzzle1 = null; GameMain.Status = "on"; } } else { if (pad.IsButtonDown(Buttons.A) && oldPad.IsButtonUp(Buttons.A)) { interBlock.IsActivate = true; GameMain.Status = "pause"; } } } } } } if (GameMain.Status == "on") { futurePos = player.HitBox; if (!player.IsAttacking) player.CheckMove(); // Animation des blocs mouvants foreach (EndZoneBlock endzone in EndZoneBlock.EndZoneBlockList) { if (player.HitBox.Intersects(endzone.HitBox)) { FirstGame.start = false; FirstGame.end = true; FirstGame.Hp = AlignementGUI._value/4; FirstGame.Jp = 100 - FirstGame.Hp; } } foreach (SkillPointsBonusBlock bonus in SkillPointsBonusBlock.SkillPointsBonusList) { if (bonus.HitBox.Intersects(player.HitBox) && bonus.IsActive) { bonus.IsActive = false; if (bonus.Status) Hide._hskillPoints += bonus.Value; else Jekyll._jskillsPoints += bonus.Value; } } foreach (MovableNeutralBlock block in MovableNeutralBlock.MovableNeutralList) { if (block.IsActive) block.Update(gameTime); } foreach (MovableEnnemyBlock block in MovableEnnemyBlock.MovableEnnemyList) { if (block.IsActive) { block.Update(gameTime, player, keyboard); if (player.HitBox.Intersects(block.SpotZone) && !player.IsHiding) { block.HaveSpotted = true; } } } foreach (BulletBlock bullet in BulletBlock.BulletBlockList) { bullet.Update(); if (bullet.HitBox.Intersects(player.HitBox) && bullet.IsActive) { bullet.IsActive = false; player.Health -= bullet.Strength + 1; if (player.Health <= 0) { FirstGame.reload = true; } } } foreach (ItemBlock item in ItemBlock.ItemBlockList) { if (item.IsActive) { if (item.HitBox.Intersects(player.HitBox) && item.IsActive && !player.Statut) { item.IsActive = false; InventoryCase.InventoryCaseList[item.Id].IsEmpty = false; } } } foreach (Camera cam in Camera.CamerasBlockList) { if (cam.IsActive) { cam.Update(gameTime); if (!player.Statut && !player.IsHiding && player.HitBox.Intersects(cam.Spot_rec)) { FirstGame.reload = true; } } } foreach (InfectedZoneBlock zone in InfectedZoneBlock.InfectedZoneBlockList) { if (player.HitBox.Intersects(zone.HitBox)) { if (player.Statut) { player.Health--; if (player.Health <= 0) FirstGame.reload = true; } else if(!player.Statut && (!InventoryCase.InventoryCaseList[0].Status || !player.IsActiveObject)) { player.Health--; if (player.Health <= 0) FirstGame.reload = true; } } } if (!ClimbableBlock.ClimbableBlockList[0].IsActive && !ClimbableBlock.ClimbableBlockList[1].IsActive) { grueTimer++; if (grueTimer < 240/3) { StaticNeutralBlock.StaticNeutralList[0].Y -= 2; StaticNeutralBlock.StaticNeutralList[1].Y -= 2; StaticNeutralBlock.StaticNeutralList[2].Y += 3; StaticNeutralBlock.StaticNeutralList[3].Y += 3; player.DecreaseCoordY(2); LaunchableBlock.LaunchableBlockList[0].Y += 3; } } //Déplacements joueurs/cartes if (pad.IsButtonUp(Buttons.LeftThumbstickLeft) && pad.IsButtonUp(Buttons.LeftThumbstickRight) && !player.IsJumping) { player.AccelMode = 1; player.Speed = 1.5f; accelTimer = 0; player.SetAccelSpeed(); player.BlockPLayer(); } else if (pad.IsButtonDown(Buttons.LeftThumbstickLeft)) { if (player.CanMove && player.EndAttack) { this.SetPlayerAccelMode(gameTime, player); this.Move(Keys.Left, player); } } else if (pad.IsButtonDown(Buttons.LeftThumbstickRight)) { if (player.CanMove && player.EndAttack) { this.SetPlayerAccelMode(gameTime, player); this.Move(Keys.Right, player); } } if (pad.IsButtonDown(Buttons.LeftThumbstickUp) && player.FallingSpeed == 0) { bool lad = false; foreach (Ladder ladder in Ladder.LadderList) { if (player.GetType() == typeof(Jekyll)) { if (player.HitBox.Intersects(ladder.HitBox) && !player.IsCrouch) { Rectangle left = new Rectangle(player.HitBox.X, player.HitBox.Y, 5, player.HitBox.Height); Rectangle right = new Rectangle(player.HitBox.X + player.HitBox.Width - 5, player.HitBox.Y, 5, player.HitBox.Height); if (ladder.HitBox.Intersects(left) && ladder.HitBox.Intersects(right)) { lad = true; player.DecreaseCoordY(1); } } } } if (!lad && !player.PlayerMove) { this.LookUp(true, gameTime, player); } } else if (pad.IsButtonUp(Buttons.LeftThumbstickUp) && showCount > 0) { this.LookUp(false, gameTime, player); player.LookUpDownPhase = true; } else if (pad.IsButtonDown(Buttons.LeftThumbstickUp)) { foreach (Ladder ladder in Ladder.LadderList) { if (player.HitBox.Intersects(ladder.HitBox) && !player.IsCrouch) { Rectangle left = new Rectangle(player.HitBox.X, player.HitBox.Y, 5, player.HitBox.Height); Rectangle right = new Rectangle(player.HitBox.X + player.HitBox.Width - 5, player.HitBox.Y, 5, player.HitBox.Height); if (ladder.HitBox.Intersects(left) && ladder.HitBox.Intersects(right)) { player.DecreaseCoordY(1); } } } } else { player.LookUpDownPhase = false; } if (pad.IsButtonDown(Buttons.LeftThumbstickDown) && player.FallingSpeed == 0) { foreach (Ladder ladder in Ladder.LadderList) { if (player.GetType() == typeof(Jekyll)) { if (player.HitBox.Intersects(ladder.HitBox)) { Rectangle feet = new Rectangle(player.HitBox.X, player.HitBox.Y + player.HitBox.Height - 1, player.HitBox.Width, 1); Rectangle feetplus = feet; feetplus.Y++; if (feet.Intersects(ladder.HitBox) || feetplus.Intersects(ladder.HitBox) && !player.IsCrouch) { Rectangle left = new Rectangle(player.HitBox.X, player.HitBox.Y, 5, player.HitBox.Height); Rectangle right = new Rectangle(player.HitBox.X + player.HitBox.Width - 5, player.HitBox.Y, 5, player.HitBox.Height); if (ladder.HitBox.Intersects(left) && ladder.HitBox.Intersects(right)) { player.IncreaseCoordY(1); } } } } } } if (pad.IsButtonDown(Buttons.LeftThumbstickDown) && player.FallingSpeed == 0 && oldPad.IsButtonUp(Buttons.LeftThumbstickDown)) { var lad = false; foreach (Ladder ladder in Ladder.LadderList) { if (player.GetType() == typeof(Jekyll)) { if (player.HitBox.Intersects(ladder.HitBox)) { lad = true; break; } } } if (!player.Statut && !lad && !player.IsJumping) player.stoop(1); } else if (pad.IsButtonUp(Buttons.LeftThumbstickDown) && oldPad.IsButtonDown(Buttons.LeftThumbstickDown)) { if (!player.Statut) player.stoop(0); } if (pad.IsButtonDown(Buttons.A) && oldPad.IsButtonUp(Buttons.A) && !player.IsJumping) { if (player.Statut && player.CanJump && player.EndAttack) { if (pad.IsButtonDown(Buttons.LeftThumbstickLeft)) jumpInitKey = Keys.Left; else if (pad.IsButtonDown(Buttons.LeftThumbstickRight)) jumpInitKey = Keys.Right; else if (pad.IsButtonDown(Buttons.LeftThumbstickRight) && pad.IsButtonDown(Buttons.LeftThumbstickLeft)) jumpInitKey = 0; else jumpInitKey = 0; player.JumpPlayer(); } else if (!player.Statut && player.CanClimb) { if (pad.IsButtonDown(Buttons.LeftThumbstickRight)) { futurePos.X += (int)player.Speed; foreach (ClimbableBlock block in ClimbableBlock.ClimbableBlockList) { if (block.HitBox.Intersects(futurePos)) { if (block.IsActive && block.IsClimbable) player.ClimbBox(block, 0); } } } else if (pad.IsButtonDown(Buttons.LeftThumbstickLeft)) { futurePos.X -= (int)player.Speed; foreach (ClimbableBlock block in ClimbableBlock.ClimbableBlockList) { if (block.HitBox.Intersects(futurePos)) { if (block.IsActive && block.IsClimbable) player.ClimbBox(block, 1); } } } } else { if (pad.IsButtonDown(Buttons.LeftThumbstickRight)) { futurePos.X += (int)player.Speed; foreach (Door block in Door.DoorList) { if (block.HitBox.Intersects(futurePos) && !block.IsOpen) { block.IsOpen = true; block.Texture = Ressources.door_open; block.HitBox = new Rectangle(block.HitBox.X+10, block.HitBox.Y, block.Texture.Width, block.Texture.Height); block.IsCollidable = false; } } } else if (pad.IsButtonDown(Buttons.LeftThumbstickLeft)) { futurePos.X -= (int)player.Speed; foreach (Door block in Door.DoorList) { if (block.HitBox.Intersects(futurePos) && !block.IsOpen) { block.IsOpen = true; block.Texture = Ressources.door_open; block.HitBox = new Rectangle(block.HitBox.X + 10, block.HitBox.Y, block.Texture.Width, block.Texture.Height); block.IsCollidable = false; } } } } } if (pad.IsButtonDown(Buttons.RightShoulder) && oldPad.IsButtonUp(Buttons.RightShoulder)) { if (player.Statut) { if (player.CanHVision) { if (player.IsActiveVision) player.IsActiveVision = false; else player.IsActiveVision = true; } } else { if (player.CanJVision) { if (player.IsActiveVision) player.IsActiveVision = false; else player.IsActiveVision = true; } } } if (player.IsCrouch) { player.CrouchAnime(); } if (player.IsAttacking) { player.AttackAnime(); //player.BlockPLayer(); futurePos.Width = 70; /* * Test de collision quand on attaque sur les blocs grimpables */ foreach (ClimbableBlock block in ClimbableBlock.ClimbableBlockList) { if (block.HitBox.Intersects(futurePos)) { if (block.IsBreakable && player.HitAttack) { player.destroy(block); } } } foreach (MovableEnnemyBlock block in MovableEnnemyBlock.MovableEnnemyList) { if (block.HitBox.Intersects(futurePos)) { if (block.IsBreakable && player.HitAttack) { player.destroy(block); } } } } if (player.IsSwitch) { if (player.IsCrouch) player.stoop(0); if (player.IsThrowing) { cible.IsItemThrow = false; player.IsThrowing = false; } player.IsSwitch = false; } if ((pad.IsButtonDown(Buttons.RightTrigger) || pad.IsButtonDown(Buttons.LeftTrigger)) && oldPad.IsButtonUp(Buttons.RightTrigger) && oldPad.IsButtonUp(Buttons.LeftTrigger)) { if (player.Statut) { player.Speed = 9; player.IsSpriting = true; } } if (player.IsSpriting && pad.IsButtonUp(Buttons.RightTrigger) && pad.IsButtonUp(Buttons.LeftTrigger)) { if (player.Statut) { player.Speed = 3; player.IsSpriting = false; } } if (pad.IsButtonDown(Buttons.B) && oldPad.IsButtonUp(Buttons.B)) { if (player.Statut && player.EndAttack) { player.IsAttacking = true; player.BeginAttack = true; player.EndAttack = false; } else if (!player.Statut && player.CanHide) { foreach (HidingBlock block in HidingBlock.HidingBlockList) { if (block.HitBox.Intersects(futurePos)) { if (!block.IsHide) { player.hide(block, 0); } } } } } if (player.IsHiding) { if (!player.HideBlock.HitBox.Intersects(futurePos) && player.IsHiding) player.hide(player.HideBlock, 1); } if (pad.IsButtonDown(Buttons.Y) && oldPad.IsButtonUp(Buttons.Y)) { if (!player.Statut) { player.IsActiveObject = !player.IsActiveObject; } } if (pad.IsButtonDown(Buttons.X) && oldPad.IsButtonUp(Buttons.X)) { if (!player.Statut) { if (!player.IsThrowing) { if (player.DirectionPlayer == Direction.Left) cible = new Launch((player.HitBox.X - 50), (player.HitBox.Y + 56), Direction.Left); else if (player.DirectionPlayer == Direction.Right) cible = new Launch((player.HitBox.X + 50), (player.HitBox.Y + 56), Direction.Right); player.IsThrowing = true; player.BlockPLayer(); player.CanMove = false; } else { player.IsThrowing = false; if (cible.sens == Direction.Left) { int distance = player.HitBox.X - cible.HitBox.X; int ratio = 0; if (distance <= 100) { cible.Vitesse = 1; ratio = 3; } else if (distance > 100 && distance <= 300) { cible.Vitesse = 2; ratio = 2; } else if (distance > 300 && distance <= 410) cible.Vitesse = 3; cible.FSpeed = distance * 8f / 400 * -1 - ratio; } else if (cible.sens == Direction.Right) { int distance = cible.HitBox.X - player.HitBox.X; int ratio = 0; if (distance <= 100) { cible.Vitesse = 1; ratio = 3; } else if (distance > 100 && distance <= 300) { cible.Vitesse = 2; ratio = 2; } else if (distance > 300 && distance <= 410) cible.Vitesse = 3; cible.FSpeed = distance * 8f / 400 * -1 - ratio; } cible.IsItemThrow = true; } } else { futurePos = player.HitBox; futurePos.X = (int)(player.DirectionPlayer == Direction.Left ? futurePos.X - player.Speed : futurePos.X + player.Speed); if (!player.IsThrowing) { foreach (LaunchableBlock block in LaunchableBlock.LaunchableBlockList) { if (block.HitBox.Intersects(futurePos)) { if (block.IsActive) { if (player.DirectionPlayer == Direction.Left) cible = new Launch((player.HitBox.X - 50), (player.HitBox.Y + 56), Direction.Left); else if (player.DirectionPlayer == Direction.Right) cible = new Launch((player.HitBox.X + 50), (player.HitBox.Y + 56), Direction.Right); block.IsActive = false; player.ThrowId = 2; cible.IsBoxThrow = true; player.BlockLaunch = block; player.IsThrowBox = true; player.throwBox(block, pad); cible.Vitesse = 5; cible.FSpeed = 370*6f/400*-1; } } } } } } foreach (MovableNeutralBlock blocks in MovableNeutralBlock.MovableNeutralList) { Rectangle futurPos = player.HitBox; futurPos.Y++; if (futurPos.Intersects(blocks.HitBox) && blocks.IsActive) { player.takeElevators(blocks, _downSide, _upSide); } } if (player.IsJumping) player.JumpAnime(); if (!cible.IsBoxCrash && cible.IsBoxThrow) { player.LaunchAnime(cible); } if (cible.IsItemThrow && cible.IsItemCrash) { throwcount++; if (throwcount >= 6) { throwcount = 0; cible.EffetZone = new Rectangle(cible.HitBox.X-250, cible.HitBox.Y-50, 500, 50); foreach (MovableEnnemyBlock ennemy in MovableEnnemyBlock.MovableEnnemyList) { if (ennemy.HitBox.Intersects(cible.EffetZone) && !ennemy.IsOnAlert) { ennemy.IsOnAlert = true; int distance = ennemy.HitBox.X - cible.HitBox.X; if (distance > 0) ennemy.Side = true; else ennemy.Side = false; distance = Math.Abs(distance); ennemy.initDistance = distance; ennemy.Distance = distance; } } } } if (player.IsThrowing) { if (player.ThrowId == 1) { player.throwItem(cible, pad); player.BlockPLayer(); player.CanMove = false; player.Speed = 0; } else if (player.ThrowId == 2) { player.throwBox(LaunchableBlock.LaunchableBlockList[0], pad); player.BlockPLayer(); player.CanMove = false; player.Speed = 0; } } } oldKeyboard = keyboard; oldPad = pad; }