how to make stopping point for waves of enemies.

i have a system for spawning enemies and i want them to stop and for you to win and go back to a different scene, like if you beat 10 waves you win and go back to menu screen. here is the script
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using System.Collections.Generic;

public class SC_EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;


    public SC_DamageReceiver Player;







    public Texture crosshairTexture;
    public float spawnInterval = 2; //Spawn new enemy each n seconds
    public int enemiesPerWave = 5; //How many enemies per wave
    public Transform[] spawnPoints;

    float nextSpawnTime = 0;
    int waveNumber = 1;
    bool waitingForWave = true;
    float newWaveTimer = 0;
    int enemiesToEliminate;
    //How many enemies we already eliminated in the current wave
    int enemiesEliminated = 0;
    int totalEnemiesSpawned = 0;






    // Start is called before the first frame update
    void Start()
    {

        //Wait 10 seconds for new wave to start
        newWaveTimer = 2;
        waitingForWave = true;

    }

    // Update is called once per frame
    void Update()
    {
        if (waitingForWave)
        {
            if (newWaveTimer >= 0)
            {
                newWaveTimer -= Time.deltaTime;
            }
            else
            {
                //Initialize new wave
                enemiesToEliminate = waveNumber * enemiesPerWave;
                enemiesEliminated = 0;
                totalEnemiesSpawned = 0;
                waitingForWave = false;
            }
        }
        else
        {
            if (Time.time > nextSpawnTime)
            {
                nextSpawnTime = Time.time + spawnInterval;

                //Spawn enemy 
                if (totalEnemiesSpawned < enemiesToEliminate)
                {
                    Transform randomPoint = spawnPoints[Random.Range(0, spawnPoints.Length - 1)];

                    GameObject enemy = Instantiate(enemyPrefab, randomPoint.position, Quaternion.identity);
                    SC_NPCEnemy npc = enemy.GetComponent<SC_NPCEnemy>();
                    npc.playerTransform = Player.transform;
                    npc.es = this;
                    totalEnemiesSpawned++;
                }
            }
        }

        if (Player.playerHP <= 0)
        {
            if (Input.GetKeyDown(KeyCode.U))
            {
                Scene scene = SceneManager.GetActiveScene();
                SceneManager.LoadScene(scene.name);
            }
        }
    }

    void OnGUI()
    {
        GUI.Box(new Rect(10, Screen.height - 35, 100, 25), ((int)Player.playerHP).ToString() + " HP");


        if (Player.playerHP <= 0)
        {
            GUI.Box(new Rect(Screen.width / 2 - 75, Screen.height / 2 - 20, 150, 40), "Game Over

Press ‘U’ to Restart");
}
else
{
GUI.DrawTexture(new Rect(Screen.width / 2 - 3, Screen.height / 2 - 3, 6, 6), crosshairTexture);
}

        GUI.Box(new Rect(Screen.width / 2 - 50, 10, 100, 25), (enemiesToEliminate - enemiesEliminated).ToString());

        if (waitingForWave)
        {
            GUI.Box(new Rect(Screen.width / 2 - 125, Screen.height / 4 - 12, 250, 25), "Waiting for Wave " + waveNumber.ToString() + ". " + ((int)newWaveTimer).ToString() + " seconds left...");
        }
    }

    private void NewMethod()
    {
        GUI.Box(new Rect(Screen.width / 2 - 35, Screen.height - 35, 70, 25), Player.weaponManager.selectedWeapon.bulletsPerMagazine.ToString());
    }

    public void EnemyEliminated(SC_NPCEnemy enemy)
    {
        enemiesEliminated++;

        if (enemiesToEliminate - enemiesEliminated <= 0)
        {
            //Start next wave
            newWaveTimer = 2;
            waitingForWave = true;
            waveNumber++;
        }
    }
public static implicit operator SC_EnemySpawner(SC_EnemySpawner1 v)
    {
        throw new System.NotImplementedException();
    }

    public static implicit operator SC_EnemySpawner(SC_EnemySpawner2 v)
    {
        throw new System.NotImplementedException();
    }
}

thanks :slight_smile:

Could use a coroutine in a game controller.

The older space shooter tutorial had good example of using this in the Boundaries, Hazards, and enemies section under the last few Game Controller / Spawning waves.

You’d need to decide what the stopping point will be then add the appropriate “flag” condition to the if statement(s) etc.

If looking to “restart” need a section of code that would “reset” some of your counters.