123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- 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<IEnumerator> coroutines = new List<IEnumerator>();
- private bool isActive;
- private List<GameObject> cars = new List<GameObject>();
- // Use this for initialization
- void Start()
- {
- this.isActive = false;
- }
- // Update is called once per frame
- void Update()
- {
- if(this.isActive){
- CheckDespawns();
- }
- }
- void OnDestroy() {
- StopSpawning();
- }
- /// <summary>
- /// Use this method to active the spawner
- /// </summary>
- public void StartSpawner(){
- this.isActive = true;
- StartSpawns();
- }
- /// <summary>
- /// Use this method to deactive the spawner
- /// </summary>
- public void StopSpawner(){
- this.isActive = false;
- StopSpawning();
- DespawnAllCars();
- }
- /// <summary>
- /// Check every set despawn area if cars have to be despawned
- /// </summary>
- private void CheckDespawns(){
- foreach(PresetTrigger despawn in despawns){
- if(despawn.checkLastTrigger()){
- DespawnCar(despawn.getLastCollider());
- }
- }
- }
- /// <summary>
- /// Start a coroutine to spawn cars at every given spawn point
- /// </summary>
- private void StartSpawns(){
- foreach(Transform spawnPos in spawns){
- IEnumerator coroutine = AutoSpawning(spawnPos);
- this.coroutines.Add(coroutine);
- StartCoroutine(coroutine);
- }
- }
- /// <summary>
- /// Despawn all cars used from this spawner since it was active
- /// </summary>
- private void DespawnAllCars(){
- this.cars.ForEach(car => DespawnCar(car));
- }
- /// <summary>
- /// Stop all coroutines
- /// </summary>
- private void StopSpawning(){
- foreach(IEnumerator coroutine in this.coroutines){
- StopCoroutine(coroutine);
- }
- }
- /// <summary>
- /// Spawn a car on the given transform
- /// </summary>
- /// <param name="carSpawn">Transform</param>
- void SpawnCar(Transform carSpawn){
- this.cars.Add(this.carPool.SpawnCar(carSpawn));
- }
- /// <summary>
- /// Despawn the given car
- /// </summary>
- /// <param name="car">GameObject</param>
- void DespawnCar(GameObject car){
- this.carPool.DespawnCar(car);
- }
- /// <summary>
- /// IEnumerator for the coroutine which spawns a car at the given position in the set spawnRate
- /// </summary>
- /// <param name="position">Transform</param>
- /// <returns></returns>
- public IEnumerator AutoSpawning(Transform position){
- while(true){
- SpawnCar(position);
- yield return new WaitForSeconds(this.spawnRate);
- }
- }
- }
- }
|