// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using OpenTK; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Mania.Timing { public class TimingChangeContainer : Container { /// /// The amount of time which this container spans. /// public double TimeSpan { get; set; } /// /// Adds a hit object to the most applicable timing change in this container. /// /// The hit object to add. public void Add(DrawableHitObject hitObject) { var target = timingChangeFor(hitObject); if (target == null) throw new ArgumentException("No timing change could be found that can contain the hit object.", nameof(hitObject)); target.Add(hitObject); } /// /// Finds the most applicable timing change that can contain a hit object. /// /// The hit object to contain. /// The last timing change which can contain . private DrawableTimingChange timingChangeFor(DrawableHitObject hitObject) => Children.LastOrDefault(c => c.CanContain(hitObject)); } }