Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class WaveSpawner : MonoBehaviour
- {
- //public Enemy enemyInstance;
- //public int health;
- public enum SpawnState { SPAWNING, WAITING, COUNTING };
- [System.Serializable]
- public class Wave
- {
- public string name;
- public Transform[] enemies;
- public int count;
- public float rate;
- }
- public Wave[] waves;
- private int nextWave = 0;
- public int NextWave
- {
- get { return nextWave + 1; }
- }
- public Transform[] spawnPoints;
- public float timeBetweenWaves = 5f;
- private float waveCountdown;
- public float WaveCountdown
- {
- get { return waveCountdown; }
- }
- private float searchCountdown = 1f;
- private SpawnState state = SpawnState.COUNTING;
- public SpawnState State
- {
- get { return state; }
- }
- void Start()
- {
- if (spawnPoints.Length == 0)
- {
- Debug.LogError("No spawn points referenced.");
- }
- waveCountdown = timeBetweenWaves;
- }
- void Update()
- {
- if (state == SpawnState.WAITING)
- {
- if (!EnemyIsAlive())
- {
- WaveCompleted();
- }
- else
- {
- return;
- }
- }
- if (waveCountdown <= 0)
- {
- if (state != SpawnState.SPAWNING)
- {
- StartCoroutine(SpawnWave(waves[nextWave]));
- }
- }
- else
- {
- waveCountdown -= Time.deltaTime;
- }
- }
- void WaveCompleted()
- {
- Debug.Log("Wave Completed!");
- state = SpawnState.COUNTING;
- waveCountdown = timeBetweenWaves;
- if (nextWave + 1 > waves.Length - 1)
- {
- nextWave = 0;
- Debug.Log("ALL WAVES COMPLETE! Looping...");
- }
- else
- {
- nextWave++;
- //enemyInstance.health += 2;
- }
- }
- 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.enemies);
- yield return new WaitForSeconds(1f / _wave.rate);
- }
- state = SpawnState.WAITING;
- yield break;
- }
- void SpawnEnemy(Transform[] enemies)
- {
- /*Debug.Log("Spawning Enemy: " + _enemy.name);
- var health = enemyInstance.GetComponent<Enemy>().health;*/
- int randEnemy = Random.Range(0, 2);
- Transform _sp = spawnPoints[Random.Range(0, spawnPoints.Length)];
- Instantiate(enemies[randEnemy], _sp.position, _sp.rotation);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement