public override void AttaquerZombie() { // Attaquer la cible si elle est dans le rayon d'attaque if (CalculerDistance(position, CiblePersonnage.Position) <= rayonAttaque) { if (prochaineAttaque <= 0) { CiblePersonnage.RecevoirDegats(force, this); prochaineAttaque = rythmeAttaque; SonFusil.Play(); } AjusterRotation(CiblePersonnage.Position); } // Sinon, si le soldat est en état d'Alerte, se diriger vers la cible quand même else if (Alerte) { MouvementVersCible(CiblePersonnage.Position); } // Revenir à l'état Normal si aucun zombie à proximité et qu'il n'y a pas d'alerte else { etat = new EtatNormal(this); SymboleEtat = "N"; CiblePersonnage = null; } }
public override void Update() { prochaineAttaque--; // Priorité no2: Se replier quand il y a trop de zombies près de la base if (Game1.NbZombiesCampSurvivants >= 5 && !(etat is EtatRepli)) { etat = new EtatRepli(this); } else if (CiblePersonnage == null && (etat is EtatNormal)) { CiblePersonnage = TrouverEnnemiPlusProche(position); // Attaquer une cible if (CiblePersonnage != null) { etat = new EtatOffensif(this); } // Par défaut: Attaquer le camp ennemi else { etat = new EtatNormal(this); } } // Priorité no1: Aller se cacher si <25% de point de vie if (pointsDeVie <= VIE_MAX_ESCRIMEUR / 4 && !(etat is EtatCache)) { //TrouverCouvertPlusProche(); //CiblePersonnage = null; etat = new EtatCache(this); } base.Update(); etat.OnUpdate(); }
public Survivant(Texture2D image, Vector2 positionDepart, float rotation, Vector2 limiteHautGauche, Vector2 limiteBasDroite, int vie, float vitesse, int force, Acteur cible, Camp campAdverse, SpriteBatch batch, SpriteFont font) : base(image, positionDepart, rotation, limiteHautGauche, limiteBasDroite, vie, vitesse, force, cible, campAdverse, batch, font) { etat = new EtatNormal(this); Alerte = false; }