using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
public List<Enemy> enemies = new List<Enemy>();
public int currWave;
public int WaveValue;
public List<GameObject> enimesToSpawn = new List<GameObject>();
public List<GameObject> EnimesToKill = new List<GameObject>();
public Transform SpawnLocation;
public int WaveDuration;
private float WaveTimer;
public float SpawnInterval;
private float SpawnTimer;
void Start()
{
GenerateWave();
}
private void Update()
{
if(EnimesToKill.Count == 0)
{
currWave += 1;
}
}
// Update is called once per frame
void FixedUpdate()
{
if(SpawnTimer <= 0f)
{
if(enimesToSpawn.Count > 0)
{
Instantiate(enimesToSpawn[0], SpawnLocation.position, Quaternion.identity);
EnimesToKill.Add(enimesToSpawn[0].gameObject);
enimesToSpawn.RemoveAt(0);
SpawnTimer = SpawnInterval;
}
else
{
WaveTimer = 0;
}
}
else
{
SpawnTimer -= Time.fixedDeltaTime;
WaveTimer -= Time.fixedDeltaTime;
}
}
public void GenerateWave()
{
WaveValue = currWave * 10;
GenerateEnemies();
SpawnInterval = WaveDuration / enimesToSpawn.Count;
WaveTimer = WaveDuration;
}
public void GenerateEnemies()
{
List<GameObject> GeneratedEnimes = new List<GameObject>();
while(WaveValue > 0)
{
int randomEnemy = Random.Range(0, enemies.Count);
int RandEnemyCost = enemies[randomEnemy].Cost;
if(WaveValue - RandEnemyCost >= 0)
{
GeneratedEnimes.Add(enemies[randomEnemy].EnemyPrefab);
WaveValue -= RandEnemyCost;
}
else
{
if(WaveValue - RandEnemyCost <= 0)
{
break;
}
}
}
enimesToSpawn.Clear();
enimesToSpawn = GeneratedEnimes;
}
}
[System.Serializable ]
public class Enemy
{
public GameObject EnemyPrefab;
public int Cost;
}