using Penguloon.Enemies; using System; using System.Collections.Generic; using System.Threading; namespace Penguloon.Levels { public class WaveManager { public List Waves { get; set; } = new List(); public Map Map { get; set; } public int CurrentWave { get; set; } = 1; public bool RoundActive { get; set; } public bool DoneSpawning { get; set; } = false; public WaveManager(Map map) { this.Map = map; CreateWaves(); } private void CreateWaves() { /* 1 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(RedBalloon), 10) }, 1000)); /* 2 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(RedBalloon), 25) }, 1000)); /* 3 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(RedBalloon), 25), new Tuple(typeof(BlueBalloon), 7) }, 1000)); /* 4 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(RedBalloon), 25), new Tuple(typeof(BlueBalloon), 12) }, 1000)); /* 5 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(RedBalloon), 7), new Tuple(typeof(BlueBalloon), 20) }, 1000)); /* 6 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(YellowBalloon), 10) }, 800)); /* 7 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(YellowBalloon), 25) }, 800)); /* 8 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(YellowBalloon), 25), new Tuple(typeof(GreenBalloon), 7) }, 800)); /* 9 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(YellowBalloon), 25), new Tuple(typeof(GreenBalloon), 12) }, 800)); /* 10 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(YellowBalloon), 7), new Tuple(typeof(GreenBalloon), 20) }, 800)); /* 11 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(OrangeBalloon), 10) }, 500)); /* 12 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(OrangeBalloon), 25) }, 500)); /* 13 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(OrangeBalloon), 25), new Tuple(typeof(PurpleBalloon), 7) }, 500)); /* 14 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(OrangeBalloon), 25), new Tuple(typeof(PurpleBalloon), 12) }, 500)); /* 15 */ Waves.Add(new Wave(new List>() { new Tuple(typeof(OrangeBalloon), 7), new Tuple(typeof(PurpleBalloon), 20) }, 500)); } public void StartSpawningEnemies() { RoundActive = true; DoneSpawning = false; new Thread(() => { Thread.CurrentThread.IsBackground = true; int waveToSpawn = CurrentWave - 1; if (waveToSpawn >= Waves.Count) waveToSpawn = Waves.Count - 1; for (int i = 0; i < Waves[waveToSpawn].EnemiesToSpawn.Count; i++) { for(int x = 0; x < Waves[waveToSpawn].EnemiesToSpawn[i].Item2; x++) { Map.SpawnEnemy(Waves[waveToSpawn].EnemiesToSpawn[i].Item1); Thread.Sleep(Waves[waveToSpawn].SpawnDelayMS / (int)Map.Level.ParentScene.Speed); } } DoneSpawning = true; }).Start(); } internal void FinishRound() { CurrentWave++; } } public class Wave { public int SpawnDelayMS { get; set; } public List> EnemiesToSpawn { get; set; } = new List>(); public Wave(List> EnemiesToSpawn, int SpawnDelayMS) { this.SpawnDelayMS = SpawnDelayMS; this.EnemiesToSpawn = EnemiesToSpawn; } } }