Ader Alisma 01 d75a1ec747 Progrès WaveEditor
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
2023-07-14 19:44:07 -04:00

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;
}
}
}