Ader Alisma 01 cad2436773 Progrès WaveEditor
WaveObserver gère le nombre d'ennemi à créer et assure d'arreter la création d'ennemis supplémentaires.

SpawnerTile détermine un intervalle aléatoire automatiquement après chaque création d'ennemi. La première intervalle a plus de chance d'être plus courte que les intervalles suivantes.

Config01 est le scriptable object de type LevelConfig

Suppression de commentaires de tests
2023-07-14 23:15:18 -04:00

56 lines
1.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveObserver : Singleton<WaveObserver>
{
private List<SpawnerTile> _subjects = new List<SpawnerTile>();
private List<int> _copyConstantSpawn;
private LevelConfig _levelConfig;
public LevelConfig LevelConfig
{
set
{
_levelConfig = value;
_copyConstantSpawn = new List<int>();
foreach (EnemyType enemy in _levelConfig.ConstantSpawn)
{
_copyConstantSpawn.Add(enemy.Count);
}
}
}
public void Attach(SpawnerTile spawnerSubject)
{
spawnerSubject.Prefab = _levelConfig.GetRandomSpawn().GetEnemyObject();
spawnerSubject.InitialSpawnSpeed(_levelConfig.GetInterval());
_subjects.Add(spawnerSubject);
}
public void NotifySpawned(SpawnerTile spawnerSubject)
{
if (spawnerSubject.Prefab.Equals(_levelConfig.ConstantSpawn[0].GetEnemyObject()))
{
int currentCount = 0;
for (int i = 0; i < _copyConstantSpawn.Count; i++)
{
if(_levelConfig.ConstantSpawn[i].GetEnemyObject() == spawnerSubject.Prefab)
{
currentCount = _copyConstantSpawn[i]--;
break;
}
}
if (currentCount <= 0)
{
foreach (SpawnerTile spawner in _subjects)
{
if (spawner.Prefab.Equals(spawnerSubject.Prefab))
{
spawner.StopSpawn();
}
}
}
}
}
}