using UnityEngine; using IVDataFormat; using System.Collections.Generic; using System; public class GamePlayBuffMgr : MonoSingleton { List buffs = new(); public event Action OnChanged; private void Update() { for (int i = 0; i < buffs.Count;) { var buff = buffs[i]; if (!buff.UpdateDuration(Time.fixedDeltaTime)) { buffs.RemoveAt(i); OnChanged?.Invoke(buff, false); } else { i++; } } } public void AddBuffs(IReadOnlyList toAdd) { foreach (var buff in toAdd) { if(!buffs.Contains(buff)) { buff.ResetDuration(); buffs.Add(buff); OnChanged?.Invoke(buff, true); } } } public void AddBuffs(params BuffData[] buffs) => AddBuffs(buffs); public void RemoveBuffs(IReadOnlyList toRemove) { foreach (var buff in toRemove) { if (buffs.Remove(buff)) OnChanged?.Invoke(buff, false); } } public void RemoveBuffs(params BuffData[] buffs) => RemoveBuffs(buffs); public IReadOnlyList GetBuffs(eEffectType key, object subKey = null) => buffs.FindAll(b => b.HasEffect(key, subKey)); public IReadOnlyList GetValues(eEffectType key, object subKey = null) { List values = new(); foreach (var buff in buffs) { if (buff.TryGetEffect(key, subKey, out var effect)) values.Add(effect.Value); } return values; } }