public void RemoveEffect() { if (_lastDurationRoutine != null) { _target.StopCoroutine(_lastDurationRoutine); } EffectSO.Remove(_target, this); OnDurationExpire.Invoke(); }
private IEnumerator DurationRoutine() { while (_durationTimer > 0) { EffectSO.Tick(_target); _durationTimer -= _secondsAmountOverTick; OnDurationTick.Invoke(_durationTimer); yield return(_waitForNextTick); } RemoveEffect(); }
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); } }
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); }