コード例 #1
0
        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);
        }
コード例 #3
0
        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);
        }