iTz_WyTe

WaveSpawner

Mar 21st, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.UI;
  4.  
  5. public class WaveSpawner : MonoBehaviour {
  6.  
  7. public enum SpawnState { SPAWNING, WAITING, COUNTING }
  8.  
  9. [System.Serializable]
  10. public class Wave {
  11. public string name;
  12. public Transform enemy;
  13. public int count;
  14. public float rate;
  15. }
  16.  
  17. public Text countdownText;
  18.  
  19. public Wave[] waves;
  20. private int nextWave = 0;
  21.  
  22. public Transform spawnPoint;
  23.  
  24. public float timeBetweenWaves = 5f;
  25. public float waveCountdown;
  26.  
  27. private float searchCountdown = 1f;
  28.  
  29. private SpawnState state = SpawnState.COUNTING;
  30.  
  31. void Start() {
  32. waveCountdown = timeBetweenWaves;
  33. }
  34.  
  35. void Update() {
  36. if (CameraController.inElementSelectMenu == true)
  37. return;
  38. waveCountdown = Mathf.Clamp (waveCountdown, 0f, Mathf.Infinity);
  39. countdownText.text = string.Format("{0:00.00}", waveCountdown);
  40. if (state == SpawnState.WAITING) {
  41. if (!EnemyIsAlive ()) {
  42. WaveCompleted();
  43. } else {
  44. return;
  45. }
  46. }
  47.  
  48. if (waveCountdown <= 0) {
  49. if (state != SpawnState.SPAWNING) {
  50. StartCoroutine (SpawnWave (waves [nextWave]));
  51. }
  52. } else {
  53. waveCountdown -= Time.deltaTime;
  54. }
  55.  
  56. if (Input.GetKeyDown("space")) {
  57. waveCountdown = 0;
  58. }
  59. }
  60.  
  61. void WaveCompleted () {
  62. Debug.Log ("Wave Completed!");
  63.  
  64. state = SpawnState.COUNTING;
  65. waveCountdown = timeBetweenWaves;
  66.  
  67. if (nextWave + 1 > waves.Length - 1) {
  68. nextWave = 0;
  69. Debug.Log ("ALL WAVES COMPLETED! Looping...");
  70. } else {
  71. nextWave++;
  72. }
  73. }
  74.  
  75. bool EnemyIsAlive () {
  76. searchCountdown -= Time.deltaTime;
  77. if (searchCountdown <= 0f) {
  78. searchCountdown = 1f;
  79. if (GameObject.FindGameObjectWithTag ("Enemy") == null) {
  80. return false;
  81. }
  82. }
  83. return true;
  84. }
  85.  
  86. IEnumerator SpawnWave (Wave _wave) {
  87. Debug.Log ("Spawning Wave: " + _wave.name);
  88. state = SpawnState.SPAWNING;
  89.  
  90. for (int i = 0; i < _wave.count; i++) {
  91. SpawnEnemy (_wave.enemy);
  92. yield return new WaitForSeconds (1f / _wave.rate);
  93. }
  94.  
  95. state = SpawnState.WAITING;
  96.  
  97. yield break;
  98. }
  99.  
  100. void SpawnEnemy (Transform _enemy) {
  101. Debug.Log ("Spawning Enemy: " + _enemy.name);
  102. Instantiate (_enemy, spawnPoint.position, transform.rotation);
  103. }
  104.  
  105. }
Advertisement
Add Comment
Please, Sign In to add comment