You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

67 lines
1.7 KiB

using UnityEngine;
using IVDataFormat;
using System.Collections.Generic;
using System;
public class GamePlayBuffMgr : MonoSingleton<GamePlayBuffMgr>
{
List<BuffData> buffs = new();
public event Action<BuffData, bool> 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<BuffData> 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<BuffData> toRemove)
{
foreach (var buff in toRemove)
{
if (buffs.Remove(buff))
OnChanged?.Invoke(buff, false);
}
}
public void RemoveBuffs(params BuffData[] buffs) => RemoveBuffs(buffs);
public IReadOnlyList<BuffData> GetBuffs(eEffectType key, object subKey = null) => buffs.FindAll(b => b.HasEffect(key, subKey));
public IReadOnlyList<ValueModifier> GetValues(eEffectType key, object subKey = null)
{
List<ValueModifier> values = new();
foreach (var buff in buffs)
{
if (buff.TryGetEffect(key, subKey, out var effect))
values.Add(effect.Value);
}
return values;
}
}