public static WavePrefabPoolItem CloneWavePrefabPoolItem(WavePrefabPoolItem sourceItem)
    {
        var clone = new WavePrefabPoolItem {
            prefabToSpawn      = sourceItem.prefabToSpawn,
            activeMode         = sourceItem.activeMode,
            activeItemCriteria = sourceItem.activeItemCriteria,
            isExpanded         = sourceItem.isExpanded
        };

        KillerVariablesHelper.CloneKillerInt(clone.thisWeight, sourceItem.thisWeight);

        return(clone);
    }
    public static LevelWave CloneLevelWave(LevelWave levelWave)
    {
        var clone = new LevelWave {
            pauseGlobalWavesWhenCompleted = levelWave.pauseGlobalWavesWhenCompleted,
            waveType                    = levelWave.waveType,
            skipWaveType                = levelWave.skipWaveType,
            skipWavePassCriteria        = levelWave.skipWavePassCriteria,
            waveName                    = levelWave.waveName,
            musicSettings               = levelWave.musicSettings,
            WaveDuration                = levelWave.WaveDuration,
            endEarlyIfAllDestroyed      = levelWave.endEarlyIfAllDestroyed,
            waveBeatBonusesEnabled      = levelWave.waveBeatBonusesEnabled,
            useCompletionEvents         = levelWave.useCompletionEvents,
            completionCustomEvents      = levelWave.completionCustomEvents,
            waveDefeatVariableModifiers = levelWave.waveDefeatVariableModifiers,
            isExpanded                  = levelWave.isExpanded,
            useSpawnBonusPrefab         = levelWave.useSpawnBonusPrefab,
            bonusPrefabCategoryName     = levelWave.bonusPrefabCategoryName,
            bonusPrefabPoolIndex        = levelWave.bonusPrefabPoolIndex,
            bonusPrefabPoolName         = levelWave.bonusPrefabPoolName,
            bonusPrefabSource           = levelWave.bonusPrefabSource,
            bonusPrefabSpecific         = levelWave.bonusPrefabSpecific,
            spawnerUseMode              = levelWave.spawnerUseMode,
            spawnersToUseMax            = levelWave.spawnersToUseMax,
            spawnersToUseMin            = levelWave.spawnersToUseMin,
            waveClass                   = levelWave.waveClass,
            waveDescription             = levelWave.waveDescription,
            waveDurationFlex            = levelWave.waveDurationFlex,
            useTriggeredSpawners        = levelWave.useTriggeredSpawners,
            trigSpawnerWavesToAwait     = levelWave.trigSpawnerWavesToAwait
        };

        KillerVariablesHelper.CloneKillerInt(clone.bonusPrefabSpawnPercent, levelWave.bonusPrefabSpawnPercent);
        KillerVariablesHelper.CloneKillerInt(clone.bonusPrefabQty, levelWave.bonusPrefabQty);
        KillerVariablesHelper.CloneKillerInt(clone.waveDurationFlex, levelWave.waveDurationFlex);

        return(clone);
    }
    public static WaveSpecifics CloneWave(WaveSpecifics sourceWave)
    {
        var clone = new WaveSpecifics {
            isExpanded             = sourceWave.isExpanded,
            enableWave             = sourceWave.enableWave,
            visualizeWave          = sourceWave.visualizeWave,
            SpawnLevelNumber       = sourceWave.SpawnLevelNumber,
            SpawnWaveNumber        = sourceWave.SpawnWaveNumber,
            prefabToSpawn          = sourceWave.prefabToSpawn,
            spawnSource            = sourceWave.spawnSource,
            prefabPoolIndex        = sourceWave.prefabPoolIndex,
            prefabPoolName         = sourceWave.prefabPoolName,
            repeatWaveUntilNew     = sourceWave.repeatWaveUntilNew,
            waveCompletePercentage = sourceWave.waveCompletePercentage,

            curWaveRepeatMode       = sourceWave.curWaveRepeatMode,
            curTimedRepeatWaveMode  = sourceWave.curTimedRepeatWaveMode,
            resetOnItemLimitReached = sourceWave.resetOnItemLimitReached,
            resetOnTimeLimitReached = sourceWave.resetOnTimeLimitReached,
            repeatPassCriteria      = sourceWave.repeatPassCriteria,

            waveRepeatBonusesEnabled    = sourceWave.waveRepeatBonusesEnabled,
            waveRepeatVariableModifiers = sourceWave.waveRepeatVariableModifiers,
            waveRepeatFireEvents        = sourceWave.waveRepeatFireEvents,
            waveRepeatCustomEvents      = sourceWave.waveRepeatCustomEvents,

            positionExpanded = sourceWave.positionExpanded,
            positionXmode    = sourceWave.positionXmode,
            positionYmode    = sourceWave.positionYmode,
            positionZmode    = sourceWave.positionZmode,

            curRotationMode = sourceWave.curRotationMode,
            customRotation  = sourceWave.customRotation,

            enableLimits = sourceWave.enableLimits,

            enableRandomizations = sourceWave.enableRandomizations,
            randomXRotation      = sourceWave.randomXRotation,
            randomYRotation      = sourceWave.randomYRotation,
            randomZRotation      = sourceWave.randomZRotation,

            enableIncrements = sourceWave.enableIncrements,
            enableKeepCenter = sourceWave.enableKeepCenter,

            waveOffsetList = sourceWave.waveOffsetList,

            enablePostSpawnNudge = sourceWave.enablePostSpawnNudge,
        };

        KillerVariablesHelper.CloneKillerInt(clone.MinToSpwn, sourceWave.MinToSpwn);
        KillerVariablesHelper.CloneKillerInt(clone.MaxToSpwn, sourceWave.MaxToSpwn);
        KillerVariablesHelper.CloneKillerFloat(clone.WaveDelaySec, sourceWave.WaveDelaySec);
        KillerVariablesHelper.CloneKillerFloat(clone.TimeToSpawnEntireWave, sourceWave.TimeToSpawnEntireWave);
        KillerVariablesHelper.CloneKillerFloat(clone.repeatPauseMinimum, sourceWave.repeatPauseMinimum);
        KillerVariablesHelper.CloneKillerFloat(clone.repeatPauseMaximum, sourceWave.repeatPauseMaximum);
        KillerVariablesHelper.CloneKillerInt(clone.repeatItemInc, sourceWave.repeatItemInc);
        KillerVariablesHelper.CloneKillerInt(clone.repeatItemMinLmt, sourceWave.repeatItemMinLmt);
        KillerVariablesHelper.CloneKillerInt(clone.repeatItemLmt, sourceWave.repeatItemLmt);
        KillerVariablesHelper.CloneKillerFloat(clone.repeatTimeInc, sourceWave.repeatTimeInc);
        KillerVariablesHelper.CloneKillerFloat(clone.repeatTimeMinLmt, sourceWave.repeatTimeMinLmt);
        KillerVariablesHelper.CloneKillerFloat(clone.repeatTimeLmt, sourceWave.repeatTimeLmt);
        KillerVariablesHelper.CloneKillerInt(clone.repetitionsToDo, sourceWave.repetitionsToDo);
        KillerVariablesHelper.CloneKillerFloat(clone.customPosX, sourceWave.customPosX);
        KillerVariablesHelper.CloneKillerFloat(clone.customPosY, sourceWave.customPosY);
        KillerVariablesHelper.CloneKillerFloat(clone.customPosZ, sourceWave.customPosZ);
        KillerVariablesHelper.CloneKillerFloat(clone.doNotSpawnIfMbrCloserThan, sourceWave.doNotSpawnIfMbrCloserThan);
        KillerVariablesHelper.CloneKillerFloat(clone.doNotSpawnRandomDist, sourceWave.doNotSpawnRandomDist);
        KillerVariablesHelper.CloneKillerFloat(clone.randomDistX, sourceWave.randomDistX);
        KillerVariablesHelper.CloneKillerFloat(clone.randomDistY, sourceWave.randomDistY);
        KillerVariablesHelper.CloneKillerFloat(clone.randomDistZ, sourceWave.randomDistZ);
        KillerVariablesHelper.CloneKillerFloat(clone.randomXRotMin, sourceWave.randomXRotMin);
        KillerVariablesHelper.CloneKillerFloat(clone.randomXRotMax, sourceWave.randomXRotMax);
        KillerVariablesHelper.CloneKillerFloat(clone.randomYRotMin, sourceWave.randomYRotMin);
        KillerVariablesHelper.CloneKillerFloat(clone.randomYRotMax, sourceWave.randomYRotMax);
        KillerVariablesHelper.CloneKillerFloat(clone.randomZRotMin, sourceWave.randomZRotMin);
        KillerVariablesHelper.CloneKillerFloat(clone.randomZRotMax, sourceWave.randomZRotMax);
        KillerVariablesHelper.CloneKillerFloat(clone.incrementPositionX, sourceWave.incrementPositionX);
        KillerVariablesHelper.CloneKillerFloat(clone.incrementPositionY, sourceWave.incrementPositionY);
        KillerVariablesHelper.CloneKillerFloat(clone.incrementPositionZ, sourceWave.incrementPositionZ);
        KillerVariablesHelper.CloneKillerFloat(clone.incrementRotX, sourceWave.incrementRotX);
        KillerVariablesHelper.CloneKillerFloat(clone.incrementRotY, sourceWave.incrementRotY);
        KillerVariablesHelper.CloneKillerFloat(clone.incrementRotZ, sourceWave.incrementRotZ);
        KillerVariablesHelper.CloneKillerFloat(clone.postSpawnNudgeFwd, sourceWave.postSpawnNudgeFwd);
        KillerVariablesHelper.CloneKillerFloat(clone.postSpawnNudgeRgt, sourceWave.postSpawnNudgeRgt);
        KillerVariablesHelper.CloneKillerFloat(clone.postSpawnNudgeDwn, sourceWave.postSpawnNudgeDwn);

        return(clone);
    }