bool SpawnRateCoolDown(TheWave w) { if (w.currentSpawnCool < enemyPatterns[(int)w.eTypes].spawnRate) { w.currentSpawnCool += Time.deltaTime; return(false); } w.currentSpawnCool = 0; return(true); }
// Update is called once per frame void Update() { //Debug.Log("Number of enemies " + Enemy.numAliveEnemies); if (GameStateManager.instance.state == GameStateManager.GameState.Gameplay) { if (!logicPaused) { if (currentWave < levels[currentLevel].numWavesTillBoss) { if (WaveCooldown()) { TheWave wave = new TheWave(); wave.eTypes = PickRandomEnemy(); wave.spawnAmount = Random.Range(enemyPatterns[(int)wave.eTypes].minSpawn, enemyPatterns[(int)wave.eTypes].maxSpawn + 1); wave.currentSpawnCool = enemyPatterns[(int)wave.eTypes].spawnRate; waves.Add(wave); } for (int i = 0; i < waves.Count; i++) { if (SpawnRateCoolDown(waves[i])) { Enemy e = EnemyPooling(enemyPatterns[(int)waves[i].eTypes].enemy); int spawnPos = Random.Range(0, enemyPatterns[(int)waves[i].eTypes].spawnLocations.Length); while (spawnPos == prevSpawnPos) { spawnPos = Random.Range(0, enemyPatterns[(int)waves[i].eTypes].spawnLocations.Length); } prevSpawnPos = spawnPos; EnemyPatterns _pat = enemyPatterns[(int)waves[i].eTypes]; e.transform.position = _pat.spawnLocations[spawnPos].position; e.OnSpawn(); e.gameObject.SetActive(true); waves[i].spawnAmount--; if (waves[i].spawnAmount == 0) { waves.RemoveAt(i); currentWave++; --i; } } } } else if (!bossSpawned && Enemy.numAliveEnemies == 0) { Invoke("SpawnBoss", 3); bossSpawned = true; waves.Clear(); } CircleSwarm(); } } }