예제 #1
0
 /// <summary>
 /// Diminuer les points de vie et changer la couleur de la texture quand
 /// l'Acteur est touché.
 /// </summary>
 /// <param name="degats">Les dommages infligés</param>
 /// <param name="ennemi">L'ennemi qui inflige les dégâts</param>
 public virtual void RecevoirDegats(int degats, Acteur ennemi)
 {
     pointsDeVie -= degats;
     touche       = true;
     this.couleur = Color.Red;
     cptFlash     = 0;
 }
예제 #2
0
 /// <summary>
 /// Diminuer les points de vie et changer la couleur de la texture quand
 /// le survivant est touché. Mets à jour l'affichage des points de vie à l'écran,
 /// fait passer le survivant en état Offensif et fait jouer le son de blessure.
 /// </summary>
 /// <param name="degats">Les dommages infligés</param>
 /// <param name="ennemi">L'ennemi qui inflige les dégâts</param>
 public override void RecevoirDegats(int degats, Acteur ennemi)
 {
     base.RecevoirDegats(degats, ennemi);
     TexteVie        = pointsDeVie + "/" + PointsDeVieMax;
     CiblePersonnage = ennemi;
     etat            = new EtatOffensif(this);
     SymboleEtat     = "O";
     SonBlesse.Play();
 }
예제 #3
0
 public Acteur(Texture2D image, Vector2 position, float rotation, Vector2 limiteHautGauche, Vector2 limiteBasDroit, int pointsdeVie,
               float vitesse, int force, Acteur cible, Camp campAdverse, SpriteBatch batch, SpriteFont font) : base(image, position, batch, font)
 {
     this.rotation         = rotation;
     this.centrageDuPivot  = new Vector2(image.Width / 2, image.Height / 2);
     this.boiteCollision   = new BoundingBox(new Vector3(position.X - centrageDuPivot.X, position.Y - centrageDuPivot.Y, 0), new Vector3(position.X + centrageDuPivot.X, position.Y + centrageDuPivot.Y, 0));
     this.sphereCollision  = new BoundingSphere(new Vector3(position.X, position.Y, 0), centrageDuPivot.X);
     this.limiteHautGauche = limiteHautGauche + centrageDuPivot;
     this.limiteBasDroit   = limiteBasDroit - centrageDuPivot;
     this.pointsDeVie      = pointsdeVie;
     this.vitesse          = vitesse;
     this.force            = force;
     this.couleur          = Color.White;
     this.cible            = cible;
     this.CampAdverse      = campAdverse;
     prochaineAttaque      = rythmeAttaque;
     touche = false;
 }
예제 #4
0
        public virtual void Update()
        {
            prochaineAttaque--;
            DistanceAvecCampSurvivants = CalculerDistance(position, CampAdverse.Cible);


            if (CiblePersonnage != null)
            {
                // Si le zombie a tué sa cible ou ne la détecte plus, il continue à se diriger vers le camp adverse
                if (CiblePersonnage.PointsdeVie <= 0 || CalculerDistance(position, CiblePersonnage.Position) >= rayonDetection)
                {
                    etat = new EtatNormal_Z(this);
                }
            }
            else
            {
                // Si le zombie n'a pas de cible, il essaie d'en trouver une nouvelle
                Acteur nouvelleCible = TrouverEnnemisAProximite();
                if (nouvelleCible != null)
                {
                    CiblePersonnage = nouvelleCible;
                    etat            = new EtatOffensif_Z(this);
                }
            }

            // Si le zombie a été touché, il clignote rouge
            if (touche)
            {
                cptFlash++;
            }
            if (cptFlash >= tempsFlashRouge)
            {
                cptFlash = 0;
                couleur  = Color.White;
            }


            etat.OnUpdate();
        }
예제 #5
0
 public Zombie(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_Z(this);
 }
예제 #6
0
 public override void RecevoirDegats(int degats, Acteur ennemi)
 {
     base.RecevoirDegats(degats, this);
     TexteVie = pointsDeVie + "/" + pointsDeVieMax;
 }
예제 #7
0
 public Coureur(Vector2 positionDepart, float rotation, Vector2 limiteHautGauche, Vector2 limiteBasDroite, Acteur cible, Camp campAdverse, SpriteBatch batch, SpriteFont font) :
     base(TEXTURE, positionDepart, rotation, limiteHautGauche, limiteBasDroite, VIE_MAX_COUREUR, VITESSE_COUREUR, FORCE_COUREUR, cible, campAdverse, batch, font)
 {
     rythmeAttaque  = RYTHME_ATTAQUE_COUREUR;
     TexteVie       = VIE_MAX_COUREUR + "/" + VIE_MAX_COUREUR;
     pointsDeVieMax = VIE_MAX_COUREUR;
     rayonDetection = RAYON_DETECTION_COUREUR;
     rayonAttaque   = RAYON_ATTAQUE_COUREUR;
 }
예제 #8
0
 public static Zombie CreerZombie(typeZombie zombie, Vector2 positionDepart, float rotation, Vector2 limiteHautGauche, Vector2 limiteBasDroite, Acteur cible, Camp campAdverse, SpriteBatch batch, SpriteFont font)
 {
     if (zombie == typeZombie.Coureur)
     {
         return(new Coureur(positionDepart, rotation, limiteHautGauche, limiteBasDroite, cible, campAdverse, batch, font));
     }
     else
     {
         return(new Tank(positionDepart, rotation, limiteHautGauche, limiteBasDroite, cible, campAdverse, batch, font));
     }
 }
 public static Survivant CreerSurvivant(typeSurvivant type, Vector2 positionDepart, float rotation, Vector2 limiteHautGauche, Vector2 limiteBasDroite, Acteur cible, Camp campAdverse, SpriteBatch batch, SpriteFont font)
 {
     if (type == typeSurvivant.Sniper)
     {
         return(new Sniper(positionDepart, rotation, limiteHautGauche, limiteBasDroite, cible, campAdverse, batch, font));
     }
     else if (type == typeSurvivant.Escrimeur)
     {
         return(new Escrimeur(positionDepart, rotation, limiteHautGauche, limiteBasDroite, cible, campAdverse, batch, font));
     }
     else
     {
         return(new Soldat(positionDepart, rotation, limiteHautGauche, limiteBasDroite, cible, campAdverse, batch, font));
     }
 }
예제 #10
0
 public Sniper(Vector2 positionDepart, float rotation, Vector2 limiteHautGauche, Vector2 limiteBasDroite, Acteur cible, Camp campAdverse, SpriteBatch batch, SpriteFont font) :
     base(TEXTURE, positionDepart, rotation, limiteHautGauche, limiteBasDroite, VIE_MAX_SNIPER, VITESSE_SNIPER, FORCE_SNIPER, cible, campAdverse, batch, font)
 {
     rythmeAttaque       = RYTHME_ATTAQUE_SNIPER;
     rayonAttaque        = RAYON_ATTAQUE_SNIPER;
     rayonDetection      = rayonAttaque;
     PointsDeVieMax      = VIE_MAX_SNIPER;
     TexteVie            = VIE_MAX_SNIPER + "/" + VIE_MAX_SNIPER;
     this.positionDepart = positionDepart;
 }