aboutsummaryrefslogtreecommitdiff
path: root/td/Assets/Scripts/waveSpawner.cs
diff options
context:
space:
mode:
authorJakob Stendahl <jakob.stendahl@outlook.com>2017-10-14 22:07:19 +0200
committerJakob Stendahl <jakob.stendahl@outlook.com>2017-10-14 22:07:19 +0200
commitfae01da58dbea66af402807d7409fa53602f71fa (patch)
treed36ddc2874f4e9fa2e08d778731301591b4cf6ee /td/Assets/Scripts/waveSpawner.cs
parent34d9955d2fcf232994ae6549b10e670c920b4ec9 (diff)
downloadTD-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.cs92
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