public bool GrabControl(Skill skill) { if (_totalControl && TotalControl == skill) { return(true); } if (_totalControl && TotalControl.GetPriority() < skill.GetPriority()) { TotalControl.TryTerminate(_context); TotalControl = skill; _cancelUpdate = true; return(true); } // ReSharper disable once LoopCanBeConvertedToQuery foreach (var currentSkill in Skills) { if (skill != currentSkill && currentSkill.NeedsControl() && currentSkill.GetEnabled(_context.GetOrbwalker().ActiveMode) && currentSkill.GetPriority() >= skill.GetPriority()) { return(false); } } _totalControl = true; TotalControl = skill; _cancelUpdate = true; return(true); }
/// <summary> /// override in sub class to add champion combo logic. for example Garen has a fixed combo, but wants to do W not in order, but when he gets damage. /// In this example you would override Update and have a seperate logic for W instead of adding it to the skill routines. /// </summary> /// <param name="context"></param> public virtual void Update(IMainContext context) { Target = TargetSelector.GetTarget(TargetRange, DamageType); IgniteManager.Update(context, Target); Skills.Sort(); //Todo: check if expensive. Will do that event-based otherwise if (_totalControl) { TotalControl.Update(_orbwalker.ActiveMode, context, this, Target); if (!TotalControl.NeedsControl()) { TotalControl.TryTerminate(_context); _totalControl = false; Update(context); return; } // ReSharper disable once LoopCanBeConvertedToQuery foreach (var skill in Skills.Where(item => item.GetPriority() > TotalControl.GetPriority())) { skill.Update(_orbwalker.ActiveMode, context, this, Target); } } else { foreach (var item in Skills) { if (_cancelUpdate) { _cancelUpdate = false; return; } item.Update(_orbwalker.ActiveMode, context, this, Target); } } }