IEnumerator SpawnGroup()
    {
        var remainingSpawnPoints = _difficulty.DetermineSpawnDifficulty();

        while (remainingSpawnPoints > 0)
        {
            Robber robber = _factory.BuildRandomRobber(remainingSpawnPoints);
            if (robber == null)
            {
                break;
            }
            remainingSpawnPoints -= robber.SpawnCost;
            _spawner.AddToQueue(new SpawnData(robber, DeterminePath()));
            yield return(null);
        }
    }
    public void SpawnNext()
    {
        if (_currentHeistIndex == _heists.Length - 1)
        {
            print("Final wave. Pause all income, prevent build mode etc???");
        }

        GrandHeist heist         = _heists[_currentHeistIndex];
        var        spawnCurrency = heist.AdditionalSpawnCurrency;

        List <Robber> robbersToSpawn = new List <Robber>();

        foreach (var rd in heist.RobbersInHeist)
        {
            var robber = _factory.BuildRobber(rd);
            ApplyAbilities(heist, robber);
            robbersToSpawn.Add(robber);
        }

        while (spawnCurrency > 0)
        {
            Robber robber = _factory.BuildRandomRobber(spawnCurrency);
            if (robber == null)
            {
                break;
            }
            spawnCurrency -= robber.SpawnCost;
            ApplyAbilities(heist, robber);
            robbersToSpawn.Add(robber);
        }

        // Trigger heist animation

        // On heist animation end

        _spawnController.SpawnGroup(robbersToSpawn);

        _currentHeistIndex++;
    }