Ejemplo n.º 1
0
            /// <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);
            }
Ejemplo n.º 2
0
            /// <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);
                }
            }
Ejemplo n.º 3
0
            /// <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);
            }
Ejemplo n.º 4
0
            /// <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)));
            }
Ejemplo n.º 5
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);
                }
            }
Ejemplo n.º 6
0
 public void Add(SpeedAdjustmentContainer speedAdjustment) => barLineContainer.Add(speedAdjustment);
Ejemplo n.º 7
0
 public void Add(SpeedAdjustmentContainer speedAdjustment) => speedAdjustments.Add(speedAdjustment);
Ejemplo n.º 8
0
 public void AddSpeedAdjustment(SpeedAdjustmentContainer speedAdjustmentContainer)
 {
     speedAdjustmentContainer.VisibleTimeRange = VisibleTimeRange;
     AddChild(speedAdjustmentContainer);
 }