Files
pgs/Assets/Scripts/SpawnerController.cs

45 lines
1.6 KiB
C#
Raw Permalink Normal View History

2026-02-21 16:58:22 -08:00
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<GameObject> spawns;
private void Start() {
spawns = new List<GameObject>();
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);
}
}
}