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); } }
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(); }
public virtual void StopAttackTarget() { if (IsAttacking) { CurrentAutoattack.Cancel(); Unit.OnTargetUnset(CurrentAutoattack.Target); } }
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); }); } }