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); } }
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(); } } } }