public void RemoveStatusEffect(string name) { int index = _findStatusEffectIndexByKey(name); if (index == -1) { return; } if (_started == true && _statuses.Count == 1) { _started = false; CancelInvoke(); } foreach (StatusEffectType statusEffectType in _statuses[index].StatusEffectData.statusEffectTypes) { StatusEffectFactory.GetStatusEffect(statusEffectType).Unapply(_statuses[index]); } _currentStatuses.Remove(name); _statuses.RemoveAt(index); OnRemoveStatusEffectEvent?.Invoke(name); }
public void AddStatusEffect(Status status) { string key = status.StatusEffectData.Name; if (_currentStatuses.Contains(key)) { int index = _findStatusEffectIndexByKey(key); if (status.StatusEffectData.Reset == true) { _statuses[index].ResetDuration(); } else { _statuses[index].IncreaseDuration(status.StatusEffectData.Duration); } if (status.StatusEffectData.CanStack == true) { _statuses[index].IncreaseStack(); } OnUpdateStatusEffectEvent?.Invoke(_statuses[index]); } else { _currentStatuses.Add(key); status.ResetDuration(); _statuses.Add(status); foreach (StatusEffectType statusEffectType in status.StatusEffectData.statusEffectTypes) { StatusEffectFactory.GetStatusEffect(statusEffectType).Apply(status); } if (status.StatusEffectData.Hidden == false) { Debug.Log("Here!"); OnAddStatusEffectEvent?.Invoke(status); } } if (_started == false) { _started = true; InvokeRepeating(nameof(Routine), 1f, 1f); } }