IEnumerator SpawnWaves() { while (spawning) { int randX = Random.Range(0, initialX.Length); Vector3 randPos = new Vector3(initialX[randX], initialY, -0.1f); //Since river means instant death, make sure there is an interval between two rivers int riverCount = 0; int currentLevel = GameManager.GetLevel() + 1; if (currentLevel > EnemyTypes.Count) { currentLevel = EnemyTypes.Count; } //Spawn everything for debugging //currentLevel = EnemyTypes.Count; int typeRand = Random.Range(0, 100); if (typeRand < 60) { int randType = Random.Range(0, currentLevel); if (buffer[EnemyTypes[randType].name].Count > 0) { GameObject g = buffer[EnemyTypes[randType].name].Pop(); g.transform.position = randPos; g.SetActive(true); } else { EnemyControl.Create(EnemyTypes[randType], randPos); } riverCount--; } else if (typeRand < 98) { int randType = Random.Range(0, CollectibleTypes.Count); if (buffer[CollectibleTypes[randType].name].Count > 0) { GameObject c = buffer[CollectibleTypes[randType].name].Pop(); c.transform.position = randPos; c.SetActive(true); } else { CollectibleControl.Create(CollectibleTypes[randType], randPos); } riverCount--; } else { if (riverCount == 0 && currentLevel > 3) { riverCount = riverInterval; int randType = Random.Range(0, RiverTypes.Count); if (buffer[RiverTypes[randType].name].Count > 0) { GameObject r = buffer[RiverTypes[randType].name].Pop(); r.transform.position = randPos; r.SetActive(true); } else { RiverControl.Create(RiverTypes[randType], randPos); } } } yield return(new WaitForSeconds(spawnInterval)); } }