diff --git a/MuzikaGromche/Plugin.cs b/MuzikaGromche/Plugin.cs index 72be44b..d563206 100644 --- a/MuzikaGromche/Plugin.cs +++ b/MuzikaGromche/Plugin.cs @@ -531,7 +531,13 @@ namespace MuzikaGromche } } - public float[] LyricsTimeSeries { get; private set; } + public float[] _LyricsTimeSeries = null; + public float[] LyricsTimeSeries + { + get => Config.LyricsTimeSeriesOverride ?? _LyricsTimeSeries; + private set => _LyricsTimeSeries = value; + } + public string[] LyricsLines { get; private set; } public (float, string)[] Lyrics { @@ -888,9 +894,9 @@ namespace MuzikaGromche if (Config.DisplayLyrics.Value) { var index = loopOffsetSpan.GetLastIndex(track.LyricsTimeSeries); - if (index != null) + if (index is int i && i < track.LyricsLines.Length) { - var text = track.LyricsLines[(int)index]; + var text = track.LyricsLines[i]; events.Add(new LyricsEvent(text)); } } @@ -1169,6 +1175,7 @@ namespace MuzikaGromche public static float? FadeOutBeatOverride { get; private set; } = null; public static float? FadeOutDurationOverride { get; private set; } = null; public static float[] FlickerLightsTimeSeriesOverride { get; private set; } = null; + public static float[] LyricsTimeSeriesOverride { get; private set; } = null; public static float? BeatsOffsetOverride { get; private set; } = null; public static float? ColorTransitionInOverride { get; private set; } = null; public static float? ColorTransitionOutOverride { get; private set; } = null; @@ -1374,6 +1381,7 @@ namespace MuzikaGromche SyncedEntry fadeOutBeatSyncedEntry = null; SyncedEntry fadeOutDurationSyncedEntry = null; SyncedEntry flickerLightsTimeSeriesSyncedEntry = null; + SyncedEntry lyricsTimeSeriesSyncedEntry = null; SyncedEntry beatsOffsetSyncedEntry = null; SyncedEntry colorTransitionInSyncedEntry = null; SyncedEntry colorTransitionOutSyncedEntry = null; @@ -1395,8 +1403,10 @@ namespace MuzikaGromche new ConfigDescription("The beat at which to start fading out", new AcceptableValueRange(-1000f, 0))); fadeOutDurationSyncedEntry = configFile.BindSyncedEntry(section, "Fade Out Duration", 0f, new ConfigDescription("Duration of fading out", new AcceptableValueRange(0, 100))); - flickerLightsTimeSeriesSyncedEntry = configFile.BindSyncedEntry(section, "Flicker Lights", "", - new ConfigDescription("Time series of beat offsets when to flicker the lights")); + flickerLightsTimeSeriesSyncedEntry = configFile.BindSyncedEntry(section, "Flicker Lights Time Series", "", + new ConfigDescription("Time series of beat offsets when to flicker the lights.")); + lyricsTimeSeriesSyncedEntry = configFile.BindSyncedEntry(section, "Lyrics Time Series", "", + new ConfigDescription("Time series of beat offsets when to show lyrics lines.")); beatsOffsetSyncedEntry = configFile.BindSyncedEntry(section, "Beats Offset", 0f, new ConfigDescription("How much to offset the whole beat. More is later", new AcceptableValueRange(-0.5f, 0.5f))); colorTransitionInSyncedEntry = configFile.BindSyncedEntry(section, "Color Transition In", 0.25f, @@ -1410,6 +1420,7 @@ namespace MuzikaGromche LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(fadeOutBeatSyncedEntry.Entry, floatSliderOptions)); LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(fadeOutDurationSyncedEntry.Entry, floatSliderOptions)); LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(flickerLightsTimeSeriesSyncedEntry.Entry, Default(new TextInputFieldOptions()))); + LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem(lyricsTimeSeriesSyncedEntry.Entry, Default(new TextInputFieldOptions()))); LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(beatsOffsetSyncedEntry.Entry, floatSliderOptions)); LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(colorTransitionInSyncedEntry.Entry, floatSliderOptions)); LethalConfigManager.AddConfigItem(new FloatSliderConfigItem(colorTransitionOutSyncedEntry.Entry, floatSliderOptions)); @@ -1418,6 +1429,7 @@ namespace MuzikaGromche registerStruct(fadeOutBeatSyncedEntry, t => t._FadeOutBeat, x => FadeOutBeatOverride = x); registerStruct(fadeOutDurationSyncedEntry, t => t._FadeOutDuration, x => FadeOutDurationOverride = x); registerArray(flickerLightsTimeSeriesSyncedEntry, t => t._FlickerLightsTimeSeries, xs => FlickerLightsTimeSeriesOverride = xs, float.Parse, sort: true); + registerArray(lyricsTimeSeriesSyncedEntry, t => t._LyricsTimeSeries, xs => LyricsTimeSeriesOverride = xs, float.Parse, sort: true); registerStruct(beatsOffsetSyncedEntry, t => t._BeatsOffset, x => BeatsOffsetOverride = x); registerStruct(colorTransitionInSyncedEntry, t => t._ColorTransitionIn, x => ColorTransitionInOverride = x); registerStruct(colorTransitionOutSyncedEntry, t => t._ColorTransitionOut, x => ColorTransitionOutOverride = x);