Recycle slider paths when the parenting slider dies

This commit is contained in:
smoogipoo
2019-07-16 18:19:13 +09:00
parent 1ec8790ad2
commit a9286fee07
4 changed files with 36 additions and 7 deletions

View File

@ -7,7 +7,6 @@ using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Extensions.TypeExtensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Primitives;
using osu.Game.Audio;
using osu.Game.Graphics;
@ -202,12 +201,13 @@ namespace osu.Game.Rulesets.Objects.Drawables
protected virtual double InitialLifetimeOffset => 10000;
/// <summary>
/// Will called at least once after the <see cref="Drawable.LifetimeEnd"/> of this <see cref="DrawableHitObject"/> has been passed.
/// Will be called at least once after this <see cref="DrawableHitObject"/> has become not alive.
/// </summary>
internal void OnLifetimeEnd()
public virtual void OnKilled()
{
foreach (var nested in NestedHitObjects)
nested.OnLifetimeEnd();
nested.OnKilled();
UpdateResult(false);
}

View File

@ -34,8 +34,14 @@ namespace osu.Game.Rulesets.UI
protected override void OnChildLifetimeBoundaryCrossed(LifetimeBoundaryCrossedEvent e)
{
if (e.Kind == LifetimeBoundaryKind.End && e.Direction == LifetimeBoundaryCrossingDirection.Forward && e.Child is DrawableHitObject hitObject)
hitObject.OnLifetimeEnd();
if (!(e.Child is DrawableHitObject hitObject))
return;
if (e.Kind == LifetimeBoundaryKind.End && e.Direction == LifetimeBoundaryCrossingDirection.Forward
|| e.Kind == LifetimeBoundaryKind.Start && e.Direction == LifetimeBoundaryCrossingDirection.Backward)
{
hitObject.OnKilled();
}
}
}
}