/// <summary> /// Recycle specified instance to pool. /// </summary> /// <param name="obj">Instance to recycle.</param> /// <summary> /// Recycle specified instance to pool. /// </summary> /// <param name="obj">Instance to recycle.</param> /// <param name="checkForDoubleRecycle">Check if instance already was recycled. Use false for performance boost.</param> public void Recycle(IPoolObject obj, bool checkForDoubleRecycle = true) { if ((object)obj != null) { #if UNITY_EDITOR if ((object)obj.PoolContainer != (object)this) { Debug.LogWarning("Invalid obj to recycle", (UnityEngine.Object)obj); return; } #endif var tr = obj.PoolTransform; if ((object)tr != null) { tr.gameObject.SetActive(false); if ((object)tr.parent != (object)_itemsRoot) { tr.SetParent(_itemsRoot, true); } } if (checkForDoubleRecycle && _store.Contains(obj)) { #if UNITY_EDITOR Debug.LogWarning("Object already was recycled", (UnityEngine.Object)obj); #endif } else { _store.Push(obj); } } }
/// <summary> /// Recycles the given item and places it back in the pool for future reuse. /// </summary> /// <param name="item">The item to be recycled.</param> public void Recycle(T item) { Debug.Assert(item != null, "ResourcePool.Recycle(item) should not be called with null."); // Reset item if necessary. if (_uninitialize != null) _uninitialize(item); if (Enabled) { lock (_stack) { Debug.Assert(!_stack.Contains(item), "Cannot recycle item. Item is already in the resource pool."); _stack.Push(item); } } }
/// <summary> /// Recycle specified instance to pool. /// </summary> /// <param name="obj">Instance to recycle.</param> public void Recycle(IPoolObject obj) { if ((object)obj != null) { #if UNITY_EDITOR if ((object)obj.PoolContainer != (object)this) { Debug.LogWarning("Invalid obj to recycle", (UnityEngine.Object)obj); return; } #endif var tr = obj.PoolTransform; if ((object)tr != null) { tr.gameObject.SetActive(false); } if (!_store.Contains(obj)) { _store.Push(obj); } } }