NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/GlobalBuffCacher.cs

70 lines
2.0 KiB
C#

using System.Collections.Generic;
using Gameplay.Common;
using Gameplay.Unit;
using Gameplay.Unit.Data;
namespace Gameplay.Buff
{
public class GlobalBuffCacher
{
public int buffId;
public GameUnit creator;
public List<uint> _addUnitIds;
public GlobalBuffCacher(int buffId, GameUnit creator)
{
this.creator = creator;
this.buffId = buffId;
_addUnitIds = new List<uint>();
}
public void AddUnit(GameUnit unit)
{
var unitId = unit.GetID();
if (_addUnitIds.Contains(unitId))
{
return;
}
_addUnitIds.Add(unitId);
var createBuff = BuffManager.instance.CreateBuffById(creator, buffId);
BuffManager.instance.AddBuff(unit, createBuff);
}
public void RemoveUnit(GameUnit unit)
{
var unitId = unit.GetID();
var index = _addUnitIds.IndexOf(unitId);
if (index < 0) return;
_addUnitIds.RemoveAt(index);
unit.buffManager.RemoveBuffById(buffId);
}
public void Init()
{
var allUnits = GameUnitManager.instance.infightUnits;
for (int i = 0; i < allUnits.count; i++)
{
var unit = allUnits.GetByIndex(i);
if (unit.gameunitType != EGameUnitType.Character) continue;
if (unit.statusData.isDead) continue;
if (unit.commonData.troopId != creator.commonData.troopId) continue;
AddUnit(unit);
}
}
public void Dispose()
{
for (int i = 0; i < _addUnitIds.Count; i++)
{
var unitId = _addUnitIds[i];
var getUnit = GameUnitManager.instance.infightUnits.Search(unitId);
if (getUnit == null) continue;
if (getUnit.statusData.isDead) continue;
getUnit.buffManager.RemoveBuffById(buffId);
}
}
}
}