Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    //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);
    }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
    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);
    }
Ejemplo n.º 7
0
    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);
    }
Ejemplo n.º 8
0
    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();
    }
Ejemplo n.º 9
0
    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);
    }
Ejemplo n.º 10
0
 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);
             }
         }
     }
 }
Ejemplo n.º 11
0
    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();
    }
Ejemplo n.º 12
0
 private void AddObjectToAvailableQueue(PooledMonoBehaviour pooledObject)
 {
     pooledObject.transform.SetParent(this.transform);
     objects.Enqueue(pooledObject);
 }
Ejemplo n.º 13
0
 public MonoBehaviourPool(PooledMonoBehaviour <T> prefab)
 {
     poolPrefab    = prefab;
     poolContainer = new GameObject(poolPrefab.name + " Pool");
 }
Ejemplo n.º 14
0
 private void AddToAvailable(PooledMonoBehaviour prefab)
 {
     _disabledObjects.Add(prefab);
     _readyObjects.Enqueue(prefab);
 }
Ejemplo n.º 15
0
 private void AddObjectToAvailable(PooledMonoBehaviour pooledObject)
 {
     disabledObjects.Add(pooledObject);
     objects.Enqueue(pooledObject);
 }
Ejemplo n.º 16
0
 public static Pool GetPool(PooledMonoBehaviour prefab, Transform poolLocation = null, GameObject poolParent = null)
 {
     return(GetPool(prefab, poolLocation == null ? new Vector3() : poolLocation.position, poolParent));
 }