mirror of https://github.com/ppy/osu
Expose singular coarse-grained change event on `ControlPointInfo`
This commit is contained in:
parent
b8e0704554
commit
694cfd0e25
|
@ -10,8 +10,11 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||
public class ControlPointGroup : IComparable<ControlPointGroup>, IEquatable<ControlPointGroup>
|
||||
{
|
||||
public event Action<ControlPoint>? ItemAdded;
|
||||
public event Action<ControlPoint>? ItemChanged;
|
||||
public event Action<ControlPoint>? ItemRemoved;
|
||||
|
||||
private void raiseItemChanged(ControlPoint controlPoint) => ItemChanged?.Invoke(controlPoint);
|
||||
|
||||
/// <summary>
|
||||
/// The time at which the control point takes effect.
|
||||
/// </summary>
|
||||
|
@ -39,12 +42,14 @@ public void Add(ControlPoint point)
|
|||
|
||||
controlPoints.Add(point);
|
||||
ItemAdded?.Invoke(point);
|
||||
point.Changed += raiseItemChanged;
|
||||
}
|
||||
|
||||
public void Remove(ControlPoint point)
|
||||
{
|
||||
controlPoints.Remove(point);
|
||||
ItemRemoved?.Invoke(point);
|
||||
point.Changed -= raiseItemChanged;
|
||||
}
|
||||
|
||||
public sealed override bool Equals(object? obj)
|
||||
|
|
|
@ -19,6 +19,14 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||
[Serializable]
|
||||
public class ControlPointInfo : IDeepCloneable<ControlPointInfo>
|
||||
{
|
||||
/// <summary>
|
||||
/// Invoked on any change to the set of control points.
|
||||
/// </summary>
|
||||
[CanBeNull]
|
||||
public event Action ControlPointsChanged;
|
||||
|
||||
private void raiseControlPointsChanged([CanBeNull] ControlPoint _ = null) => ControlPointsChanged?.Invoke();
|
||||
|
||||
/// <summary>
|
||||
/// All control points grouped by time.
|
||||
/// </summary>
|
||||
|
@ -116,6 +124,7 @@ public ControlPointGroup GroupAt(double time, bool addIfNotExisting = false)
|
|||
if (addIfNotExisting)
|
||||
{
|
||||
newGroup.ItemAdded += GroupItemAdded;
|
||||
newGroup.ItemChanged += raiseControlPointsChanged;
|
||||
newGroup.ItemRemoved += GroupItemRemoved;
|
||||
|
||||
groups.Insert(~i, newGroup);
|
||||
|
@ -131,6 +140,7 @@ public void RemoveGroup(ControlPointGroup group)
|
|||
group.Remove(item);
|
||||
|
||||
group.ItemAdded -= GroupItemAdded;
|
||||
group.ItemChanged -= raiseControlPointsChanged;
|
||||
group.ItemRemoved -= GroupItemRemoved;
|
||||
|
||||
groups.Remove(group);
|
||||
|
@ -287,6 +297,8 @@ protected virtual void GroupItemAdded(ControlPoint controlPoint)
|
|||
default:
|
||||
throw new ArgumentException($"A control point of unexpected type {controlPoint.GetType()} was added to this {nameof(ControlPointInfo)}");
|
||||
}
|
||||
|
||||
raiseControlPointsChanged();
|
||||
}
|
||||
|
||||
protected virtual void GroupItemRemoved(ControlPoint controlPoint)
|
||||
|
@ -301,6 +313,8 @@ protected virtual void GroupItemRemoved(ControlPoint controlPoint)
|
|||
effectPoints.Remove(typed);
|
||||
break;
|
||||
}
|
||||
|
||||
raiseControlPointsChanged();
|
||||
}
|
||||
|
||||
public ControlPointInfo DeepClone()
|
||||
|
|
Loading…
Reference in New Issue