private void AddToPool(string key, int amount) { for (int i = 0; i < amount; i++) { GasRiser gas = Instantiate(prefabDict[key]); gas.gameObject.SetActive(false); poolDictionary[key].Enqueue(gas); } }
public GasRiser Get(GasRiser gas) { if (!poolDictionary.ContainsKey(gas.prefabId)) { prefabDict.Add(gas.prefabId, gas); poolDictionary.Add(gas.prefabId, new Queue <GasRiser>()); } else if (IsDuplicateKey(gas)) { Debug.LogError(gas.name + " and " + prefabDict[gas.prefabId].name + " cannot have the same prefabID!"); return(null); } if (poolDictionary[gas.prefabId].Count == 0) { AddToPool(gas.prefabId, 1); } return(poolDictionary[gas.prefabId].Dequeue()); }
public void OutputGas(Vector3 exhaustPoint, GasRiser gasPrefab) { Vector3 gasDestination = GetGasDestination(exhaustPoint); GasRiser gas = GasRiserPool.Instance.Get(gasPrefab); //should really only happen if there is a duplicate prefabID if (gas == null) { return; } Transform gasTransform = gas.transform; gasTransform.position = exhaustPoint; gas.gameObject.SetActive(true); gasTransform.localScale *= gas.sizeOverTime.Evaluate(0f); _activeGas.Add(gas); gas.Initialize(gasDestination, gasHeight); }
public void RemoveFromActive(GasRiser gasRiser) { _activeGas.Remove(gasRiser); }
/// <summary> /// Two different prefabs cannot be entered in the dictionary with the same prefabID. /// This method returns true if the GasRiser we want to add has the same ID as an already added GasRiser /// </summary> private bool IsDuplicateKey(GasRiser gas) { return(prefabDict.ContainsKey(gas.prefabId) && prefabDict[gas.prefabId] != gas); }
public void ReturnToPool(GasRiser gas) { GasOutputManager.Instance.RemoveFromActive(gas); gas.gameObject.SetActive(false); poolDictionary[gas.prefabId].Enqueue(gas); }