public void CreatePool(Tier tier, GameObject prefab, int poolSize) { int poolKey = prefab.GetInstanceID(); switch (tier) { case Tier.TierOne: if (!tierOneDictionary.ContainsKey(poolKey)) { tierOneDictionary.Add(poolKey, new Queue <MonsterInstance>()); GameObject poolHolder = new GameObject(prefab.name + " pool"); poolHolder.transform.parent = transform; for (int i = 0; i < poolSize; i++) { MonsterInstance newMonster = new MonsterInstance(Instantiate(prefab) as GameObject); tierOneDictionary[poolKey].Enqueue(newMonster); newMonster.SetParent(poolHolder.transform); } } break; case Tier.TierTwo: if (!tierTwoDictionary.ContainsKey(poolKey)) { tierTwoDictionary.Add(poolKey, new Queue <MonsterInstance>()); GameObject poolHolder = new GameObject(prefab.name + " pool"); poolHolder.transform.parent = transform; for (int i = 0; i < poolSize; i++) { MonsterInstance newMonster = new MonsterInstance(Instantiate(prefab) as GameObject); tierTwoDictionary[poolKey].Enqueue(newMonster); newMonster.SetParent(poolHolder.transform); } } break; case Tier.TierThree: if (!tierThreeDictionary.ContainsKey(poolKey)) { tierThreeDictionary.Add(poolKey, new Queue <MonsterInstance>()); GameObject poolHolder = new GameObject(prefab.name + " pool"); poolHolder.transform.parent = transform; for (int i = 0; i < poolSize; i++) { MonsterInstance newMonster = new MonsterInstance(Instantiate(prefab) as GameObject); tierThreeDictionary[poolKey].Enqueue(newMonster); newMonster.SetParent(poolHolder.transform); } } break; } }
public void ReuseObject(Tier tier, GameObject prefab, Vector3 position, Quaternion rotation) { int poolKey = prefab.GetInstanceID(); switch (tier) { case Tier.TierOne: if (tierOneDictionary.ContainsKey(poolKey)) { MonsterInstance monsterToReuse = tierOneDictionary [poolKey].Dequeue(); tierOneDictionary [poolKey].Enqueue(monsterToReuse); monsterToReuse.Reuse(position, rotation); } break; case Tier.TierTwo: if (tierTwoDictionary.ContainsKey(poolKey)) { MonsterInstance monsterToReuse = tierTwoDictionary [poolKey].Dequeue(); tierTwoDictionary [poolKey].Enqueue(monsterToReuse); monsterToReuse.Reuse(position, rotation); } break; case Tier.TierThree: if (tierThreeDictionary.ContainsKey(poolKey)) { MonsterInstance monsterToReuse = tierThreeDictionary [poolKey].Dequeue(); tierThreeDictionary [poolKey].Enqueue(monsterToReuse); monsterToReuse.Reuse(position, rotation); } break; } }