internal BeatSaver_DifficultyBeatmap(BeatSaver_DifficultyBeatmapSet p_Parent, BeatSaver_CustomBeatmapLevel p_BSBeatmapLevel, BeatmapCharacteristicSO p_CharacteristicSO, BeatmapDifficulty p_Difficulty, BeatmapCharacteristicDifficulty p_CharacteristicDifficulty)
        {
            level = p_BSBeatmapLevel;
            parentDifficultyBeatmapSet = p_Parent;
            difficulty              = p_Difficulty;
            noteJumpMovementSpeed   = p_CharacteristicDifficulty.NoteJumpSpeed;
            noteJumpStartBeatOffset = p_CharacteristicDifficulty.NoteJumpSpeedOffset;
            beatmapData             = new BeatmapData(4);

            /// From DefaultRating
            switch (p_Difficulty)
            {
            case BeatmapDifficulty.Easy:        difficultyRank = 1; break;

            case BeatmapDifficulty.Normal:      difficultyRank = 3; break;

            case BeatmapDifficulty.Hard:        difficultyRank = 5; break;

            case BeatmapDifficulty.Expert:      difficultyRank = 7; break;

            case BeatmapDifficulty.ExpertPlus:  difficultyRank = 9; break;
            }

            for (int l_I = 0; l_I < p_CharacteristicDifficulty.Notes; ++l_I)
            {
                beatmapData.AddBeatmapObjectData(NoteData.CreateBasicNoteData(0f, 0, NoteLineLayer.Base, ColorType.ColorA, NoteCutDirection.Any));
            }
        }
        internal BeatSaver_DifficultyBeatmapSet(BeatSaver_CustomBeatmapLevel p_BSBeatmapLevel, BeatmapCharacteristicSO p_CharacteristicSO, BeatmapCharacteristic p_Characteristic)
        {
            beatmapCharacteristic = p_CharacteristicSO;

            List <IDifficultyBeatmap> l_Difficulties = new List <IDifficultyBeatmap>();

            foreach (var l_Current in p_Characteristic.Difficulties)
            {
                if (!l_Current.Value.HasValue)
                {
                    continue;
                }

                l_Difficulties.Add(new BeatSaver_DifficultyBeatmap(this, p_BSBeatmapLevel, p_CharacteristicSO, SDK.Game.Level.SerializedToDifficulty(l_Current.Key), l_Current.Value.Value));
            }

            difficultyBeatmaps = l_Difficulties.ToArray();
        }