public static Pool GetPool(PooledMonoBehaviour prefab) { if (pools.ContainsKey(prefab)) { return(pools[prefab]); } var pooledGameObject = new GameObject($"Pool-{prefab.name}"); var pool = pooledGameObject.AddComponent <Pool>(); pool.prefab = prefab; pools.Add(prefab, pool); return(pool); }
public void AddInstance(PooledMonoBehaviour instance) { if (_pool.Count < POOL_SIZE) { _pool.Push(instance); instance.gameObject.SetActive(false); } else { //just discard it - we have too much of it Destroy(instance.gameObject); } }
public static Pool GetPool(PooledMonoBehaviour prefab) { if (_pools.ContainsKey(prefab)) { return(_pools[prefab]); } var pool = new GameObject($"Pool + {prefab.name}").AddComponent <Pool>(); pool._prefab = prefab; pool.GrowPool(); _pools.Add(prefab, pool); return(pool); }
//Queue vs Linq.FirstOrDefault/OrderBy public static Pool GetPool(PooledMonoBehaviour prefab) //why does this need to be static? { if (pools.ContainsKey(prefab)) { return(pools[prefab]); } var poolGameObject = new GameObject("Pool - " + prefab.name); var pool = poolGameObject.AddComponent <Pool>(); pool.prefab = prefab; pools.Add(prefab, pool); return(pool); }
public static Pool GetPool(PooledMonoBehaviour prefab) { if (pools.ContainsKey(prefab)) { return(pools[prefab]); } var pool = new GameObject("Pool-" + (prefab as Component).name).AddComponent <Pool>(); pool.prefab = prefab; pool.GrowPool(); pools.Add(prefab, pool); return(pool); }
public static Pool GetPool(PooledMonoBehaviour prefab) { //if that specific prefab included in the dictionary, then just return. if (pools.ContainsKey(prefab)) { return(pools[prefab]); } //Otherwise, create a new GameObject and add it to the dictionary var poolGameObject = new GameObject("Pool - " + prefab.name); var pool = poolGameObject.AddComponent <Pool>(); pool.prefab = prefab; pools.Add(prefab, pool); return(pool); }
public static Pool GetPool(PooledMonoBehaviour prefab, GameObject poolParent = null) { if (pools.ContainsKey(prefab)) { return(pools[prefab]); } var pool = new GameObject("Pool-" + prefab.name).AddComponent <Pool>(); if (poolParent != null) { pool.gameObject.transform.SetParent(poolParent.transform, false); } pool.prefab = prefab; pools.Add(prefab, pool); return(pool); }
private void OnValidate() { List <GameObject> prefabsToRemove = new List <GameObject>(); var notNullPrefabs = prefabs.Where(t => t != null); foreach (var prefab in notNullPrefabs) { PooledMonoBehaviour poolablePrefab = prefab.GetComponent <PooledMonoBehaviour>(); if (poolablePrefab == null) { Debug.LogError("Prefab does not contain an IPoolable and can't be pooled. It has been removed"); prefabsToRemove.Add(prefab.gameObject); } } prefabs = prefabs .Where(t => t != null && prefabsToRemove.Contains(t.gameObject) == false) .ToArray(); }
public static ObjectPool GetPoolFor(PooledMonoBehaviour toPool) { if (Application.isEditor)//if there are existing pools { GameObject obj = GameObject.Find(toPool.name + "Pool"); if (obj) { return(obj.GetComponent <ObjectPool>()); } } GameObject newPool = new GameObject { name = toPool.name + "Pool" }; ObjectPool pool = newPool.AddComponent <ObjectPool>(); pool.PooledGameObject = toPool; return(pool); }
private void Awake() { foreach (var prefab in prefabs) { if (prefab == null) { Debug.LogError("Null prefab in PoolPreparer"); } else { PooledMonoBehaviour poolablePrefab = prefab.GetComponent <PooledMonoBehaviour>(); if (poolablePrefab == null) { Debug.LogError("Prefab does not contain an IPoolable and can't be pooled"); } else { Pool.GetPool(poolablePrefab); } } } }
private void OnValidate() { List <GameObject> prefabsToRemove = new List <GameObject>(); foreach (var prefab in prefabs.Where(t => t != null)) { if (!PrefabUtility.IsPartOfPrefabAsset(prefab)) { Debug.LogError(string.Format("{0} is not a Prefab. It Has Been Removed.", prefab.gameObject.name)); prefabsToRemove.Add(prefab.gameObject); } PooledMonoBehaviour poolablePrefab = prefab.GetComponent <PooledMonoBehaviour>(); if (poolablePrefab == null) { Debug.LogError("Prefab Does not Contain an IPoolable and Can't be Pooled. It Has Been Removed"); prefabsToRemove.Add(prefab.gameObject); } } prefabs = prefabs.Where(t => t != null && prefabsToRemove.Contains(t.gameObject) == false).ToArray(); }
private void AddObjectToAvailableQueue(PooledMonoBehaviour pooledObject) { pooledObject.transform.SetParent(this.transform); objects.Enqueue(pooledObject); }
public MonoBehaviourPool(PooledMonoBehaviour <T> prefab) { poolPrefab = prefab; poolContainer = new GameObject(poolPrefab.name + " Pool"); }
private void AddToAvailable(PooledMonoBehaviour prefab) { _disabledObjects.Add(prefab); _readyObjects.Enqueue(prefab); }
private void AddObjectToAvailable(PooledMonoBehaviour pooledObject) { disabledObjects.Add(pooledObject); objects.Enqueue(pooledObject); }
public static Pool GetPool(PooledMonoBehaviour prefab, Transform poolLocation = null, GameObject poolParent = null) { return(GetPool(prefab, poolLocation == null ? new Vector3() : poolLocation.position, poolParent)); }