Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    internal override AEffectReport Apply(Unit a_target)
    {
        EffectOverTimeReport report = a_target.effect.TryApplyEffect(effectOverTime);

        return(report);
    }