diff options
Diffstat (limited to 'Thronefall_1_57/Thronefall/Thronefall/Wave.cs')
| -rw-r--r-- | Thronefall_1_57/Thronefall/Thronefall/Wave.cs | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/Thronefall_1_57/Thronefall/Thronefall/Wave.cs b/Thronefall_1_57/Thronefall/Thronefall/Wave.cs new file mode 100644 index 0000000..b6c203e --- /dev/null +++ b/Thronefall_1_57/Thronefall/Thronefall/Wave.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +[Serializable] +public class Wave +{ + [TextArea] + public string warningText; + + public List<Spawn> spawns = new List<Spawn>(); + + public Wave() + { + } + + public Wave(List<Spawn> _spawns) + { + spawns = _spawns; + } + + public Wave(Spawn _spawn) + { + spawns.Clear(); + spawns.Add(_spawn); + } + + public void Reset(bool _resetGold = true) + { + for (int i = 0; i < spawns.Count; i++) + { + spawns[i].Reset(_resetGold); + } + } + + public void Update() + { + for (int i = 0; i < spawns.Count; i++) + { + spawns[i].Update(); + } + } + + public bool HasFinished() + { + int num = 0; + for (int i = 0; i < spawns.Count; i++) + { + if (spawns[i].Finished) + { + num++; + } + } + if (num >= spawns.Count) + { + return true; + } + return false; + } + + public void ReduceMaxDelayTillNextSpawn() + { + float num = 5f; + float num2 = float.MaxValue; + foreach (Spawn spawn in spawns) + { + if (!spawn.Finished) + { + num2 = Mathf.Min(num2, spawn.waitBeforeNextSpawn); + } + } + float num3 = Mathf.Max(0f, num2 - num); + foreach (Spawn spawn2 in spawns) + { + if (!spawn2.Finished) + { + spawn2.waitBeforeNextSpawn -= num3; + } + } + } + + public void AddInfoToExisting(ref WaveInfo waveInfo) + { + foreach (Spawn spawn in spawns) + { + if (spawn.enemyPrefab == null) + { + continue; + } + ScreenMarkerIcon component = spawn.enemyPrefab.GetComponent<ScreenMarkerIcon>(); + string unitDescription = component.UnitDescription; + string unitName = component.UnitName; + Sprite sprite = component.sprite; + WaveEnemyInfo waveEnemyInfo = null; + foreach (WaveEnemyInfo enemy in waveInfo.enemies) + { + if (enemy.enemyIcon == sprite && enemy.enemyName == unitName && enemy.eliteEnemy == spawn.eliteEnemies) + { + waveEnemyInfo = enemy; + break; + } + } + if (waveEnemyInfo == null) + { + waveEnemyInfo = new WaveEnemyInfo(); + waveEnemyInfo.enemyDescription = unitDescription; + waveEnemyInfo.enemyName = unitName; + waveEnemyInfo.enemyIcon = sprite; + waveEnemyInfo.eliteEnemy = spawn.eliteEnemies; + waveInfo.enemies.Add(waveEnemyInfo); + } + waveInfo.goldReward += spawn.goldCoins; + waveEnemyInfo.enemyCount += spawn.count; + } + } + + public WaveInfo GetWaveInfo() + { + WaveInfo waveInfo = new WaveInfo(); + foreach (Spawn spawn in spawns) + { + if (spawn.enemyPrefab == null) + { + continue; + } + ScreenMarkerIcon component = spawn.enemyPrefab.GetComponent<ScreenMarkerIcon>(); + string unitDescription = component.UnitDescription; + string unitName = component.UnitName; + Sprite sprite = component.sprite; + WaveEnemyInfo waveEnemyInfo = null; + foreach (WaveEnemyInfo enemy in waveInfo.enemies) + { + if (enemy.enemyIcon == sprite && enemy.enemyName == unitName && enemy.eliteEnemy == spawn.eliteEnemies) + { + waveEnemyInfo = enemy; + break; + } + } + if (waveEnemyInfo == null) + { + waveEnemyInfo = new WaveEnemyInfo(); + waveEnemyInfo.enemyDescription = unitDescription; + waveEnemyInfo.enemyName = unitName; + waveEnemyInfo.enemyIcon = sprite; + waveEnemyInfo.eliteEnemy = spawn.eliteEnemies; + waveInfo.enemies.Add(waveEnemyInfo); + } + waveInfo.goldReward += spawn.goldCoins; + waveEnemyInfo.enemyCount += spawn.count; + } + return waveInfo; + } +} |
