diff options
author | Jakob Stendahl <jakob.stendahl@outlook.com> | 2017-10-14 22:07:19 +0200 |
---|---|---|
committer | Jakob Stendahl <jakob.stendahl@outlook.com> | 2017-10-14 22:07:19 +0200 |
commit | fae01da58dbea66af402807d7409fa53602f71fa (patch) | |
tree | d36ddc2874f4e9fa2e08d778731301591b4cf6ee /td/Assets/Scripts/waveSpawner.cs | |
parent | 34d9955d2fcf232994ae6549b10e670c920b4ec9 (diff) | |
download | TD-fae01da58dbea66af402807d7409fa53602f71fa.tar.gz TD-fae01da58dbea66af402807d7409fa53602f71fa.zip |
Finished wavesystem. Should improve graph for how many enemies should spawn each time
Diffstat (limited to 'td/Assets/Scripts/waveSpawner.cs')
-rw-r--r-- | td/Assets/Scripts/waveSpawner.cs | 92 |
1 files changed, 81 insertions, 11 deletions
diff --git a/td/Assets/Scripts/waveSpawner.cs b/td/Assets/Scripts/waveSpawner.cs index 73c0bc3..3a6d7d4 100644 --- a/td/Assets/Scripts/waveSpawner.cs +++ b/td/Assets/Scripts/waveSpawner.cs @@ -6,16 +6,38 @@ using UnityEngine.UI; public class WaveSpawner : MonoBehaviour { + [Header("Attributes")] + public float TimeBetweenWaves; + public float SpawnRate; + + [Header("Objects")] public Transform SpawnPoint; + public Transform PathWay; public Text WaveCountdownText; - public float TimeBetweenWaves = 5f; + + [Header("Every possible enemy")] + public EnemyType[] Enemies; + [Header("Scripting vars")] public Player Player; // Reference to the player object, should be set in designer + private Transform _parentObject; + private List<Vector3> _waypoints = new List<Vector3>(); + public static int EnemiesAlive = 0; private float _countdown = 2f; private int _waveIndex = 0; + void Awake() { + foreach (Transform child in PathWay) { + _waypoints.Add (child.position); + } + } + + void Start() { + _parentObject = transform.Find ("enemies").gameObject.GetComponent <Transform> (); + } + void Update () { if (EnemiesAlive > 0) { return; @@ -32,24 +54,72 @@ public class WaveSpawner : MonoBehaviour { //waveCountdownText.text = string.Format("{0:00.00}", countdown); } + private int WaveEnemyCount(int waveNum) { + // 10.64 * e^0,57x + float pow = (float) Math.Pow( Math.E, 0.57f * waveNum); + return (int) Math.Floor(10.64f * pow); + } + + private float EnemyAmountThing(int currentEnemy, int maxTypes) { + // TODO Change the for loop into a faster method + float rest = 1; + + for (int i=1; i <= maxTypes; i++) { + if (i != maxTypes) { rest = rest / 2; } + if (i == currentEnemy + 1) { return rest; } + } + + return 0; + } + IEnumerator SpawnWave () { - int waveNum = 1; - int gdshj = Mathf.FloorToInt(10.64 * (Math.Pow(Math.E, (0.57 * waveNum))))); + int enemiesToSpawn = WaveEnemyCount(_waveIndex); + EnemiesAlive = enemiesToSpawn; + List<WaveElement> wave = new List<WaveElement>(); + + for (int i = 0; i < Enemies.Length; i++) { + EnemyType enemy = Enemies[i]; - EnemiesAlive = wave.Count; + float amount = enemiesToSpawn * EnemyAmountThing(i, Enemies.Length); + if (amount >= 1) { + wave.Add(new WaveElement {Prefab = enemy.Enemy, Amount = (int)Math.Floor(amount)} ); + } + + } - for (int i = 0; i < wave.Count; i++) - { - SpawnEnemy(wave.Enemy); - yield return new WaitForSeconds(1f / wave.Rate); + foreach (var enemyType in wave) { + for (int i = 0; i < enemyType.Amount; i++) { + SpawnEnemy(enemyType.Prefab); + yield return new WaitForSeconds(1f / SpawnRate); + } + yield return new WaitForSeconds(1f / 100f); } + SpawnRate = SpawnRate * 2; _waveIndex++; } - void SpawnEnemy (GameObject enemy) - { - Instantiate(enemy, SpawnPoint.position, SpawnPoint.rotation); + void SpawnEnemy (GameObject enemyPrefab) { + GameObject newEnemy = Instantiate (enemyPrefab, new Vector3(0, 0, 0), Quaternion.identity, _parentObject); + Enemy script = newEnemy.GetComponent <Enemy> (); + Transform transform = newEnemy.GetComponent <Transform>(); + + script.Waypoints = _waypoints; + script.Player = Player; + transform.position = new Vector3 (0.93f, 0.483f, 0f); + } + + [System.Serializable] + public class EnemyType { + public string Name; + public GameObject Enemy; + [Range(0, 1)] + public float Percentage; } + public class WaveElement { + public GameObject Prefab { get; set; } + public int Amount { get; set; } + } + }
\ No newline at end of file |