using System.Collections; using System.Collections.Generic; using UnityEngine; public class SpawnerController : MonoBehaviour { [SerializeField] private BoxCollider2D bounds; [SerializeField] private GameObject monsterToSpawn; [SerializeField] private float spawnTick; [SerializeField] private int maxActiveSpawns; [SerializeField] private int maxSpawnPerTick; [SerializeField] private bool isActive; private List spawns; private void Start() { spawns = new List(); StartCoroutine("SpawnCoroutine"); } private void Spawn() { Vector3 spawnPosition = new Vector3(bounds.transform.position.x + bounds.size.x * Random.Range(-0.5f, 0.5f), bounds.transform.position.y + bounds.size.y, bounds.transform.position.z); GameObject monster = Instantiate(monsterToSpawn); monster.transform.position = spawnPosition; spawns.Add(monster); } private IEnumerator SpawnCoroutine() { while (true) { spawns.RemoveAll(spawn => spawn == null); if (isActive && spawns.Count < maxActiveSpawns) { // TODO: Check if num active spawns is > maxActiveSpawns. int numSpawns = Mathf.Min(maxActiveSpawns, spawns.Count + maxSpawnPerTick) - spawns.Count; for (int i = 0; i < numSpawns; i++) { Spawn(); } } yield return new WaitForSeconds(spawnTick); } } }