// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; using System.Linq; namespace osu.Game.Beatmaps.ControlPoints { public class ControlPointGroup : IComparable { public event Action ItemAdded; public event Action ItemRemoved; /// /// The time at which the control point takes effect. /// public double Time { get; } public IReadOnlyList ControlPoints => controlPoints; private readonly List controlPoints = new List(); public ControlPointGroup(double time) { Time = time; } public int CompareTo(ControlPointGroup other) => Time.CompareTo(other.Time); public void Add(ControlPoint point) { point.AttachGroup(this); foreach (var existing in controlPoints.Where(p => p.GetType() == point.GetType()).ToArray()) Remove(existing); controlPoints.Add(point); ItemAdded?.Invoke(point); } public void Remove(ControlPoint point) { controlPoints.Remove(point); ItemRemoved?.Invoke(point); } } }