Esempio n. 1
0
 public GOAPNodePool(int _count)
 {
     for (int i = 0; i < _count; i++)
     {
         IdleList.Add(CreateNewUnit());
     }
 }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
 public override void Dispose()
 {
     foreach (var unit in IdleList)
     {
         GameObject.Destroy(unit);
     }
     IdleList.Clear();
 }
Esempio n. 4
0
 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());
     }
 }
Esempio n. 5
0
 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);
     }
 }
Esempio n. 6
0
 /// <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);
     }
 }