#nullable enable using System.Collections; using UnityEngine; public class Arena : MonoBehaviour { //TODO probably add initial direction too [SerializeField] Vector3[] spawners = null!; [SerializeField] ArenaStats stats = null!; [SerializeField] GameObject monsterPrefab = null!; SafeZone safeZone = null!; void Awake() => safeZone = GetComponentInChildren(); void Start() => StartCoroutine(SpawnEnemies()); void SpawnEnemy(int spawnerIndex) { var monster = Instantiate(monsterPrefab, spawners[spawnerIndex], Quaternion.identity).GetComponent(); //TODO Replace hardcoded target with entity discovery monster.SetTarget(safeZone.transform); } IEnumerator SpawnEnemies() { yield return new WaitForSeconds(stats.secondsBetweenSpawners); int currentSpawner = 0; //TODO Stop when pause/end game while (true) { SpawnEnemy(currentSpawner); currentSpawner = Random.Range(0, spawners.Length); yield return new WaitForSeconds(stats.secondsBetweenSpawners); } } #if UNITY_EDITOR void OnDrawGizmosSelected() { Gizmos.color = Color.blue; foreach (Vector3 spawner in spawners) Gizmos.DrawWireCube(spawner, Vector3.one); } #endif }