示例#1
0
 public override void UpdateSort()
 {
     foreach (Unite u in Map.unites)
     {
         if (u != unite && Outil.DistanceUnites(unite, u) <= 500)
         {
             u.uniteAttacked = null;
             u.ObjectifListe.Clear();
             u.body.LinearVelocity = new Vector2((float)Math.Cos(Outil.AngleUnites(u, unite)), (float)Math.Sin(Outil.AngleUnites(u, unite))) * 100;
         }
     }
 }
示例#2
0
 public void Draw(SpriteBatch spriteBatch)
 {
     spriteBatch.Draw(Sprite, Position, null, Color.White, Outil.AngleUnites(Target, Tireur), new Vector2(Sprite.Width / 2, Sprite.Height / 2), 1f, SpriteEffects.None, 0);
 }
示例#3
0
 public void Update()
 {
     Position += new Vector2((float)Math.Cos(Outil.AngleUnites(Target, Tireur)), (float)-Math.Sin(Outil.AngleUnites(Tireur, Target))) * Vitesse;
     Timer--;
 }
示例#4
0
        public virtual void Attaquer(Unite unite)
        {
            float calcul = Outil.DistanceUnites(this, unite) - (26 * (unite.largeurPhysique + this.largeurPhysique) / 2);

            if (calcul >= Portee * Map.TailleTiles.X)
            {
                Suivre(unite);
            }
            else
            {
                if (CanAttack)
                {
                    if (!uniteAttacked.isInvisible)
                    {
                        OlduniteAttacked = uniteAttacked;
                        ObjectifListe.Clear();
                        body.LinearVelocity = Vector2.Zero;
                        // Fait regarder l'unité vers l'unité attaqué
                        if (Animation.Count == 0)
                        {
                            FlipH = false;
                            float angle = Outil.AngleUnites(this, unite);

                            if (angle >= Math.PI / 4 && angle <= 3 * Math.PI / 4)
                            {
                                direction = Direction.Haut;
                            }
                            else if (angle >= -3 * Math.PI / 4 && angle <= -Math.PI / 4)
                            {
                                direction = Direction.Bas;
                            }
                            else if (angle >= -Math.PI / 4 && angle <= Math.PI / 4)
                            {
                                direction = Direction.Gauche;
                                FlipH     = true;
                            }
                            else
                            {
                                direction = Direction.Droite;
                            }
                        }

                        if (Map.gametime.TotalGameTime.TotalMilliseconds - LastAttack > Vitesse_Attaque * 1000) // Si le cooldown est fini
                        {
                            LastAttack = (float)Map.gametime.TotalGameTime.TotalMilliseconds;                   // On met à jour "l'heure de la dernière attaque"
                            // projectile
                            if (IsRanged)                                                                       // Si l'unité attaque à distance, on creer un projectile, sinon on attaque direct
                            {
                                Projectile = new Projectile(this, uniteAttacked);
                            }
                            else
                            {
                                if (Dommages - unite.Defense <= 0) // Si armure > Dommages , degats = 1
                                {
                                    // On ne prend en compte les degats que si on est en local autrement ils sont effectués via le serveur

                                    unite.Vie -= 1;
                                }
                                else
                                {
                                    unite.Vie -= Dommages - unite.Defense;
                                }
                            }
                            // son
                            effetUniteAttaque.Play();

                            // Fait regarder l'unité vers l'unité attaqué et l'anime

                            AnimationCurrent = AnimationLimite;
                            FlipH            = false;
                            float angle = Outil.AngleUnites(this, unite);

                            if (angle >= Math.PI / 4 && angle <= 3 * Math.PI / 4)
                            {
                                direction = Direction.Haut;
                                Animation = packAnimation.AttaquerHaut();
                            }
                            else if (angle >= -3 * Math.PI / 4 && angle <= -Math.PI / 4)
                            {
                                direction = Direction.Bas;
                                Animation = packAnimation.AttaquerBas();
                            }
                            else if (angle >= -Math.PI / 4 && angle <= Math.PI / 4)
                            {
                                direction = Direction.Gauche;
                                FlipH     = true;
                                Animation = packAnimation.AttaquerDroite();
                            }
                            else
                            {
                                direction = Direction.Droite;
                                Animation = packAnimation.AttaquerDroite();
                            }
                        }
                    }
                }
            }
        }