/// <summary> /// Adds a <see cref="SpeedAdjustmentContainer"/> to this container, re-sorting all hit objects /// in the last <see cref="SpeedAdjustmentContainer"/> that occurred (time-wise) before it. /// </summary> /// <param name="speedAdjustment">The <see cref="SpeedAdjustmentContainer"/>.</param> public void AddSpeedAdjustment(SpeedAdjustmentContainer speedAdjustment) { speedAdjustment.ScrollingAxes = scrollingAxes; speedAdjustment.VisibleTimeRange.BindTo(VisibleTimeRange); speedAdjustment.Reversed.BindTo(Reversed); if (speedAdjustments.Count > 0) { // We need to re-sort all hit objects in the speed adjustment container prior to figure out if they // should now lie within this one var existingAdjustment = adjustmentContainerAt(speedAdjustment.ControlPoint.StartTime); for (int i = 0; i < existingAdjustment.Count; i++) { DrawableHitObject hitObject = existingAdjustment[i]; if (!speedAdjustment.CanContain(hitObject.HitObject.StartTime)) { continue; } existingAdjustment.Remove(hitObject); speedAdjustment.Add(hitObject); i--; } } speedAdjustments.Add(speedAdjustment); }