private Pool <T> CreatePool() { var pooledObjects = new List <Poolable <T> >(size); GetPrewarmedObjects(pooledObjects); var helper = new PoolHelper <T>(pooledObjects); StateRestorer = StateRestorer ?? new DefaultStateRestorer <T>(); var poolableFactory = PoolableFactory ?? new PoolableFactory <T>(Prefab, transform, StateRestorer); expander = new PoolExpander <T>(pooledObjects, expandAmount, instantiatedPerFrame, poolableFactory); var pool = new Pool <T>(pooledObjects, helper, expander, StateRestorer); poolableFactory.Pool = pool; foreach (var pooled in pooledObjects) { pooled.Pool = pool; } int toInstantiate = size - pooledObjects.Count; if (toInstantiate > 0) { expander.Expand(toInstantiate); } return(pool); }
public Poolable <T> Retrieve() { if (pooledObjects.Count == 0) { expander.Expand(); } var poolable = helper.Retrieve(); Assert.IsNotNull(poolable); stateResotrer?.OnRetrieve(poolable); return(poolable); }