WaveSpawnerCode

 avatar
unknown
plain_text
2 years ago
2.5 kB
4
Indexable
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;

}