-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathWaveSpawner.cs
More file actions
70 lines (55 loc) · 1.6 KB
/
WaveSpawner.cs
File metadata and controls
70 lines (55 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class WaveSpawner : MonoBehaviour
{
public WaveData[] waves;
public int curWave = 0;
public int remainingEnemies;
[Header("Components")]
public Transform enemySpawnPos;
public TextMeshProUGUI waveText;
public GameObject nextWaveButton;
void OnEnable()
{
Enemy.OnDestroyed += OnEnemyDestroyed;
}
void OnDisable()
{
Enemy.OnDestroyed -= OnEnemyDestroyed;
}
public void SpawnNextWave ()
{
curWave++;
if(curWave - 1 == waves.Length)
return;
waveText.text = $"Wave: {curWave}";
StartCoroutine(SpawnWave());
}
IEnumerator SpawnWave ()
{
nextWaveButton.SetActive(false);
WaveData wave = waves[curWave - 1];
for(int x = 0; x < wave.enemySets.Length; x++)
{
yield return new WaitForSeconds(wave.enemySets[x].spawnDelay);
for(int y = 0; y < wave.enemySets[x].spawnCount; y++)
{
SpawnEnemy(wave.enemySets[x].enemyPrefab);
yield return new WaitForSeconds(wave.enemySets[x].spawnRate);
}
}
}
void SpawnEnemy (GameObject enemyPrefab)
{
Instantiate(enemyPrefab, enemySpawnPos.position, Quaternion.identity);
remainingEnemies++;
}
public void OnEnemyDestroyed ()
{
remainingEnemies--;
if(remainingEnemies == 0)
nextWaveButton.SetActive(true);
}
}