1
0
Fork 0

Add specialized color transition event to improve debug output

This commit is contained in:
ivan tkachenko 2025-07-30 14:41:21 +03:00
parent 6a0be0d780
commit 667368d719
1 changed files with 33 additions and 19 deletions

View File

@ -580,6 +580,11 @@ namespace MuzikaGromche
{ {
return All.Where(easing => easing.Name == Name).DefaultIfEmpty(Linear).First(); return All.Where(easing => easing.Name == Name).DefaultIfEmpty(Linear).First();
} }
public override string ToString()
{
return Name;
}
} }
public record Palette(Color[] Colors) public record Palette(Color[] Colors)
@ -1106,12 +1111,9 @@ namespace MuzikaGromche
windUpZeroBeatEventTriggered = true; windUpZeroBeatEventTriggered = true;
} }
if (GetColorEvent(loopOffsetSpan, windUpOffsetTimestamp) is { } colorEvent)
{ {
var colorEvent = GetColorEvent(loopOffsetSpan, windUpOffsetTimestamp); events.Add(colorEvent);
if (colorEvent != null)
{
events.Add(colorEvent);
}
} }
if (loopOffsetSpan.GetLastIndex(track.FlickerLightsTimeSeries) != null) if (loopOffsetSpan.GetLastIndex(track.FlickerLightsTimeSeries) != null)
@ -1142,20 +1144,20 @@ namespace MuzikaGromche
private SetLightsColorEvent? GetColorEvent(BeatTimeSpan loopOffsetSpan, BeatTimestamp windUpOffsetTimestamp) private SetLightsColorEvent? GetColorEvent(BeatTimeSpan loopOffsetSpan, BeatTimestamp windUpOffsetTimestamp)
{ {
if (FadeOut(loopOffsetSpan) is Color c1) if (FadeOut(loopOffsetSpan) is { } colorEvent1)
{ {
return new SetLightsColorEvent(c1); return colorEvent1;
} }
if (ColorFromPaletteAtTimestamp(windUpOffsetTimestamp) is Color c2) if (ColorFromPaletteAtTimestamp(windUpOffsetTimestamp) is { } colorEvent2)
{ {
return new SetLightsColorEvent(c2); return colorEvent2;
} }
return null; return null;
} }
private Color? FadeOut(BeatTimeSpan loopOffsetSpan) private SetLightsColorTransitionEvent? FadeOut(BeatTimeSpan loopOffsetSpan)
{ {
var beat = loopOffsetSpan.BeatToInclusive; var beat = loopOffsetSpan.BeatToInclusive;
var fadeOutStart = track.FadeOutBeat; var fadeOutStart = track.FadeOutBeat;
@ -1163,9 +1165,8 @@ namespace MuzikaGromche
if (track.FadeOutBeat < beat && beat <= fadeOutEnd) if (track.FadeOutBeat < beat && beat <= fadeOutEnd)
{ {
var x = (beat - track.FadeOutBeat) / track.FadeOutDuration; var t = (beat - track.FadeOutBeat) / track.FadeOutDuration;
var t = Mathf.Clamp(Easing.Linear.Eval(x), 0f, 1f); return new SetLightsColorTransitionEvent(Color.white, Color.black, Easing.Linear, t);
return Color.Lerp(Color.white, Color.black, t);
} }
else else
{ {
@ -1173,7 +1174,7 @@ namespace MuzikaGromche
} }
} }
public Color? ColorFromPaletteAtTimestamp(BeatTimestamp timestamp) public SetLightsColorEvent? ColorFromPaletteAtTimestamp(BeatTimestamp timestamp)
{ {
if (timestamp.Beat <= -track.ColorTransitionIn) if (timestamp.Beat <= -track.ColorTransitionIn)
{ {
@ -1218,20 +1219,19 @@ namespace MuzikaGromche
} }
} }
// default // default
return ColorAtWholeBeat(timestamp); return new SetLightsColorEvent(ColorAtWholeBeat(timestamp));
Color ColorTransition(BeatTimestamp clipsBoundary) SetLightsColorEvent ColorTransition(BeatTimestamp clipsBoundary)
{ {
var transitionStart = clipsBoundary - track.ColorTransitionIn; var transitionStart = clipsBoundary - track.ColorTransitionIn;
var transitionEnd = clipsBoundary + track.ColorTransitionOut; var transitionEnd = clipsBoundary + track.ColorTransitionOut;
var x = BeatTimeSpan.Between(transitionStart, timestamp).Duration() / transitionLength; var t = BeatTimeSpan.Between(transitionStart, timestamp).Duration() / transitionLength;
var t = Mathf.Clamp(track.ColorTransitionEasing.Eval(x), 0f, 1f);
if (track.ColorTransitionIn == 0.0f) if (track.ColorTransitionIn == 0.0f)
{ {
// Subtract an epsilon, so we don't use the same beat twice // Subtract an epsilon, so we don't use the same beat twice
transitionStart -= 0.01f; transitionStart -= 0.01f;
} }
return Color.Lerp(ColorAtWholeBeat(transitionStart), ColorAtWholeBeat(transitionEnd), t); return new SetLightsColorTransitionEvent(ColorAtWholeBeat(transitionStart), ColorAtWholeBeat(transitionEnd), track.ColorTransitionEasing, t);
} }
Color ColorAtWholeBeat(BeatTimestamp timestamp) Color ColorAtWholeBeat(BeatTimestamp timestamp)
@ -1260,6 +1260,20 @@ namespace MuzikaGromche
} }
} }
public class SetLightsColorTransitionEvent(Color from, Color to, Easing easing, float t)
: SetLightsColorEvent(Color.Lerp(from, to, Mathf.Clamp(easing.Eval(t), 0f, 1f)))
{
// Additional context for debugging
public readonly Color From = from;
public readonly Color To = to;
public readonly Easing Easing = easing;
public readonly float T = t;
public override string ToString()
{
return $"Color(#{ColorUtility.ToHtmlStringRGB(Color)} = #{ColorUtility.ToHtmlStringRGB(From)}..#{ColorUtility.ToHtmlStringRGB(To)} {Easing} {T:N4})";
}
}
public class FlickerLightsEvent : BaseEvent public class FlickerLightsEvent : BaseEvent
{ {
public override string ToString() => "Flicker"; public override string ToString() => "Flicker";