Use new OnAdd and OnRemove to invalidate DHO

This commit is contained in:
ekrctb
2020-11-27 13:36:40 +09:00
parent 8f5129323d
commit 6e40de58e9
3 changed files with 50 additions and 6 deletions

View File

@ -150,7 +150,7 @@ namespace osu.Game.Rulesets.UI.Scrolling
/// <summary>
/// Make this <see cref="DrawableHitObject"/> lifetime and layout computed in next update.
/// </summary>
internal void InvalidateHitObject(DrawableHitObject hitObject)
private void invalidateHitObject(DrawableHitObject hitObject)
{
// Lifetime computation is delayed until next update because
// when the hit object is not pooled this container is not loaded here and `scrollLength` cannot be computed.
@ -158,6 +158,31 @@ namespace osu.Game.Rulesets.UI.Scrolling
layoutComputed.Remove(hitObject);
}
private void onAddRecursive(DrawableHitObject hitObject)
{
invalidateHitObject(hitObject);
hitObject.DefaultsApplied += invalidateHitObject;
foreach (var nested in hitObject.NestedHitObjects)
onAddRecursive(nested);
}
protected override void OnAdd(DrawableHitObject drawableHitObject) => onAddRecursive(drawableHitObject);
private void onRemoveRecursive(DrawableHitObject hitObject)
{
toComputeLifetime.Remove(hitObject);
layoutComputed.Remove(hitObject);
hitObject.DefaultsApplied -= invalidateHitObject;
foreach (var nested in hitObject.NestedHitObjects)
onRemoveRecursive(nested);
}
protected override void OnRemove(DrawableHitObject drawableHitObject) => onRemoveRecursive(drawableHitObject);
private float scrollLength;
protected override void Update()