コード例 #1
0
        internal static void ColorLightSwitch(MonoBehaviour monobehaviour, BeatmapEventData beatmapEventData)
        {
            if (!ChromaEventDatas.TryGetValue(beatmapEventData, out ChromaEventData chromaEventData))
            {
                return;
            }

            ChromaLightEventData chromaData = (ChromaLightEventData)chromaEventData;

            Color?color = null;

            // legacy was a mistake
            color = LegacyLightHelper.GetLegacyColor(beatmapEventData) ?? color;

            if (monobehaviour is LightSwitchEventEffect lightSwitchEventEffect)
            {
                object lightID = chromaData.LightID;
                if (lightID != null)
                {
                    switch (lightID)
                    {
                    case List <object> lightIDobjects:
                        LightIDOverride = lightIDobjects.Select(n => System.Convert.ToInt32(n)).ToList();

                        break;

                    case long lightIDint:
                        LightIDOverride = new List <int> {
                            (int)lightIDint
                        };

                        break;
                    }
                }

                // propID is now DEPRECATED!!!!!!!!
                object propID = chromaData.PropID;
                if (propID != null)
                {
                    ILightWithId[][] lights = lightSwitchEventEffect.GetLightsPropagationGrouped();
                    int lightCount          = lights.Length;
                    switch (propID)
                    {
                    case List <object> propIDobjects:
                        int[] propIDArray = propIDobjects.Select(n => System.Convert.ToInt32(n)).ToArray();
                        List <ILightWithId> overrideLights = new List <ILightWithId>();
                        for (int i = 0; i < propIDArray.Length; i++)
                        {
                            if (lightCount > propIDArray[i])
                            {
                                overrideLights.AddRange(lights[propIDArray[i]]);
                            }
                        }

                        SetLegacyPropIdOverride(overrideLights.ToArray());

                        break;

                    case long propIDlong:
                        if (lightCount > propIDlong)
                        {
                            SetLegacyPropIdOverride(lights[propIDlong]);
                        }

                        break;
                    }
                }

                ChromaLightEventData.GradientObjectData gradientObject = chromaData.GradientObject;
                if (gradientObject != null)
                {
                    color = ChromaGradientController.AddGradient(gradientObject, beatmapEventData.type, beatmapEventData.time);
                }
            }

            Color?colorData = chromaData.ColorData;

            if (colorData.HasValue)
            {
                color = colorData;
                ChromaGradientController.CancelGradient(beatmapEventData.type);
            }

            if (color.HasValue)
            {
                monobehaviour.SetLightingColors(color.Value, color.Value, color.Value, color.Value);
            }
            else if (!ChromaGradientController.IsGradientActive(beatmapEventData.type))
            {
                monobehaviour.Reset();
            }
        }
コード例 #2
0
ファイル: ChromaEventData.cs プロジェクト: Pixelguymm/Chroma
        internal static void DeserializeBeatmapData(IReadonlyBeatmapData beatmapData)
        {
            ChromaEventDatas = new Dictionary <BeatmapEventData, ChromaEventData>();
            foreach (BeatmapEventData beatmapEventData in beatmapData.beatmapEventsData)
            {
                if (beatmapEventData is CustomBeatmapEventData customBeatmapEventData)
                {
                    ChromaEventData chromaEventData;
                    dynamic         customData = customBeatmapEventData.customData;

                    switch ((int)beatmapEventData.type)
                    {
                    case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                        ChromaLightEventData chromaLightEventData = new ChromaLightEventData()
                        {
                            LightID   = Trees.at(customData, LIGHTID),
                            PropID    = Trees.at(customData, PROPAGATIONID),
                            ColorData = ChromaUtils.GetColorFromData(customData),
                        };

                        dynamic gradientObject = Trees.at(customData, LIGHTGRADIENT);
                        if (gradientObject != null)
                        {
                            string    easingstring = (string)Trees.at(gradientObject, EASING);
                            Functions easing;
                            if (string.IsNullOrEmpty(easingstring))
                            {
                                easing = Functions.easeLinear;
                            }
                            else
                            {
                                easing = (Functions)Enum.Parse(typeof(Functions), easingstring);
                            }

                            chromaLightEventData.GradientObject = new ChromaLightEventData.GradientObjectData()
                            {
                                Duration   = (float)Trees.at(gradientObject, DURATION),
                                StartColor = ChromaUtils.GetColorFromData(gradientObject, STARTCOLOR),
                                EndColor   = ChromaUtils.GetColorFromData(gradientObject, ENDCOLOR),
                                Easing     = easing,
                            };
                        }

                        chromaEventData = chromaLightEventData;

                        break;

                    case 8:
                    case 9:
                        chromaEventData = new ChromaRingRotationEventData()
                        {
                            NameFilter  = Trees.at(customData, NAMEFILTER),
                            Direction   = (int?)Trees.at(customData, DIRECTION),
                            CounterSpin = Trees.at(customData, COUNTERSPIN),
                            Reset       = Trees.at(customData, RESET),
                            Step        = (float?)Trees.at(customData, STEP),
                            Prop        = (float?)Trees.at(customData, PROP),
                            Speed       = (float?)Trees.at(customData, SPEED),
                            Rotation    = (float?)Trees.at(customData, ROTATION),
                            StepMult    = ((float?)Trees.at(customData, STEPMULT)).GetValueOrDefault(1f),
                            PropMult    = ((float?)Trees.at(customData, PROPMULT)).GetValueOrDefault(1f),
                            SpeedMult   = ((float?)Trees.at(customData, SPEEDMULT)).GetValueOrDefault(1f),
                        };
                        break;

                    case 12:
                    case 13:
                        chromaEventData = new ChromaLaserSpeedEventData()
                        {
                            LockPosition = ((bool?)Trees.at(customData, LOCKPOSITION)).GetValueOrDefault(false),
                            PreciseSpeed = ((float?)Trees.at(customData, PRECISESPEED)).GetValueOrDefault(beatmapEventData.value),
                            Direction    = ((int?)Trees.at(customData, DIRECTION)).GetValueOrDefault(-1),
                        };
                        break;

                    default:
                        continue;
                    }

                    ChromaEventDatas.Add(beatmapEventData, chromaEventData);
                }
            }
        }