Exemple #1
0
 private static void Postfix(int noteLineIndex, NoteLineLayer noteLineLayer, ref Vector3 __result, int ____noteLinesCount, Vector3 ____rightVec)
 {
     if (!Plugin.active)
     {
         return;
     }
     if (noteLineIndex is >= 1000 or <= -1000)
     {
         if (noteLineIndex <= -1000)
         {
             noteLineIndex += 2000;
         }
         float num = -(____noteLinesCount - 1f) * 0.5f;
         num     += noteLineIndex * (StaticBeatmapObjectSpawnMovementData.kNoteLinesDistance / 1000);
         __result = ____rightVec * num + new Vector3(0f, StaticBeatmapObjectSpawnMovementData.LineYPosForLineLayer(noteLineLayer), 0f);
     }
 }
Exemple #2
0
 private static void Postfix(int noteLineIndex, NoteLineLayer noteLineLayer, ref Vector2 __result, int ____noteLinesCount)
 {
     if (!Plugin.active)
     {
         return;
     }
     if (noteLineIndex is >= 1000 or <= -1000)
     {
         if (noteLineIndex <= -1000)
         {
             noteLineIndex += 2000;
         }
         float num = -(____noteLinesCount - 1f) * 0.5f;
         float x   = num + noteLineIndex * (StaticBeatmapObjectSpawnMovementData.kNoteLinesDistance / 1000);
         float y   = StaticBeatmapObjectSpawnMovementData.LineYPosForLineLayer(noteLineLayer);
         __result = new Vector2(x, y);
     }
 }
        private static void Postfix(BeatmapObjectsInTimeRowProcessor.TimeSliceContainer <BeatmapDataItem> allObjectsTimeSlice, int ____numberOfLines)
        {
            IEnumerable <NoteData>   enumerable  = TimeSliceContainerItemsAccessor(ref allObjectsTimeSlice).OfType <NoteData>();
            IEnumerable <SliderData> enumerable2 = TimeSliceContainerItemsAccessor(ref allObjectsTimeSlice).OfType <SliderData>();
            IEnumerable <BeatmapObjectsInTimeRowProcessor.SliderTailData> enumerable3 = TimeSliceContainerItemsAccessor(ref allObjectsTimeSlice).OfType <BeatmapObjectsInTimeRowProcessor.SliderTailData>();

            if (!enumerable.Any(x => x.lineIndex > 3 || x.lineIndex < 0))
            {
                return;
            }
            Dictionary <int, List <NoteData> > notesInColumnsReusableProcessingDictionaryOfLists = new Dictionary <int, List <NoteData> >();

            foreach (NoteData noteData in enumerable)
            {
                if (!notesInColumnsReusableProcessingDictionaryOfLists.ContainsKey(noteData.lineIndex))
                {
                    notesInColumnsReusableProcessingDictionaryOfLists[noteData.lineIndex] = new List <NoteData>(3);
                }
                List <NoteData> list = notesInColumnsReusableProcessingDictionaryOfLists[noteData.lineIndex];
                bool            flag = false;
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i].noteLineLayer > noteData.noteLineLayer)
                    {
                        list.Insert(i, noteData);
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    list.Add(noteData);
                }
            }
            foreach (List <NoteData> list in notesInColumnsReusableProcessingDictionaryOfLists.Values)
            {
                for (int j = 0; j < list.Count; j++)
                {
                    list[j].SetBeforeJumpNoteLineLayer((NoteLineLayer)j);
                }
            }
            foreach (SliderData sliderData in enumerable2)
            {
                foreach (NoteData noteData2 in enumerable)
                {
                    if (SliderHeadPositionOverlapsWithNote(sliderData, noteData2))
                    {
                        sliderData.SetHasHeadNote(true);
                        sliderData.SetHeadBeforeJumpLineLayer(noteData2.beforeJumpNoteLineLayer);
                        if (sliderData.sliderType == SliderData.Type.Burst)
                        {
                            noteData2.ChangeToBurstSliderHead();
                            if (noteData2.cutDirection == sliderData.tailCutDirection)
                            {
                                Vector2 line = StaticBeatmapObjectSpawnMovementData.Get2DNoteOffset(noteData2.lineIndex, ____numberOfLines, noteData2.noteLineLayer) - StaticBeatmapObjectSpawnMovementData.Get2DNoteOffset(sliderData.tailLineIndex, ____numberOfLines, sliderData.tailLineLayer);
                                float   num  = noteData2.cutDirection.Direction().SignedAngleToLine(line);
                                if (Mathf.Abs(num) <= 40f)
                                {
                                    noteData2.SetCutDirectionAngleOffset(num);
                                    sliderData.SetCutDirectionAngleOffset(num, num);
                                }
                            }
                        }
                        else
                        {
                            noteData2.ChangeToSliderHead();
                        }
                    }
                }
            }
            foreach (BeatmapObjectsInTimeRowProcessor.SliderTailData sliderTailData in enumerable3)
            {
                SliderData slider = sliderTailData.slider;
                foreach (NoteData noteData3 in enumerable)
                {
                    if (SliderTailPositionOverlapsWithNote(slider, noteData3))
                    {
                        slider.SetHasTailNote(true);
                        slider.SetTailBeforeJumpLineLayer(noteData3.beforeJumpNoteLineLayer);
                        noteData3.ChangeToSliderTail();
                    }
                }
            }
        }