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); }
private bool PoolExistsInMaster(IPoolableAsset poolAsset) { var assetName = poolAsset.GetIPoolableAssetName(); if (poolMaster.ContainsKey(assetName)) { return(true); } return(false); }
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); }
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); }