69 lines
2.0 KiB
C#
69 lines
2.0 KiB
C#
using System.Collections.Generic;
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|