Zombies machen mehr geräsche und andere tolle sachen und laufen zum spieler

This commit is contained in:
2024-04-07 03:38:32 +02:00
parent 51f9151060
commit b378c4e834
16 changed files with 88919 additions and 28 deletions

View File

@ -13,32 +13,52 @@ public class ZombieSpawner : MonoBehaviour
GameObject ZombiePrefab;
[SerializeField]
private float _spawnRate = 2.0f;
[SerializeField]
private float _dontSpawnForLastSeconds = 3.0f;
[SerializeField, ShowOnly]
private float _spawnTimer;
[SerializeField, ShowOnly]
private float _enabledTimer = 0.0f;
private float _secondsPerAliveTime;
private bool _startedFading = false;
// Start wird aufgerufen, bevor das erste Frame gezeichnet wird
void Start()
{
_secondsPerAliveTime = GetComponentInParent<Zeitschaltuhr>().ActiveTimeSpanInSeconds;
// letzte _dontSpawnForLastSeconds sekunden keine Zombies mehr spawnen
_secondsPerAliveTime = GetComponentInParent<Zeitschaltuhr>().ActiveTimeSpanInSeconds - _dontSpawnForLastSeconds;
_spawnTimer = Random.Range(0.5f * _secondsPerAliveTime / _spawnRate, _secondsPerAliveTime / _spawnRate);
_enabledTimer = _secondsPerAliveTime + _dontSpawnForLastSeconds;
}
// Update wird einmal pro Frame aufgerufen
void Update()
{
_enabledTimer -= Time.deltaTime;
_spawnTimer -= Time.deltaTime;
// als <20>bergang von Schrei zu Tr<54>te
if (_enabledTimer < _dontSpawnForLastSeconds && !_startedFading)
{
_startedFading = true;
FadeOutNoises();
}
if (_spawnTimer <= 0)
{
SpawnZombie();
_spawnTimer = _secondsPerAliveTime / _spawnRate;
_spawnTimer = (_secondsPerAliveTime - _dontSpawnForLastSeconds) / _spawnRate;
}
}
private void OnEnable()
{
if (_secondsPerAliveTime > 0)
{
_enabledTimer = _secondsPerAliveTime;
_startedFading = false;
}
if (GameManager.Instance != null)
{
if (GameManager.Instance.ContextBuffer != null)
@ -55,8 +75,18 @@ public class ZombieSpawner : MonoBehaviour
}
private void FadeOutNoises()
{
for (int i = 0; i < transform.childCount; i++)
{
GameObject zombie = transform.GetChild(i).gameObject;
zombie.GetComponent<Zombie>().FadeOutNoise();
}
}
private void SpawnZombie()
{
if (transform.childCount > _spawnRate) return;
Transform pos = SpawnPoints[Random.Range(0, SpawnPoints.Count)];
Instantiate(ZombiePrefab, pos.position, Quaternion.identity, transform);
}