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