Esempio n. 1
0
        public virtual void Update(float deltaTime)
        {
            if (Unit.Alive == false)
            {
                if (IsAttacking)
                {
                    DestroyAutoattack();
                }

                return;
            }
            if (Auto && Unit.IsMoving == false && !IsAttacking && !Unit.SpellManager.IsChanneling())
            {
                var unitsInRange = GetUnitsInAttackRange();
                if (unitsInRange.Count > 0)
                {
                    BeginAttackTarget(unitsInRange.Last().Key); // the closest one is last
                }
            }

            if (CurrentAutoattack != null && CurrentAutoattack.Finished == false)
            {
                CurrentAutoattack.Update(deltaTime);
            }
        }
Esempio n. 2
0
        public virtual void NextAutoattack()
        {
            bool critical = CurrentAutoattack.Target.Stats.IsCriticalImmune ? false : Unit.Stats.CriticalStrike();

            CurrentAutoattack = CreateBasicAttack(Unit, CurrentAutoattack.Target, critical, false, DetermineNextSlot(critical));
            CurrentAutoattack.Notify();
        }
Esempio n. 3
0
 public virtual void StopAttackTarget()
 {
     if (IsAttacking)
     {
         CurrentAutoattack.Cancel();
         Unit.OnTargetUnset(CurrentAutoattack.Target);
     }
 }
Esempio n. 4
0
        public virtual void BeginAttackTarget(AttackableUnit target)
        {
            if (IsAttacking && target != CurrentAutoattack.Target)                                              // Si la cible que l'on attaque est differente de target
            {
                StopAttackTarget();                                                                             // alors on cancel l'anim quoi qu'il arrive

                if (CurrentAutoattack.Casted)                                                                   // Si l'attaque précédante a touchée
                {
                    CurrentAutoattack.OnBasicAttackEnded = new Func <BasicAttack, bool>((BasicAttack attack) => // a la fin du delai l'attaque, on changera de cible (pas de cancel d'anim sur l'anim de l'auto).
                    {
                        DestroyAutoattack();
                        Unit.TryBasicAttack(target);
                        return(true);
                    });
                }
                else // Sinon on peut directment passer a la nouvelle auto
                {
                    DestroyAutoattack();
                    Unit.TryBasicAttack(target);
                }
            }
            if (IsAttacking == false) // osef, facile
            {
                bool critical = target.Stats.IsCriticalImmune ? false : Unit.Stats.CriticalStrike();
                CurrentAutoattack = CreateBasicAttack(Unit, target, critical);
                CurrentAutoattack.Notify();
                Unit.OnTargetSet(target);
            }
            else if (IsAttacking == true && CurrentAutoattack.Casted && target == CurrentAutoattack.Target)
            { // Si l'on attaquait la cible, que l'ancienne auto a été cancel mais qu'elle a touchée, et que la cible n'a pas changée
                CurrentAutoattack.OnBasicAttackEnded = new Func <BasicAttack, bool>((BasicAttack attack) =>
                {
                    // Unit.AttackManager.StopAttackTarget();
                    Unit.AttackManager.DestroyAutoattack();
                    Unit.TryBasicAttack(target);

                    return(true);
                });
            }
        }