Beispiel #1
0
        public GameObject GetObjectFromPool(IPoolableAsset asset, Vector3 position, Quaternion rotation)
        {
            if (position == null)
            {
                position = Vector3.zero;
            }
            if (rotation == null)
            {
                rotation = Quaternion.identity;
            }

            if (!PoolExistsInMaster(asset))
            {
                TryCreateNewPool(asset);
                return(null);        //TODO - this means the first GO will always be missing when adding on the fly
            }

            var objectPool = poolMaster[asset.GetIPoolableAssetName()];

            var go = FindInactiveObjectInPool(objectPool);

            if (go == null)
            {
                go = AddNewGameObjectToPool(asset, objectPool);
                go.SetActive(true);
            }

            if (go != null)
            {
                //go.transform.parent = null;
                SetObjectPositionAndRotation(go, position, rotation);
            }

            return(go);
        }
Beispiel #2
0
        private bool PoolExistsInMaster(IPoolableAsset poolAsset)
        {
            var assetName = poolAsset.GetIPoolableAssetName();

            if (poolMaster.ContainsKey(assetName))
            {
                return(true);
            }
            return(false);
        }
Beispiel #3
0
        public void TryCreateNewPool(IPoolableAsset newPoolAsset, int numToPool)
        {
            if (PoolExistsInMaster(newPoolAsset))
            {
                return;
            }
            var newPoolParams = CreatePoolFromAsset(newPoolAsset, numToPool);

            AddPoolToMaster(newPoolParams);
        }
Beispiel #4
0
 public bool PoolExistsFor(IPoolableAsset asset)
 {
     for (int i = 0; i < m_poolTypes.Count; i++)
     {
         if (m_poolTypes[i].asset == asset)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #5
0
        private GameObject AddNewGameObjectToPool(IPoolableAsset asset, List <GameObject> objectPool)
        {
            GameObject go     = asset.InstantiatePrefabToPool(transform);
            int        prefix = objectPool.Count + 1;

            go.name = prefix + " " + asset.GetIPoolableAssetName();

            if (go)
            {
                objectPool.Add(go);
            }
            return(go);
        }
Beispiel #6
0
        public void TryCreateNewPool(IPoolableAsset newPoolAsset)
        {
            CheckIfPoolAssetInitialised();

            var assetName = newPoolAsset.GetName();

            if (m_poolMaster.ContainsKey(assetName))
            {
                return;
            }

            var newPoolParams = CreatePoolFromAsset(newPoolAsset);

            AddPoolToMaster(newPoolParams);
        }
Beispiel #7
0
        private PoolTypes CreatePoolFromAsset(IPoolableAsset poolAsset)
        {
            PoolTypes newPool = new PoolTypes
            {
                tag                 = poolAsset.GetIPoolableAssetName(),
                asset               = poolAsset.GetIPoolableAsset(),
                prefab              = null,
                size                = poolAsset.GetNumberToPool(),
                canExpand           = poolAsset.GetIsPoolExpandable(),
                isSelfInstantiating = true,
                sceneName           = GetActiveScene()
            };

            poolTypes.Add(newPool);
            return(newPool);
        }
Beispiel #8
0
        private GameObject AddNewGameObjectToPool(IPoolableAsset asset, List <GameObject> objectPool)
        {
            GameObject   go       = asset.InstantiatePrefabToPool(m_poolFolder.transform);
            ObjectRepool repooler = go.AddComponent <ObjectRepool>();

            repooler.Initialise(asset, this);

            int prefix = objectPool.Count + 1;

            go.name = prefix + " " + asset.GetName();

            if (go)
            {
                objectPool.Add(go);
            }
            return(go);
        }
 public void Initialise(IPoolableAsset asset, ObjectPoolAsset pool)
 {
     m_asset = asset;
     m_pool  = pool;
 }