WaveObserver donne aux spawners les unités à instancier ainsi que l'intervalle de création de ceux-ci LevelConfig passe de Level vers LevelManager puis il est utilisé dans l'instance de WaveObserver
75 lines
2.6 KiB
C#
75 lines
2.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class WaveObserver : Singleton<WaveObserver>
|
|
{
|
|
private List<SpawnerTile> _subjects = new List<SpawnerTile>();
|
|
private LevelConfig _levelConfig;
|
|
public LevelConfig LevelConfig { set { _levelConfig = value; } }
|
|
private float[] _delay = {0,1,2,3,4,5};
|
|
private float _currentToughness = 0;
|
|
private int _gameProgress = 0;
|
|
private int _maxSync = 6;
|
|
|
|
public void Attach(SpawnerTile spawnerSubject)
|
|
{
|
|
spawnerSubject.Prefab = _levelConfig.GetRandomSpawn().GetEnemyObject();
|
|
WaveUpdate(spawnerSubject);
|
|
_subjects.Add(spawnerSubject);
|
|
}
|
|
|
|
public void NotifySpawned(SpawnerTile spawnerSubject)
|
|
{
|
|
if (spawnerSubject.Prefab.Equals(_levelConfig.ConstantSpawn[0].GetEnemyObject()))
|
|
{
|
|
int currentCount = _levelConfig.ConstantSpawn[0].Count;
|
|
if (currentCount == 0)
|
|
{
|
|
foreach (SpawnerTile spawner in _subjects)
|
|
{
|
|
if (spawner.Prefab.Equals(spawnerSubject.Prefab))
|
|
{
|
|
//spawner.SpawnSpeed = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void WaveUpdate(SpawnerTile spawnerSubject)
|
|
{
|
|
//Lottery of order. Reducing maxSync increases the chances team spawning
|
|
int spawningOrder = Random.Range(1, _maxSync);
|
|
Debug.Log("Je suis " + spawningOrder + "e de la liste.");
|
|
switch (spawningOrder)
|
|
{
|
|
case 1:
|
|
spawnerSubject.SpawnSpeed = _levelConfig.GameDuration + _levelConfig.GameDuration * _delay[0];
|
|
break;
|
|
case 2:
|
|
spawnerSubject.SpawnSpeed = _levelConfig.GameDuration + _levelConfig.GameDuration * _delay[1];
|
|
break;
|
|
case 3:
|
|
spawnerSubject.SpawnSpeed = _levelConfig.GameDuration + _levelConfig.GameDuration * _delay[2];
|
|
break;
|
|
case 4:
|
|
spawnerSubject.SpawnSpeed = _levelConfig.GameDuration + _levelConfig.GameDuration * _delay[3];
|
|
break;
|
|
case 5:
|
|
spawnerSubject.SpawnSpeed = _levelConfig.GameDuration + _levelConfig.GameDuration * _delay[4];
|
|
break;
|
|
case 6:
|
|
spawnerSubject.SpawnSpeed = _levelConfig.GameDuration + _levelConfig.GameDuration * _delay[5];
|
|
break;
|
|
}
|
|
_gameProgress++;
|
|
|
|
if(_gameProgress == _maxSync)
|
|
{
|
|
_maxSync--;
|
|
_gameProgress = 0;
|
|
}
|
|
}
|
|
}
|