Пример #1
0
 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);
     }
 }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }
Пример #4
0
 public void RemoveFromActive(GasRiser gasRiser)
 {
     _activeGas.Remove(gasRiser);
 }
Пример #5
0
 /// <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);
 }
Пример #6
0
 public void ReturnToPool(GasRiser gas)
 {
     GasOutputManager.Instance.RemoveFromActive(gas);
     gas.gameObject.SetActive(false);
     poolDictionary[gas.prefabId].Enqueue(gas);
 }