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_CustomBeatmapLevel(Beatmap p_BeatMap, CustomPreviewBeatmapLevel customPreviewBeatmapLevel, AudioClip previewAudioClip)
            : base(customPreviewBeatmapLevel, previewAudioClip)
        {
            List <IDifficultyBeatmapSet> l_IDifficultyBeatmapSet = new List <IDifficultyBeatmapSet>();

            foreach (var l_Current in p_BeatMap.Metadata.Characteristics)
            {
                if (l_Current.Difficulties.Count == 0)
                {
                    continue;
                }

                var l_Entry = new BeatSaver_DifficultyBeatmapSet(
                    this,
                    SongCore.Loader.beatmapCharacteristicCollection.GetBeatmapCharacteristicBySerializedName(l_Current.Name),
                    l_Current
                    );

                l_IDifficultyBeatmapSet.Add(l_Entry);
            }

            SetBeatmapLevelData(new BeatmapLevelData(null, l_IDifficultyBeatmapSet.ToArray()));
        }