diff --git a/Assets/LevelConfig/Config01.asset b/Assets/LevelConfig/Config01.asset new file mode 100644 index 0000000..827612f --- /dev/null +++ b/Assets/LevelConfig/Config01.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eb0795e326609f0499365f5b65c2b5cd, type: 3} + m_Name: Config01 + m_EditorClassIdentifier: + _constantSpawn: + - _enemy: {fileID: 313037212318601125, guid: 5bbf0d85fa5bb3f4599da79f0a84e3a9, type: 3} + _count: 20 + _gameDuration: 3 diff --git a/Assets/LevelConfig/Config01.asset.meta b/Assets/LevelConfig/Config01.asset.meta new file mode 100644 index 0000000..7ed0ea8 --- /dev/null +++ b/Assets/LevelConfig/Config01.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21b0f85f7c746974db1e72f2df646f5d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelConfig/LevelConfig.cs b/Assets/Scripts/LevelConfig/LevelConfig.cs index 2bdec54..288da83 100644 --- a/Assets/Scripts/LevelConfig/LevelConfig.cs +++ b/Assets/Scripts/LevelConfig/LevelConfig.cs @@ -16,13 +16,10 @@ public class LevelConfig : ScriptableObject return _constantSpawn; } } - public float GameDuration + public float GetInterval() { - get - { - float interval = SumCount().ToFloat() / _gameDuration * 0.01f; - return interval; - } + float interval = SumCount().ToFloat() / _gameDuration * 0.01f; + return interval; } public EnemyType GetRandomSpawn() { diff --git a/Assets/Scripts/LevelConfig/WaveObserver.cs b/Assets/Scripts/LevelConfig/WaveObserver.cs index bbcc802..5c70b21 100644 --- a/Assets/Scripts/LevelConfig/WaveObserver.cs +++ b/Assets/Scripts/LevelConfig/WaveObserver.cs @@ -5,17 +5,25 @@ using UnityEngine; public class WaveObserver : Singleton { private List _subjects = new List(); + private List _copyConstantSpawn; 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 LevelConfig LevelConfig + { + set + { + _levelConfig = value; + _copyConstantSpawn = new List(); + foreach (EnemyType enemy in _levelConfig.ConstantSpawn) + { + _copyConstantSpawn.Add(enemy.Count); + } + } + } public void Attach(SpawnerTile spawnerSubject) { spawnerSubject.Prefab = _levelConfig.GetRandomSpawn().GetEnemyObject(); - WaveUpdate(spawnerSubject); + spawnerSubject.InitialSpawnSpeed(_levelConfig.GetInterval()); _subjects.Add(spawnerSubject); } @@ -23,52 +31,25 @@ public class WaveObserver : Singleton { if (spawnerSubject.Prefab.Equals(_levelConfig.ConstantSpawn[0].GetEnemyObject())) { - int currentCount = _levelConfig.ConstantSpawn[0].Count; - if (currentCount == 0) + 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.SpawnSpeed = 0.0f; + spawner.StopSpawn(); } } } } } - - 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; - } - } } diff --git a/Assets/Scripts/LevelManager/LevelManager.cs b/Assets/Scripts/LevelManager/LevelManager.cs index 620c494..25a161d 100644 --- a/Assets/Scripts/LevelManager/LevelManager.cs +++ b/Assets/Scripts/LevelManager/LevelManager.cs @@ -138,6 +138,8 @@ public class LevelManager : Singleton } _currentLevel = level; + _waveObserver = WaveObserver.Instance; + _waveObserver.LevelConfig = _currentLevel.WaveConfig; Grid grid = Object.FindObjectOfType(); //create new grid if there is none if (!grid) @@ -163,10 +165,6 @@ public class LevelManager : Singleton tilemap.transform.SetParent(grid.transform); } Debug.Log("level loaded successfully"); - - Debug.Log("Decompte = " + _currentLevel.WaveConfig.GameDuration); - _waveObserver = WaveObserver.Instance; - _waveObserver.LevelConfig = _currentLevel.WaveConfig; } /// diff --git a/Assets/Scripts/Tiles/SpawnerTile.cs b/Assets/Scripts/Tiles/SpawnerTile.cs index 7890ec7..6fe7d09 100644 --- a/Assets/Scripts/Tiles/SpawnerTile.cs +++ b/Assets/Scripts/Tiles/SpawnerTile.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Gather And Defend/Spawner Tile")] -public class SpawnerTile : LevelTile, IWaveSubject +public class SpawnerTile : LevelTile { [SerializeField] private GameObject _prefab; @@ -14,6 +14,9 @@ public class SpawnerTile : LevelTile, IWaveSubject [SerializeField, Range(0, 1.001f)] private float _spawnCounter = 0; private WaveObserver _observer; + private float _initialSpawnSpeed; + private const float MAX_SPAWN_SPEED = 0.01f; + private const float RANDOM_MODIFIER = 5.0f; public override void LevelStart() @@ -23,7 +26,6 @@ public class SpawnerTile : LevelTile, IWaveSubject if (_spawnOnStart && _lifetime <= 0) { _prefab.Create(Position, parent: LevelManager.Instance.LevelTransform); - _observer.NotifySpawned(this); } } @@ -35,6 +37,7 @@ public class SpawnerTile : LevelTile, IWaveSubject _spawnCounter = 0; _prefab.Create(Position, parent: LevelManager.Instance.LevelTransform); + _spawnSpeed = Mathf.Max(_initialSpawnSpeed / Random.Range(0.0f, RANDOM_MODIFIER), MAX_SPAWN_SPEED); _observer.NotifySpawned(this); } public override bool Equals(ILevelObject other) @@ -55,6 +58,12 @@ public class SpawnerTile : LevelTile, IWaveSubject dict[nameof(_spawnOnStart)] = _spawnOnStart; return dict; } + + internal void StopSpawn() + { + _spawnSpeed = 0.0f; + } + public override void LoadDictionary(Dictionary dict) { base.LoadDictionary(dict); @@ -79,5 +88,9 @@ public class SpawnerTile : LevelTile, IWaveSubject } } - public float SpawnSpeed { set { _spawnSpeed = value; } } + public void InitialSpawnSpeed(float value) + { + _initialSpawnSpeed = value; + _spawnSpeed = Mathf.Max(_initialSpawnSpeed / Random.Range(0.0f, RANDOM_MODIFIER - 2.0f), MAX_SPAWN_SPEED); + } } \ No newline at end of file