private IEnumerator ExecuteDelay(AbilityContext ctx) { yield return(new WaitForLogicSeconds(m_Time)); m_TimeEnumrator = null; ExecuteCommands(ctx); }
public AbilityRoot(float keepTime) : base(EmptyList) { this.keepTime = keepTime; m_Context = new AbilityContext { modifiers = new Dictionary <string, ModifierRoot>(), triggers = new Dictionary <AbilityEventTrigger, AbilityContext.TriggerEvent>() }; m_AbilityEvents = new List <IAbilityExecutor>(); }
public override void Execute(AbilityContext ctx) { m_Context = ctx; if (ctx.triggers.ContainsKey(m_TriggerType)) { ctx.triggers[m_TriggerType] += ExecuteImpl; } else { ctx.triggers.Add(m_TriggerType, ExecuteImpl); } }
public override void Kill() { if (m_AutoFinish != null) { Game.Instance.coroutineManager.StopLogic(m_AutoFinish); m_AutoFinish = null; } foreach (var abilityEvent in m_AbilityEvents) { abilityEvent.Kill(); } m_Context = null; base.Kill(); }
protected void ExecuteCommands(AbilityContext ctx) { if (commands != null) { var cmdCtx = new AbilityCommandContext(); cmdCtx.caster = ctx.caster; cmdCtx.modifiers = ctx.modifiers; cmdCtx.triggers = ctx.triggers; foreach (var cmd in commands) { foreach (var target in ctx.targets) { cmdCtx.target = target; cmd.Execute(cmdCtx); } } } }
public abstract void Execute(AbilityContext ctx);
public override void Kill() { m_Context.triggers[m_TriggerType] -= ExecuteImpl; m_Context = null; base.Kill(); }
public override void Execute(AbilityContext ctx) { m_TimeEnumrator = ExecuteDelay(ctx); Game.Instance.coroutineManager.StartLogic(m_TimeEnumrator); }
public override void Execute(AbilityContext ctx) { ExecuteCommands(ctx); }