internal virtual EffectOverTimeReport Timeout() { EffectOverTimeInfos effectInfos = new EffectOverTimeInfos(); effectInfos.effectOverTime = this; effectInfos.trigger = EEffectOverTimeTrigger.TimeOut; List <AEffectReport> effectsReport = new List <AEffectReport>(); foreach (EffectWrapper each in effects) { if (each.trigger.OnTimeOut) { effectInfos.doesStack = each.doesStack; effectInfos.perStackModifier = each.perStackModifier; effectInfos.isRevertOnDestroy = each.isRevertOnDestroy; each.effect.effectInfos = effectInfos; effectsReport.Add(each.effect.Apply(target)); } } EffectOverTimeReport report = new EffectOverTimeReport(); report.effectInfos = effectInfos; report.target = target; report.attackInfos = attackInfos; report.effects = effectsReport; report.effect = conf; report.trigger = EEffectOverTimeTrigger.TimeOut; return(report); }
internal EffectOverTimeReport TryApplyEffect(EffectOverTime a_effect) { EffectOverTimeReport report; if (a_effect.conf.stackMethod == EUnitEffectStackMethod.OnePerUnit) { EffectOverTime previousEffect = GetEffectOfType(a_effect); if (previousEffect != null) { ReplaceEffect(previousEffect, a_effect); report = a_effect.Refresh(); } else { AddNewEffect(a_effect); report = a_effect.Apply(); } } else { report = new EffectOverTimeReport(); report.successfullyApplied = false; } return(report); }
internal virtual EffectOverTimeReport Refresh() { timeElapsedSinceRefresh = 0f; _tickNeeded = 0; _currentStackCount = Mathf.Clamp(_currentStackCount + 1, 0, conf.maxStack); EffectOverTimeInfos effectInfos = new EffectOverTimeInfos(); effectInfos.effectOverTime = this; effectInfos.trigger = EEffectOverTimeTrigger.Refresh; List <AEffectReport> effectsReport = new List <AEffectReport>(); foreach (EffectWrapper each in effects) { if (each.trigger.OnRefresh) { effectInfos.doesStack = each.doesStack; effectInfos.perStackModifier = each.perStackModifier; effectInfos.isRevertOnDestroy = each.isRevertOnDestroy; each.effect.effectInfos = effectInfos; effectsReport.Add(each.effect.Apply(target)); } } EffectOverTimeReport report = new EffectOverTimeReport(); report.effectInfos = effectInfos; report.target = target; report.attackInfos = attackInfos; report.effects = effectsReport; report.effect = conf; report.trigger = EEffectOverTimeTrigger.Refresh; return(report); }
internal override AEffectReport Apply(Unit a_target) { EffectOverTimeReport report = a_target.effect.TryApplyEffect(effectOverTime); return(report); }