57 lines
1.7 KiB
C#
57 lines
1.7 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class WaveObserver : Singleton<WaveObserver>
|
|
{
|
|
private List<SpawnerTile> _subjects = new List<SpawnerTile>();
|
|
private List<int> _copyConstantSpawn;
|
|
private WaveConfig _levelConfig;
|
|
public WaveConfig 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)
|
|
{
|
|
GameObject paramPrefab = spawnerSubject.Prefab;
|
|
if (paramPrefab.Equals(_levelConfig.ConstantSpawn[0].GetEnemyObject()))
|
|
{
|
|
int currentCount = 0;
|
|
for (int i = 0; i < _copyConstantSpawn.Count; i++)
|
|
{
|
|
if(_levelConfig.ConstantSpawn[i].GetEnemyObject() == paramPrefab)
|
|
{
|
|
currentCount = _copyConstantSpawn[i]--;
|
|
Debug.Log("nbr " + currentCount);
|
|
break;
|
|
}
|
|
}
|
|
if (currentCount <= 0)
|
|
{
|
|
foreach (SpawnerTile spawner in _subjects)
|
|
{
|
|
if (spawner.Prefab.Equals(paramPrefab))
|
|
{
|
|
spawner.StopSpawn();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|