diff --git a/osu.Game/Storyboards/IStoryboardElement.cs b/osu.Game/Storyboards/IStoryboardElement.cs
index c4c150a8a4..03f8b97212 100644
--- a/osu.Game/Storyboards/IStoryboardElement.cs
+++ b/osu.Game/Storyboards/IStoryboardElement.cs
@@ -12,6 +12,8 @@ namespace osu.Game.Storyboards
double StartTime { get; }
+ double EndTime { get; }
+
Drawable CreateDrawable();
}
}
diff --git a/osu.Game/Storyboards/Storyboard.cs b/osu.Game/Storyboards/Storyboard.cs
index 1ba25cc11e..41058d9cb3 100644
--- a/osu.Game/Storyboards/Storyboard.cs
+++ b/osu.Game/Storyboards/Storyboard.cs
@@ -36,6 +36,15 @@ namespace osu.Game.Storyboards
///
public double? EarliestEventTime => Layers.SelectMany(l => l.Elements).OrderBy(e => e.StartTime).FirstOrDefault()?.StartTime;
+ ///
+ /// Across all layers, find the latest point in time that a storyboard element ends at.
+ /// Will return null if there are no elements.
+ ///
+ ///
+ /// This iterates all elements and as such should be used sparingly or stored locally.
+ /// Videos and samples return StartTime as their EndTIme.
+ ///
+ public double? LatestEventTime => Layers.SelectMany(l => l.Elements).OrderByDescending(e => e.EndTime).FirstOrDefault()?.EndTime;
///
/// Depth of the currently front-most storyboard layer, excluding the overlay layer.
///
diff --git a/osu.Game/Storyboards/StoryboardSample.cs b/osu.Game/Storyboards/StoryboardSample.cs
index 5d6ce215f5..d0949c93a7 100644
--- a/osu.Game/Storyboards/StoryboardSample.cs
+++ b/osu.Game/Storyboards/StoryboardSample.cs
@@ -15,6 +15,8 @@ namespace osu.Game.Storyboards
public double StartTime { get; }
+ public double EndTime => StartTime;
+
public int Volume { get; }
public IEnumerable LookupNames => new[]
diff --git a/osu.Game/Storyboards/StoryboardVideo.cs b/osu.Game/Storyboards/StoryboardVideo.cs
index 4652e45852..1314bd7cb9 100644
--- a/osu.Game/Storyboards/StoryboardVideo.cs
+++ b/osu.Game/Storyboards/StoryboardVideo.cs
@@ -14,6 +14,8 @@ namespace osu.Game.Storyboards
public double StartTime { get; }
+ public double EndTime => StartTime;
+
public StoryboardVideo(string path, int offset)
{
Path = path;