static public void UpdateRhino(ref List <Rhinobot> Rhinobots, Rectangle RecUpdate, GameTime gameTime, PlayerSonic Joueur, ref int RingsPosses, ref int Life, ref Shield Shield, ref Vector2 PosAnimationPlayer, ref bool AnimalActif, ref AnimationPlayer AnimationPlayer, ref List <Ring> Rings, Random RringsX, Random RringsY) { for (int rh = Rhinobots.Count - 1; rh >= 0; rh--) { if (RecUpdate.Intersects(Rhinobots[rh].RecRhino)) { Rhinobots[rh].Update(gameTime, Joueur, ref RingsPosses, ref Life, ref Shield); } #region Si rh toucher if (Rhinobots[rh].Touched) { //si saute sur rhino if (Rhinobots[rh].Destroy) { CodeExclusifSonic.ActivationAnimal(ref PosAnimationPlayer, Rhinobots[rh].Position, ref AnimalActif, ref AnimationPlayer); Rhinobots.RemoveAt(rh); continue; } //si n'a pas checker pour les perte de rings #region Perte des rings if (!Rhinobots[rh].PerteRingOneCheck) { Rhinobots[rh].PerteRingOneCheck = true; CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield); } Rhinobots[rh].Touched = false; #endregion } #endregion } }
static public void UpdateSinge(ref List <SingeArticuler> Singes, Rectangle RecUpdate, GameTime gameTime, PlayerSonic Joueur, ref int RingsPosses, ref int Life, ref Shield Shield, ref Vector2 PosAnimationPlayer, ref bool AnimalActif, ref AnimationPlayer AnimationPlayer, ref List <Ring> Rings, Random RringsX, Random RringsY, ref List <ObjectMapping> TexturesObject) { for (int s = Singes.Count - 1; s >= 0; s--) { if (RecUpdate.Intersects((new Rectangle(Singes[s].RecTete.X - 100, Singes[s].RecTete.Y, Singes[s].RecTete.Width + 200, Singes[s].RecTete.Height)))) { Singes[s].Update(gameTime, Joueur.RecPerso); } if (Singes[s].RecTete.Intersects(Joueur.RecPerso)) { //Si saute sur singe if ((Joueur.HasJump || Joueur.EnBoule) && !Joueur.Injure) { CodeExclusifSonic.ActivationAnimal(ref PosAnimationPlayer, Singes[s].PositionTete, ref AnimalActif, ref AnimationPlayer); RessourceSonic3.EnnemiItem.Play(); TexturesObject.Add(new ObjectMapping(4, Singes[s].PositionArbre)); Singes.RemoveAt(s); continue; } } //si a encore une noix if (Singes[s].BrasArticuler.Noix.Count != 0) { //Si noix Intersect joueur if (Singes[s].BrasArticuler.Noix[0].RecNoix.Intersects(Joueur.RecPerso)) { CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield); Singes[s].BrasArticuler.Noix.Remove(Singes[s].BrasArticuler.Noix[0]); } } } }
public void Update(PlayerSonic Joueur, ref int RingsPosses, ref List <Ring> Rings, ref int Life, ref Shield Shield) { this.RecPerso = Joueur.RecPerso; if (RecPerso.isOnLeftOf(RecPic)) { Joueur.Speed.X = -0.5f; } else if (RecPerso.isOnRightOf(RecPic)) { Joueur.Speed.X = 0.7f; } if (this.RecPerso.Intersects(RecPic) && !Joueur.Injure) { Touched = true; Joueur.Injure = true; Joueur.HasJump = true; Joueur.Speed = new Vector2(); Joueur.VitesseDepart = 0; recCheck = true; #region Regarde en fonction de si sonic a bouclier ou non if (Shield.num == 0) { if (RingsPosses != 0) { RessourceSonic3.LostRing.Play(); } else { Life--; RessourceSonic3.Hurt.Play(); } if (RingsPosses > 10) { RingsPosses = 10; } CodeExclusifSonic.PerteRingPic(Position, RingsPosses, ref Rings); RingsPosses = 0; } else { Shield.num = 0; RessourceSonic3.PerteBouclier.Play(); } #endregion #region Reaction Soni if (Joueur.flip == SpriteEffects.None) { Joueur.Speed.X = -5.5f; Joueur.VitesseDepart = 0f; Joueur.Speed.Y = -6.5f; } else { Joueur.Speed.X = 5.5f; Joueur.VitesseDepart = 0f; Joueur.Speed.Y = -6.5f; } #endregion } else if (!Joueur.Injure) { recCheck = false; } }
public void Update(GameTime gametime, PlayerSonic Joueur, ref int RingsPosses, ref int Life, ref List <Ring> Rings, Random RringsY, Random RringsX, ref Shield Shield) { #region Transfo recPerso RecPersoModif = new Rectangle(Joueur.RecPerso.X + 20, Joueur.RecPerso.Y, Joueur.RecPerso.Width / 4, Joueur.RecPerso.Height); //si se baisse evite le missile if (Joueur.bCrouch || Joueur.EnBoule) { RecPersoModif.Y += 40; } #endregion #region deplacement if (!Destroy) { if (!Stabiliser)//Si n'est pas statique { BulletAnimationPlayer.PlayAnimation(null); BulletTouchSonic = false; SoundCheck = false; RecBullet.Location = new Point(-300, 0); if (flip == SpriteEffects.None) { BulletPos = new Vector2(Position.X, Position.Y + 180); } else { BulletPos = new Vector2(Position.X + 170, Position.Y + 180); } if (!GDDeplacement)//Si ne va pas de droite a gauche { if (Descente) { Position.Y += Vitesse; } else { Position.Y -= Vitesse; } } else { if (!DeplaceDroite) { Position.X -= Vitesse; } else { Position.X += Vitesse; } Oscillation(); } } else { if (!Descente) { if (!BulletTouchSonic) { BulletAnimationPlayer.PlayAnimation(FireBullet); } if (!SoundCheck) { RessourceSonic3.FireBullet.Play(); SoundCheck = true; } if (flip == SpriteEffects.None) { if (!BulletTouchSonic) { BulletPos.X -= 5; RecBullet = new Rectangle((int)BulletPos.X - 70, (int)BulletPos.Y - 100, RessourceSonic3.MB1FireBullet.Width / 6, RessourceSonic3.MB1FireBullet.Height / 3); } } else { if (!BulletTouchSonic) { BulletPos.X += 5; RecBullet = new Rectangle((int)BulletPos.X, (int)BulletPos.Y - 100, RessourceSonic3.MB1FireBullet.Width / 6, RessourceSonic3.MB1FireBullet.Height / 3); } } } Oscillation(); } } #region Limite if (!GDDeplacement) // si ne vas pas de droite a gauche { if (Position.Y > PositionInit.Y + 250) { Descente = false; Stabiliser = true; if (!OscillCheck) { PositionOscillation = Position; OscillCheck = true; } } else if (Position.Y <= PositionInit.Y) { Descente = true; Stabiliser = true; if (!OscillCheck) { PositionOscillation = Position; OscillCheck = true; } } } else { if (!Stabiliser)//si n'est pas stable { if (Position.X < PositionInit.X - 550) { GDDeplacement = false; Stabiliser = true; DeplaceDroite = true; NbFoisStabiliser--; flipCheck = false; } else if (Position.X > PositionInit.X) { GDDeplacement = false; Stabiliser = true; DeplaceDroite = false; NbFoisStabiliser--; flipCheck = false; } else if ((Position.X < PositionInit.X - 260 && Position.X > PositionInit.X - 280) && !flipCheck) { if (flip == SpriteEffects.None) { flip = SpriteEffects.FlipHorizontally; } else { flip = SpriteEffects.None; } flipCheck = true; } } } #endregion if (Stabiliser)//Arret de 5 secondes environs { CompteurStabilisateur += (float)gametime.ElapsedGameTime.TotalSeconds; if (CompteurStabilisateur >= VitesseStabiliser) { CompteurStabilisateur = 0; if (OscillCheck) { Position = PositionOscillation; } OscillCheck = false; Stabiliser = false; NbFoisStabiliser++; } //Deplacement gaucheDroite if (NbFoisStabiliser == 2) { NbFoisStabiliser = 0; if (Position.Y <= PositionInit.Y) { GDDeplacement = true; } } } #endregion if (NbFoisTouche == 7 && TouchAnimationPlayer.FrameIndex == 6) { Finish = true; } if (NbFoisTouche == 6) { AttenteDeDestruction += (float)gametime.ElapsedGameTime.TotalSeconds; Destroy = true; if (AttenteDeDestruction > 3) { TouchAnimationPlayer.PlayAnimation(MiniBossDes); RessourceSonic3.MiniBossKill.Play(); NbFoisTouche++; } } if (!Destroy) { if (!Joueur.Injure) { #region intersection RecMiniBoss/RecPerso //Si touche Au miniBoss if (RecMiniBoss.Intersects(RecPersoModif)) { //Si miniboss Toucher if (!TouchCheck) { //si la vitesse joueur x est plus petite que 6 (sinon // sonic rebondit trop loin if (Math.Abs(Joueur.Speed.X) < 5) { Joueur.Speed.X = -Joueur.Speed.X * 1.3f; } else { Joueur.Speed.X = -Joueur.Speed.X * 0.60f; } Joueur.Speed.Y = -5; TouchCheck = true; RessourceSonic3.TouchBoss.Play(); NbFoisTouche++; } } if (TouchCheck) { TouchAnimationPlayer.PlayAnimation(TouchAnimation); CompteurTouch += (float)gametime.ElapsedGameTime.TotalSeconds; if (CompteurTouch >= VitesseStabiliser / 2) { TouchCheck = false; TouchAnimationPlayer.PlayAnimation(null); CompteurTouch = 0; } } #endregion #region Intersection RecFusee/RecPerso else if (RecFusee.Intersects(RecPersoModif)) { if (!TouchFuseeCheck) { CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield); TouchFuseeCheck = true; } } #endregion TouchFuseeCheck = false; #region Intersection RecBullet/RecPerso if (RecBullet.Intersects(RecPersoModif)) { BulletTouchSonic = true; if (BulletTouchSonic) { BulletAnimationPlayer.PlayAnimation(null); RecBullet.Location = new Point(-300, 0); CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield); } } #endregion } } RecMiniBoss = new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height / 4 * 3); RecFusee = new Rectangle((int)Position.X, (int)Position.Y + 120, Texture.Width, Texture.Height / 4); FireAnimationPlayer.PlayAnimation(FireAnimation); }
public override void Update(GameTime gameTime) { RecUpdate = new Rectangle((int)camera.X - 400, (int)camera.Y - 249, 800, 600); GestionExterne.CameraControl(camera); GestionExterne.Menu(Menus, Joueur, camera, this); #region Gestion De la sauvegarde de la vie if (Life < SaveCheckPoint.Life) { Mort(); } else { SaveCheckPoint.Life = Life; } #endregion if (Joueur != null && !Joueur.Enabled) { //Sortie de MAP if (Joueur.Position.Y > MapLimitY) { Life--; } //Pics GestionExterne.UpdatePics(Pics, RecUpdate, Joueur, ref RingsPosses, ref Rings, ref Life, ref Shield); // Apparition des animaux CodeExclusifSonic.Animal(AnimalActif, NumAnimal, RAnimal, ref AnimationPlayer, ref PosAnimationPlayer, camera); //RhinoBots GestionExterne.UpdateRhino(ref Rhinobots, RecUpdate, gameTime, Joueur, ref RingsPosses, ref Life, ref Shield, ref PosAnimationPlayer , ref AnimalActif, ref AnimationPlayer, ref Rings, RringsX, RringsY); //Singes GestionExterne.UpdateSinge(ref Singes, RecUpdate, gameTime, Joueur, ref RingsPosses, ref Life, ref Shield, ref PosAnimationPlayer, ref AnimalActif, ref AnimationPlayer, ref Rings, RringsX, RringsY, ref TexturesObject); Joueur.Update(gameTime, Obj, null, null, Shield.num); #region Contrainte de boss if (Joueur.Position.X > 8000 && MiniBoss.Count == 1 && !camera.Locked) { camera.Locked = true; MediaPlayer.Play(RessourceSonic3.MinorBoss); } #endregion #region Camera Update if (Joueur.Position.X < 90) { //si PosX <90 camera X bloque mais continue d'updater en Y camera.Update(new Vector2(289, Joueur.Position.Y - 200)); //Si est a la limite de la map en X perso bloque if (Joueur.Position.X < -40) { Joueur.Position.X = -40; } } else if (!camera.Locked) { camera.Update(new Vector2(Joueur.Position.X + 200, Joueur.Position.Y - 200)); } else { //Ajustement de la camera pour l'entrée premier Boss if (camera.X < 8199) { camera.X += 2; } else //Lorsque L'Ajustement est fini camera rentre en mode fixe { camera.Update(new Vector2(8199, 544)); } //Limite du personnage losque la caméra est blocké if (Joueur.Position.X > camera.X + 350) { Joueur.Position.X = camera.X + 350; } if (Joueur.Position.X < camera.X - 350) { Joueur.Position.X = camera.X - 350; } } #endregion Shield.Update(Joueur.Position, Joueur.Rebound); #region MiniBoss for (int m = MiniBoss.Count - 1; m >= 0; m--) { if (MiniBoss[m].RecMiniBoss.Intersects(RecUpdate)) { MiniBoss[m].Update(gameTime, Joueur, ref RingsPosses, ref Life, ref Rings, RringsY, RringsX, ref Shield); } if (MiniBoss[m].Finish) { Flags.Add(new Flag(new Vector2(camera.X, MiniBoss[m].Position.Y - 200), NumPerso)); if (!Joueur.HasJump) { Flags[0].PosYMinimum = Joueur.Position.Y - 30; } else { Flags[0].PosYMinimum = Joueur.Position.Y + 27; } MiniBoss.RemoveAt(m); } } #endregion //Loops GestionExterne.UpdateLoop(Loops, RecUpdate, ref Joueur); //Pente GestionExterne.UpdatePente(Pentes, RecUpdate, ref Joueur); //CheckPoint GestionExterne.UpdateCheckPoint(CheckPoints, RecUpdate, Joueur); //Tremplin GestionExterne.UpdateTremplin(Tremplins, RecUpdate, Joueur); //Tele GestionExterne.UpdateTele(ref Teles, RecUpdate, gameTime, Joueur, ref Life, ref RingsPosses, ref Shield); //Rings GestionExterne.UpdateRing(ref RingsPosses, ref Life, RecUpdate, ref Rings, Joueur, gameTime); #region Update Back et HUD PosBack = new Vector2(camera.X - 400, camera.Y - 250); PosHUD = new Vector2(PosBack.X + 450, PosBack.Y + 250); Hud.Update(RingsPosses, Life, PosHUD); #endregion } else //Gestion de la mort { GestionExterne.AnimationMort(Menus, FinNiveau, ref APDead, Death, ref APDeadpos, APDeadPosInit, this); } #region Flags for (int F = Flags.Count - 1; F >= 0; F--) { Flags[F].Update(gameTime, Joueur); if (Flags[F].Texte) { if (NumPerso == 1) { TexteFin.Add(new TexteFinAnim(true, new Vector2(8100, 380), 1)); } else { TexteFin.Add(new TexteFinAnim(false, new Vector2(8100, 380), 1)); } Flags[F].Texte = false; MediaPlayer.IsRepeating = false; MediaPlayer.Play(RessourceSonic3.LevelComplete); Joueur.Enabled = true; FinNiveau = true; } if (Flags[F].Stop) { TexteFin[0].Update(gameTime); if (TexteFin[0].Delete) { Flags.RemoveAt(F); TexteFin.RemoveAt(0); Joueur.Enabled = false; FinNiveau = false; camera.Locked = false; /*AddScreen(new cTransition1(serviceProvider, GraphicsDeviceManager, NumPerso)); * RemoveScreen(this);*/ } } } #endregion }