private void CreateNewLevelAfter(int? index = null) {
        var spawners = LevelSettings.GetAllSpawners;

        var newLevel = new LevelSpecifics();
        var newWave = new LevelWave();
        newLevel.WaveSettings.Add(newWave);

        int newLevelIndex;

        if (index == null) {
            newLevelIndex = _settings.LevelTimes.Count;
        } else {
            newLevelIndex = index.Value + 1;
        }

        UndoHelper.RecordObjectPropertyForUndo(ref _isDirty, _settings, "Add Level");

        _settings.LevelTimes.Insert(newLevelIndex, newLevel);

        foreach (var spawner in spawners) {
            var spawnerScript = spawner.GetComponent<WaveSyncroPrefabSpawner>();
            spawnerScript.InsertLevel(newLevelIndex);
        }
    }
    private static void DeleteWave(LevelSpecifics spec, int waveToDelete, int levelNumber) {
        var spawners = LevelSettings.GetAllSpawners;

        var spawnerScripts = new List<WaveSyncroPrefabSpawner>();
        foreach (var s in spawners) {
            spawnerScripts.Add(s.GetComponent<WaveSyncroPrefabSpawner>());
        }

        spec.WaveSettings.RemoveAt(waveToDelete);

        foreach (var script in spawnerScripts) {
            script.DeleteWave(levelNumber, waveToDelete);
        }
    }
    private static void CloneWave(LevelSpecifics spec, int waveToInsertAt, int level) {
        var spawners = LevelSettings.GetAllSpawners;

        var newWave = spec.WaveSettings[waveToInsertAt].Clone();

        waveToInsertAt++;
        spec.WaveSettings.Insert(waveToInsertAt, newWave);

        foreach (var spawner in spawners) {
            var spawnerScript = spawner.GetComponent<WaveSyncroPrefabSpawner>();
            spawnerScript.InsertWave(waveToInsertAt, level);
        }
    }