using System.Collections; using System.Collections.Generic; using UnityEngine; using Utility; public class ZombieSpawner : MonoBehaviour { [SerializeField] List SpawnPoints; [SerializeField] List ZombieDeathByDisableSoundeffects; [SerializeField] GameObject ZombiePrefab; [SerializeField] private float _spawnRate = 2.0f; [SerializeField, ShowOnly] private float _spawnTimer; private float _secondsPerAliveTime; // Start wird aufgerufen, bevor das erste Frame gezeichnet wird void Start() { _secondsPerAliveTime = GetComponentInParent().ActiveTimeSpanInSeconds; _spawnTimer = Random.Range(0.5f * _secondsPerAliveTime / _spawnRate, _secondsPerAliveTime / _spawnRate); } // Update wird einmal pro Frame aufgerufen void Update() { _spawnTimer -= Time.deltaTime; if (_spawnTimer <= 0) { SpawnZombie(); _spawnTimer = _secondsPerAliveTime / _spawnRate; } } private void OnEnable() { if (GameManager.Instance != null) { if (GameManager.Instance.ContextBuffer != null) GameManager.Instance.AddContext("The Developer informs Gottfried that Zombies appeared outside so Gottfried better not leave the office"); } } private void OnDisable() { if (GameManager.Instance.ContextBuffer != null) GameManager.Instance.RemoveContext("The Developer informs Gottfried that Zombies appeared outside so Gottfried better not leave the office"); // Destroy all children (zombies) KillZombiesByDisable(); } private void SpawnZombie() { Transform pos = SpawnPoints[Random.Range(0, SpawnPoints.Count)]; Instantiate(ZombiePrefab, pos.position, Quaternion.identity, transform); } private void KillZombiesByDisable() { for (int i = 0; i < transform.childCount; i++) { GameObject zombie = transform.GetChild(i).gameObject; Vector3 zombiePosition = zombie.transform.position; Destroy(zombie); GameObject particleEffect = Instantiate(GameManager.Instance.ZombieDeathByDisableParticleEffect, zombiePosition, Quaternion.Euler(-90, 0, 0), GameManager.Instance.transform); AudioSource audio = particleEffect.GetComponent(); audio.clip = ZombieDeathByDisableSoundeffects[Random.Range(0, ZombieDeathByDisableSoundeffects.Count)]; audio.Play(); } } }