示例#1
0
 public SimpleObjectPool(PoolManager poolManager, int capacity, IPooledObjectInstantiator <T> objectInstantiator)
 {
     _capacity           = capacity;
     _poolManager        = poolManager;
     _objects            = new Queue <T>(capacity);
     _objectInstantiator = objectInstantiator ?? throw new ArgumentNullException("objectInstantiator");
 }
示例#2
0
        public Pool AddPool(object id, GameObject original, IPooledObjectInstantiator instantiator = null, int maxPrewarmCount = DEFAULT_PREWARM_COUNT, bool isPersistent = false)
        {
            Pool existingPool = GetPool(id);

            if (existingPool != null && !existingPool.IsValid())
            {
                RemovePool(id);
            }

            if (ContainsPool(id))
            {
                if (Pool.FindPoolInGameObject(original, out Pool poolAlreadyExists))
                {
                    Debug.LogWarning("WARNING: Object is already being contained in an existing pool!. Returning it.");
                    poolAlreadyExists.persistent = isPersistent;
                    return(poolAlreadyExists);
                }

                Pool result = GetPool(id);

                result.AddToPool(original);
                result.persistent = isPersistent;

                return(result);
            }

            if (!enablePrewarm)
            {
                maxPrewarmCount = 0;
            }

            Pool pool = new Pool(id.ToString(), maxPrewarmCount);

            pool.id         = id;
            pool.original   = original;
            pool.persistent = isPersistent;

            if (USE_POOL_CONTAINERS)
            {
                pool.container.transform.parent = container.transform;
                pool.original.name = "Original";
                pool.original.transform.SetParent(pool.container.transform, true);
            }
            else
            {
                pool.original.transform.SetParent(null, true);
            }

            pool.original.SetActive(false);

            pool.instantiator = instantiator;

            pools.Add(id, pool);

            return(pool);
        }
 public AssetLibrary_Poolable(IPooledObjectInstantiator instantiator)
 {
     this.instantiator = instantiator;
 }
示例#4
0
 public PoolingOptions(IPooledObjectInstantiator <T> objectInstantiator, int initialCapacity = 100)
 {
     InitialCapacity             = initialCapacity;
     ServingCapabilityBorderline = 0.8f;
     Instantiator = objectInstantiator ?? throw new ArgumentNullException(nameof(objectInstantiator));
 }
示例#5
0
 public PoolingOptions(IPooledObjectInstantiator <T> objectInstantiator) : this(objectInstantiator, 100, 0.8f)
 {
 }