using UnityEngine; using System.Collections; using System.Collections.Generic; namespace TrafficSimulation{ public class CarSituationSpawner : MonoBehaviour { public float spawnRate = 5.0f; public Transform[] spawns; public PresetTrigger[] despawns; public CarPool carPool; private List coroutines = new List(); private bool isActive; private List cars = new List(); // Use this for initialization void Start() { this.isActive = false; } // Update is called once per frame void Update() { if(this.isActive){ CheckDespawns(); } } void OnDestroy() { StopSpawning(); } public void StartSpawner(){ Debug.Log("Start Spawner"); this.isActive = true; StartSpawns(); } public void StopSpawner(){ this.isActive = false; StopSpawning(); DespawnAllCars(); } private void CheckDespawns(){ Debug.Log("Check for despawn"); foreach(PresetTrigger despawn in despawns){ if(despawn.checkLastTrigger()){ DespawnCar(despawn.getLastCollider()); } } } private void StartSpawns(){ Debug.Log("Start Spawns"); foreach(Transform spawnPos in spawns){ IEnumerator coroutine = AutoSpawning(spawnPos); this.coroutines.Add(coroutine); StartCoroutine(coroutine); } } private void DespawnAllCars(){ foreach(GameObject car in this.cars){ DespawnCar(car); } } private void StopSpawning(){ foreach(IEnumerator coroutine in this.coroutines){ StopCoroutine(coroutine); } } void SpawnCar(Transform carSpawn){ Debug.Log("despawnCars"); this.cars.Add(this.carPool.SpawnCar(carSpawn)); } void DespawnCar(GameObject car){ Debug.Log("despawnCars"); this.carPool.despawnCar(car); } public IEnumerator AutoSpawning(Transform position){ while(true){ SpawnCar(position); yield return new WaitForSeconds(this.spawnRate); } } } }