Ejemplo n.º 1
0
    public void RemoveEffect()
    {
        if (_lastDurationRoutine != null)
        {
            _target.StopCoroutine(_lastDurationRoutine);
        }

        EffectSO.Remove(_target, this);
        OnDurationExpire.Invoke();
    }
Ejemplo n.º 2
0
    private IEnumerator DurationRoutine()
    {
        while (_durationTimer > 0)
        {
            EffectSO.Tick(_target);

            _durationTimer -= _secondsAmountOverTick;
            OnDurationTick.Invoke(_durationTimer);

            yield return(_waitForNextTick);
        }

        RemoveEffect();
    }
Ejemplo n.º 3
0
    public Effect(EffectSO effectSO, Character target, object effectSource)
    {
        EffectSO     = effectSO;
        EffectSource = effectSource;
        _target      = target;

        if (effectSO.ChargesAmount > 0)
        {
            _chargesAmount = effectSO.ChargesAmount;
        }

        if (effectSO.Duration > 0)
        {
            _durationTimer         = effectSO.Duration;
            _secondsAmountOverTick = effectSO.SecondsAmountOverTick;
            _waitForNextTick       = new WaitForSeconds(_secondsAmountOverTick);
        }
    }
Ejemplo n.º 4
0
    public bool TryRestartAilment(Character target, EffectSO effect)
    {
        var ailments = target.Effects.AilmentEffects;

        if (ailments.ContainsKey(this))
        {
            Effect currentEffect = ailments[this];

            if (currentEffect.EffectSO == effect)
            {
                currentEffect.ResetDuration();
                return(true);
            }
            else
            {
                currentEffect.RemoveEffect();
                return(false);
            }
        }

        return(false);
    }