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
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;
|
|
}
|
|
}
|