public GOAPNodePool(int _count) { for (int i = 0; i < _count; i++) { IdleList.Add(CreateNewUnit()); } }
/// <summary> 生成 </summary> /// 重写以使用Object的判空 public new T Spawn() { T unit = null; while (IdleList.Count > 0 && unit == null) { unit = IdleList[0]; IdleList.RemoveAt(0); } if (unit == null) { unit = CreateNewUnit(); } WorkList.Add(unit); OnBeforeSpawn(unit); IPoolable recyclable; if ((recyclable = unit as IPoolable) != null) { recyclable.OnSpawned(); } OnAfterSpawn(unit); return(unit); }
public override void Dispose() { foreach (var unit in IdleList) { GameObject.Destroy(unit); } IdleList.Clear(); }
protected override void OnAfterRecycle(GameObject _unit) { base.OnAfterRecycle(_unit); _unit.SetActive(false); if (group) { _unit.transform.SetParent(GroupParent); } if (IdleList.Count > maxCount) { GameObject.Destroy(IdleList.First()); IdleList.Remove(IdleList.First()); } }
public virtual void InitCount() { if (IdleList.Count + WorkList.Count > maxCount) { return; } for (int i = 0; i < maxCount; i++) { GameObject unit = CreateNewUnit(); unit.SetActive(false); unit.transform.SetParent(groupParent); IdleList.Add(unit); } }
/// <summary> 回收 </summary> public new void Recycle(T _unit) { WorkList.Remove(_unit); if (_unit != null) { IdleList.Add(_unit); OnBeforeRecycle(_unit); IPoolable recyclable; if ((recyclable = _unit as IPoolable) != null) { recyclable.OnRecycled(); } OnAfterRecycle(_unit); } }