Esempio n. 1
0
        /// <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);
                }
            }
        }
Esempio n. 2
0
    /// <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);
                }
            }
        }