diff --git a/osu.Game/Storyboards/CommandLoop.cs b/osu.Game/Storyboards/CommandLoop.cs index d7eb041de1..a93903f4a9 100644 --- a/osu.Game/Storyboards/CommandLoop.cs +++ b/osu.Game/Storyboards/CommandLoop.cs @@ -11,6 +11,9 @@ public class CommandLoop : CommandTimelineGroup public double LoopStartTime; public int LoopCount; + public override double StartTime => LoopStartTime; + public override double EndTime => LoopStartTime + CommandsDuration * LoopCount; + public CommandLoop(double startTime, int loopCount) { LoopStartTime = startTime; @@ -21,7 +24,7 @@ public override void ApplyTransforms(Drawable drawable, double offset = 0) => base.ApplyTransforms(drawable, offset + LoopStartTime); protected override void PostProcess(ICommand command, TransformSequence sequence) - => sequence.Loop(Duration - command.Duration, LoopCount); + => sequence.Loop(CommandsDuration - command.Duration, LoopCount); public override string ToString() => $"{LoopStartTime} x{LoopCount}"; diff --git a/osu.Game/Storyboards/CommandTimelineGroup.cs b/osu.Game/Storyboards/CommandTimelineGroup.cs index cff8d54d29..badd9a810a 100644 --- a/osu.Game/Storyboards/CommandTimelineGroup.cs +++ b/osu.Game/Storyboards/CommandTimelineGroup.cs @@ -39,9 +39,14 @@ public IEnumerable Timelines } } - public double StartTime => Timelines.Where(t => t.HasCommands).Min(t => t.StartTime); - public double EndTime => Timelines.Where(t => t.HasCommands).Max(t => t.EndTime); + public double CommandsStartTime => Timelines.Where(t => t.HasCommands).Min(t => t.StartTime); + public double CommandsEndTime => Timelines.Where(t => t.HasCommands).Max(t => t.EndTime); + public double CommandsDuration => CommandsEndTime - CommandsStartTime; + + public virtual double StartTime => CommandsStartTime; + public virtual double EndTime => CommandsEndTime; public double Duration => EndTime - StartTime; + public bool HasCommands => Timelines.Any(t => t.HasCommands); public virtual void ApplyTransforms(Drawable drawable, double offset = 0)