Beispiel #1
0
    private void Awake()
    {
        prefabs = TileDatabase.sharedInstance.databaseList.tileDatabase.ToArray();

        foreach (GameObject _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);
                }
            }
        }
    }
Beispiel #2
0
    private void OnValidate()
    {
        List <GameObject> prefabsToRemove = new List <GameObject>();

        foreach (var prefab in prefabs.Where(t => t != null))
        {
            //PrefabUtility.GetPrefabAssetType(prefab) != PrefabAssetType.Regular
            if (PrefabUtility.GetPrefabType(prefab) != PrefabType.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();
    }
Beispiel #3
0
    public T Get <T>() where T : PooledMonobehaviour
    {
        MakeDisabledObjectsChildren();
        if (m_Objects.Count == 0)
        {
            GrowPool();
        }

        PooledMonobehaviour _pooledObject = m_Objects.Dequeue();

        return(_pooledObject as T);
    }
Beispiel #4
0
    public void GrowPool()
    {
        for (int i = 0; i < m_Prefab.m_InitialPoolSize; i++)
        {
            PooledMonobehaviour _pooledObject = Instantiate(this.m_Prefab) as PooledMonobehaviour;

            (_pooledObject as Component).gameObject.name += " " + totalPooledObjects++;
            _pooledObject.OnDestroyEvent += () => AddObjectToAvalaible(_pooledObject);

            (_pooledObject as Component).gameObject.SetActive(false);
        }
    }
Beispiel #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);
    }
Beispiel #6
0
    public static Pool GetPool(PooledMonobehaviour prefab)
    {
        if (m_Pools.ContainsKey(prefab))
        {
            return(m_Pools[prefab]);
        }
        Pool _pool = new GameObject("Pool-" + (prefab as Component).name).AddComponent <Pool>();

        _pool.m_Prefab = prefab;
        _pool.GrowPool();
        _pool.transform.parent = GameObject.Find("Pool").transform;

        m_Pools.Add(prefab, _pool);
        return(_pool);
    }
    private void OnValidate()
    {
#if UNITY_EDITOR
        List <GameObject> prefabsToRemove = new List <GameObject>();
        if (prefabs != null)
        {
            foreach (var prefab in prefabs.Where(t => t != null))
            {
                if (PrefabUtility.GetPrefabAssetType(prefab) != PrefabAssetType.Regular)    //change
                {
                    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);
                }
            }
            List <PooledMonobehaviour> newPrefabs = new List <PooledMonobehaviour>();

            for (int i = 0; i < prefabs.Length; i++)
            {
                if (prefabs[i] != null)
                {
                    if (!prefabsToRemove.Contains(prefabs[i].gameObject))
                    {
                        newPrefabs.Add(prefabs[i]);
                    }
                }
                else
                {
                    newPrefabs.Add(prefabs[i]);
                }
            }
            prefabs = newPrefabs.ToArray();
        }
#endif
    }
Beispiel #8
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).GrowPool();
             }
         }
     }
 }
Beispiel #9
0
 private void AddObjectToAvailable(PooledMonobehaviour pooledObject)
 {
     disabledObjects.Add(pooledObject);
     objects.Enqueue(pooledObject);
 }
Beispiel #10
0
 public void AddObjectToAvalaible(PooledMonobehaviour pooledObject)
 {
     m_DisabledObjects.Add(pooledObject);
     m_Objects.Enqueue(pooledObject);
 }