mirror of https://github.com/ppy/osu
Cache last event time value to avoid super expensive LINQ
This commit is contained in:
parent
b380be7169
commit
18779b1d1e
|
@ -20,6 +20,13 @@ public class DrawableStoryboard : Container<DrawableStoryboardLayer>
|
||||||
[Cached]
|
[Cached]
|
||||||
public Storyboard Storyboard { get; }
|
public Storyboard Storyboard { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the storyboard is considered finished.
|
||||||
|
/// </summary>
|
||||||
|
public IBindable<bool> HasStoryboardEnded => hasStoryboardEnded;
|
||||||
|
|
||||||
|
private readonly BindableBool hasStoryboardEnded = new BindableBool();
|
||||||
|
|
||||||
protected override Container<DrawableStoryboardLayer> Content { get; }
|
protected override Container<DrawableStoryboardLayer> Content { get; }
|
||||||
|
|
||||||
protected override Vector2 DrawScale => new Vector2(Parent.DrawHeight / 480);
|
protected override Vector2 DrawScale => new Vector2(Parent.DrawHeight / 480);
|
||||||
|
@ -40,6 +47,8 @@ public bool Passing
|
||||||
|
|
||||||
public override bool RemoveCompletedTransforms => false;
|
public override bool RemoveCompletedTransforms => false;
|
||||||
|
|
||||||
|
private double? lastEventEndTime;
|
||||||
|
|
||||||
private DependencyContainer dependencies;
|
private DependencyContainer dependencies;
|
||||||
|
|
||||||
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) =>
|
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) =>
|
||||||
|
@ -74,6 +83,14 @@ private void load(FileStore fileStore, GameplayClock clock, CancellationToken? c
|
||||||
|
|
||||||
Add(layer.CreateDrawable());
|
Add(layer.CreateDrawable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastEventEndTime = Storyboard.LatestEventTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Update()
|
||||||
|
{
|
||||||
|
base.Update();
|
||||||
|
hasStoryboardEnded.Value = lastEventEndTime == null || Time.Current >= lastEventEndTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DrawableStoryboardLayer OverlayLayer => Children.Single(layer => layer.Name == "Overlay");
|
public DrawableStoryboardLayer OverlayLayer => Children.Single(layer => layer.Name == "Overlay");
|
||||||
|
@ -83,25 +100,5 @@ private void updateLayerVisibility()
|
||||||
foreach (var layer in Children)
|
foreach (var layer in Children)
|
||||||
layer.Enabled = passing ? layer.Layer.VisibleWhenPassing : layer.Layer.VisibleWhenFailing;
|
layer.Enabled = passing ? layer.Layer.VisibleWhenPassing : layer.Layer.VisibleWhenFailing;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
|
||||||
{
|
|
||||||
base.Update();
|
|
||||||
updateHasStoryboardEnded();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the storyboard is considered finished.
|
|
||||||
/// </summary>
|
|
||||||
public IBindable<bool> HasStoryboardEnded => hasStoryboardEnded;
|
|
||||||
|
|
||||||
private readonly BindableBool hasStoryboardEnded = new BindableBool();
|
|
||||||
|
|
||||||
private void updateHasStoryboardEnded()
|
|
||||||
{
|
|
||||||
hasStoryboardEnded.Value =
|
|
||||||
Storyboard.LatestEventTime == null ||
|
|
||||||
Time.Current >= Storyboard.LatestEventTime;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue