/// <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); }
/// <summary> /// Adds a <see cref="SpeedAdjustmentContainer"/> to this container. /// </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); speedAdjustments.Add(speedAdjustment); // We now need to re-sort the hit objects in the last speed adjustment prior to this one, to see if they need a new parent var previousSpeedAdjustment = speedAdjustments.LastOrDefault(s => s.ControlPoint.StartTime < speedAdjustment.ControlPoint.StartTime); if (previousSpeedAdjustment == null) { return; } foreach (DrawableHitObject h in previousSpeedAdjustment.Children) { var newSpeedAdjustment = adjustmentContainerFor(h); if (newSpeedAdjustment == previousSpeedAdjustment) { continue; } previousSpeedAdjustment.Remove(h); newSpeedAdjustment.Add(h); } }
/// <summary> /// Adds a <see cref="SpeedAdjustmentContainer"/> to this container. /// </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); speedAdjustments.Add(speedAdjustment); AddInternal(speedAdjustment); }
/// <summary> /// Creates a new <see cref="ScrollingHitObjectContainer"/>. /// </summary> /// <param name="scrollingAxes">The axes upon which hit objects should appear to scroll inside this container.</param> public ScrollingHitObjectContainer(Axes scrollingAxes) { this.scrollingAxes = scrollingAxes; AddInternal(speedAdjustments = new SortedContainer { RelativeSizeAxes = Axes.Both }); // Default speed adjustment AddSpeedAdjustment(defaultSpeedAdjustment = new SpeedAdjustmentContainer(new MultiplierControlPoint(0))); }
/// <summary> /// Removes a <see cref="SpeedAdjustmentContainer"/> from this container, re-sorting all hit objects /// which it contained into new <see cref="SpeedAdjustmentContainer"/>s. /// </summary> /// <param name="speedAdjustment">The <see cref="SpeedAdjustmentContainer"/> to remove.</param> public void RemoveSpeedAdjustment(SpeedAdjustmentContainer speedAdjustment) { if (speedAdjustment == defaultSpeedAdjustment) { throw new InvalidOperationException($"The default {nameof(SpeedAdjustmentContainer)} must not be removed."); } if (!speedAdjustments.Remove(speedAdjustment)) { return; } while (speedAdjustment.Count > 0) { DrawableHitObject hitObject = speedAdjustment[0]; speedAdjustment.Remove(hitObject); Add(hitObject); } }
public void Add(SpeedAdjustmentContainer speedAdjustment) => barLineContainer.Add(speedAdjustment);
public void Add(SpeedAdjustmentContainer speedAdjustment) => speedAdjustments.Add(speedAdjustment);
public void AddSpeedAdjustment(SpeedAdjustmentContainer speedAdjustmentContainer) { speedAdjustmentContainer.VisibleTimeRange = VisibleTimeRange; AddChild(speedAdjustmentContainer); }