Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- public class WaveSpawner : MonoBehaviour {
- public enum SpawnState { SPAWNING, WAITING, COUNTING }
- [System.Serializable]
- public class Wave {
- public string name;
- public Transform enemy;
- public int count;
- public float rate;
- }
- public Text countdownText;
- public Wave[] waves;
- private int nextWave = 0;
- public Transform spawnPoint;
- public float timeBetweenWaves = 5f;
- public float waveCountdown;
- private float searchCountdown = 1f;
- private SpawnState state = SpawnState.COUNTING;
- void Start() {
- waveCountdown = timeBetweenWaves;
- }
- void Update() {
- if (CameraController.inElementSelectMenu == true)
- return;
- waveCountdown = Mathf.Clamp (waveCountdown, 0f, Mathf.Infinity);
- countdownText.text = string.Format("{0:00.00}", waveCountdown);
- if (state == SpawnState.WAITING) {
- if (!EnemyIsAlive ()) {
- WaveCompleted();
- } else {
- return;
- }
- }
- if (waveCountdown <= 0) {
- if (state != SpawnState.SPAWNING) {
- StartCoroutine (SpawnWave (waves [nextWave]));
- }
- } else {
- waveCountdown -= Time.deltaTime;
- }
- if (Input.GetKeyDown("space")) {
- waveCountdown = 0;
- }
- }
- void WaveCompleted () {
- Debug.Log ("Wave Completed!");
- state = SpawnState.COUNTING;
- waveCountdown = timeBetweenWaves;
- if (nextWave + 1 > waves.Length - 1) {
- nextWave = 0;
- Debug.Log ("ALL WAVES COMPLETED! Looping...");
- } else {
- nextWave++;
- }
- }
- bool EnemyIsAlive () {
- searchCountdown -= Time.deltaTime;
- if (searchCountdown <= 0f) {
- searchCountdown = 1f;
- if (GameObject.FindGameObjectWithTag ("Enemy") == null) {
- return false;
- }
- }
- return true;
- }
- IEnumerator SpawnWave (Wave _wave) {
- Debug.Log ("Spawning Wave: " + _wave.name);
- state = SpawnState.SPAWNING;
- for (int i = 0; i < _wave.count; i++) {
- SpawnEnemy (_wave.enemy);
- yield return new WaitForSeconds (1f / _wave.rate);
- }
- state = SpawnState.WAITING;
- yield break;
- }
- void SpawnEnemy (Transform _enemy) {
- Debug.Log ("Spawning Enemy: " + _enemy.name);
- Instantiate (_enemy, spawnPoint.position, transform.rotation);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment