void EventHappened(BeatmapEventData Data) { //Logger.log.Info(Data.type.ToString()); int Event; int value = Data.value; int.TryParse(Data.type.ToString().Replace("Event", ""), out Event); int light; //legacy chroma events save rgb in value attribute if (value > 2000000) { light = (Event << 4) + COLOR_ONLY_VALUE; //set value to something unused. Controller will only set light } else { //save event + value as one byte if (value > 15) { Event = 15; } light = (Event << 4) + value; } if (_lightTypes.Contains(Event)) { // color 0 is no color byte color = 0; if (Data is CustomBeatmapEventData) { CustomBeatmapEventData customData = Data as CustomBeatmapEventData; dynamic data = customData.customData; Color? colorData = GetColorFromData(data); if (colorData != null || value > 2000000) { //legacy chroma if (value > 2000000) { colorData = ColorFromInt(value); } Color32?To256Base = colorData; Logger.log.Debug(To256Base.ToString()); int onebytecolor = ((To256Base.Value.r / 32) << 5) + ((To256Base.Value.g / 32) << 2) + (To256Base.Value.b / 64); color = (byte)onebytecolor; } Logger.log.Debug(Event.ToString() + " // " + value.ToString() + " // " + color.ToString()); } port.Write(new byte[] { (byte)light, (byte)color }, 0, 2); } }
static bool Prefix(BeatmapData beatmapData, ref BeatmapData __result) { MethodInfo MirrorTransformBeatmapObjects = typeof(BeatDataMirrorTransform).GetMethod("MirrorTransformBeatmapObjects", BindingFlags.Static | BindingFlags.NonPublic); BeatmapLineData[] beatmapLinesData = beatmapData.beatmapLinesData; int[] array = new int[beatmapLinesData.Length]; for (int i = 0; i < array.Length; i++) { array[i] = 0; } int num = 0; for (int j = 0; j < beatmapLinesData.Length; j++) { num += beatmapLinesData[j].beatmapObjectsData.Length; } List <BeatmapObjectData> list = new List <BeatmapObjectData>(num); bool flag; do { flag = false; float num2 = 999999f; int num3 = 0; for (int k = 0; k < beatmapLinesData.Length; k++) { BeatmapObjectData[] beatmapObjectsData = beatmapLinesData[k].beatmapObjectsData; int num4 = array[k]; if (num4 < beatmapObjectsData.Length) { flag = true; float time = beatmapObjectsData[num4].time; if (time < num2) { num2 = time; num3 = k; } } } if (flag) { list.Add(beatmapLinesData[num3].beatmapObjectsData[array[num3]].GetCopy()); array[num3]++; } }while (flag); MirrorTransformBeatmapObjects.Invoke(null, new object[] { list, beatmapData.beatmapLinesData.Length }); int[] array2 = new int[beatmapLinesData.Length]; for (int l = 0; l < list.Count; l++) { BeatmapObjectData beatmapObjectData = list[l]; array2[beatmapObjectData.lineIndex]++; } BeatmapLineData[] array3 = new BeatmapLineData[beatmapLinesData.Length]; for (int m = 0; m < beatmapLinesData.Length; m++) { array3[m] = new BeatmapLineData(); array3[m].beatmapObjectsData = new BeatmapObjectData[array2[m]]; array[m] = 0; } for (int n = 0; n < list.Count; n++) { BeatmapObjectData beatmapObjectData2 = list[n]; int lineIndex = beatmapObjectData2.lineIndex; array3[lineIndex].beatmapObjectsData[array[lineIndex]] = beatmapObjectData2; array[lineIndex]++; } CustomBeatmapEventData[] array4 = new CustomBeatmapEventData[beatmapData.beatmapEventData.Length]; for (int num5 = 0; num5 < beatmapData.beatmapEventData.Length; num5++) { CustomBeatmapEventData beatmapEventData = beatmapData.beatmapEventData[num5] as CustomBeatmapEventData; if (beatmapEventData == null) { continue; } if (beatmapEventData.type.IsRotationEvent()) { int value = 7 - beatmapEventData.value; array4[num5] = new CustomBeatmapEventData(beatmapEventData.time, beatmapEventData.type, value, beatmapEventData.customData ?? Tree()); } else { array4[num5] = beatmapEventData; } } if (beatmapData is CustomBeatmapData customBeatmap) { __result = new CustomBeatmapData(array3, array4, customBeatmap.customEventData, customBeatmap.beatmapCustomData, customBeatmap.levelCustomData); } else { __result = new BeatmapData(array3, array4); } return(false); }
static bool Prefix(BeatmapData beatmapData, GameplayModifiers.EnabledObstacleType enabledObstaclesType, bool noBombs, ref BeatmapData __result) { MethodInfo ShouldUseBeatmapObject = typeof(BeatmapDataObstaclesAndBombsTransform).GetMethod("ShouldUseBeatmapObject", BindingFlags.Static | BindingFlags.NonPublic); BeatmapLineData[] beatmapLinesData = beatmapData.beatmapLinesData; int[] array = new int[beatmapLinesData.Length]; for (int i = 0; i < array.Length; i++) { array[i] = 0; } int num = 0; for (int j = 0; j < beatmapLinesData.Length; j++) { num += beatmapLinesData[j].beatmapObjectsData.Length; } List <BeatmapObjectData> list = new List <BeatmapObjectData>(num); bool flag; do { flag = false; float num2 = 999999f; int num3 = 0; for (int k = 0; k < beatmapLinesData.Length; k++) { BeatmapObjectData[] beatmapObjectsData = beatmapLinesData[k].beatmapObjectsData; int num4 = array[k]; if (num4 < beatmapObjectsData.Length) { flag = true; float time = beatmapObjectsData[num4].time; if (time < num2) { num2 = time; num3 = k; } } } if (flag) { if (Convert.ToBoolean(ShouldUseBeatmapObject.Invoke(null, new object[] { beatmapLinesData[num3].beatmapObjectsData[array[num3]], enabledObstaclesType, noBombs }))) { list.Add(beatmapLinesData[num3].beatmapObjectsData[array[num3]].GetCopy()); } array[num3]++; } }while (flag); int[] array2 = new int[beatmapLinesData.Length]; for (int l = 0; l < list.Count; l++) { BeatmapObjectData beatmapObjectData = list[l]; array2[beatmapObjectData.lineIndex]++; } BeatmapLineData[] array3 = new BeatmapLineData[beatmapLinesData.Length]; for (int m = 0; m < beatmapLinesData.Length; m++) { array3[m] = new BeatmapLineData(); array3[m].beatmapObjectsData = new BeatmapObjectData[array2[m]]; array[m] = 0; } for (int n = 0; n < list.Count; n++) { BeatmapObjectData beatmapObjectData2 = list[n]; int lineIndex = beatmapObjectData2.lineIndex; array3[lineIndex].beatmapObjectsData[array[lineIndex]] = beatmapObjectData2; array[lineIndex]++; } CustomBeatmapEventData[] array4 = new CustomBeatmapEventData[beatmapData.beatmapEventData.Length]; for (int num5 = 0; num5 < beatmapData.beatmapEventData.Length; num5++) { CustomBeatmapEventData beatmapEventData = beatmapData.beatmapEventData[num5] as CustomBeatmapEventData; if (beatmapEventData == null) { continue; } array4[num5] = beatmapEventData; } if (beatmapData is CustomBeatmapData customBeatmap) { __result = new CustomBeatmapData(array3, array4, customBeatmap.customEventData, customBeatmap.beatmapCustomData, customBeatmap.levelCustomData); } else { __result = new BeatmapData(array3, array4); } return(false); }