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 _addUnitIds; public GlobalBuffCacher(int buffId, GameUnit creator) { this.creator = creator; this.buffId = buffId; _addUnitIds = new List(); } 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); } } } }