InfiniteTerrainChunk GetFreePrefabInstance(InfiniteTerrainChunk aPrefab) { List <InfiniteTerrainChunk> instances; // ensure the pool has a list available for this prefab if (!_terrainPool.TryGetValue(aPrefab, out instances)) { instances = new List <InfiniteTerrainChunk>(); _terrainPool.Add(aPrefab, instances); } // now make sure there's an available instance in the list for (int i = 0; i < instances.Count; i++) { if (!instances[i].gameObject.activeSelf) { return(instances[i]); } } // no instance was found, go ahead and create one GameObject obj = Instantiate(aPrefab.gameObject); InfiniteTerrainChunk chunk = obj.GetComponent <InfiniteTerrainChunk>(); obj.SetActive(false); instances.Add(chunk); return(chunk); }
void AddNewChunk(Vector3 aTo, Side aSide) { InfiniteTerrainChunk prefab = GetRandomPrefab(); InfiniteTerrainChunk instance = GetFreePrefabInstance(prefab); instance.ConnectTo(aTo, aSide); instance.gameObject.SetActive(true); _activeInstances.Add(instance); }