예제 #1
0
 public void newLevel()
 {
     effetUniteLevelUp.Play();
     Level++;
     if ((int)(defense * byLevelAdd) == defense)
     {
         defense++;
     }
     else
     {
         defense = (int)(defense * byLevelAdd);
     }
     if ((int)(defenseMagique * byLevelAdd) == defenseMagique)
     {
         defenseMagique++;
     }
     else
     {
         defenseMagique = (int)(defenseMagique * byLevelAdd);
     }
     dommages  = (int)(dommages * byLevelAdd);
     puissance = (int)(puissance * byLevelAdd);
     vitesse   = vitesse * byLevelAdd;
     manaMax   = (int)(manaMax * byLevelAdd);
     vieMax    = (int)(vieMax * byLevelAdd);
     manaRegen = (int)(manaRegen / byLevelAdd);
 }
예제 #2
0
 public virtual void Begin(Vector2 p, Unite unit)
 {
     LastCast    = (float)Map.gametime.TotalGameTime.TotalMilliseconds;
     Activated   = true;
     TickCurrent = 0;
     if (sonSort != null)
     {
         sonSort.Play();
     }
     unite.Mana -= CoutMana;
     Point       = p;
     UniteCible  = unit;
 }
예제 #3
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();
                            }
                        }
                    }
                }
            }
        }
예제 #4
0
        protected virtual void TestMort(List <Effet> effets) // aussi la mana
        {
            if (Vie <= 0 && !Mort)
            {
                foreach (Joueur j in PackMap.joueurs)
                {
                    Vie  = 0;
                    Mort = true;
                    if (j.champion.XP + (XPUnite / PackMap.joueurs.Count) < j.champion.Level * 1000)
                    {
                        j.champion.XP += XPUnite / PackMap.joueurs.Count;
                    }
                    else
                    {
                        j.champion.XP = j.champion.XP + (XPUnite / PackMap.joueurs.Count) - j.champion.Level * 1000;
                        j.champion.newLevel();
                    }
                }
                effetUniteDeath.Play();
                effetUniteAttaque.Dispose();
                effets.Add(new Effet(Sprite, ConvertUnits.ToDisplayUnits(body.Position), packAnimation.Mort(this), Tiles, 1));
                Map.world.RemoveBody(body);
                Drop();
                // Reseau
                bool plein = true;
                for (int i = 0; i < Serveur.LastDead.Length; i++)
                {
                    if (Serveur.LastDead[i] == 0)
                    {
                        plein = false;
                        break;
                    }
                }
                if (plein)
                {
                    for (int j = 0; j < Serveur.LastDead.Length; j++)
                    {
                        Serveur.LastDead[j] = 0;
                    }
                }

                for (int i = 0; i < Serveur.LastDead.Length; i++)
                {
                    if (Serveur.LastDead[i] == 0)
                    {
                        Serveur.LastDead[i] = id;
                        break;
                    }
                }
                // Interface De GameOver pour le joueur
                if (isAChamp)                             // Si un champion se fait tuer
                {
                    foreach (Joueur j in PackMap.joueurs) // On regarde si c'est le joueur local
                    {
                        j.Interface.Lost = true;
                    }
                }
            }
            // TEST MANA
            if (Mana < 0)
            {
                Mana = 0;
            }
        }