public ManiaPlayfield(int columnCount) { this.columnCount = columnCount; if (columnCount <= 0) { throw new ArgumentException("Can't have zero or fewer columns."); } Children = new Drawable[] { new Container { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, RelativeSizeAxes = Axes.Both, Masking = true, Children = new Drawable[] { new Container { Name = "Masked elements", Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, RelativeSizeAxes = Axes.Y, AutoSizeAxes = Axes.X, Masking = true, Children = new Drawable[] { new Box { RelativeSizeAxes = Axes.Both, Colour = Color4.Black }, columns = new FillFlowContainer <Column> { Name = "Columns", RelativeSizeAxes = Axes.Y, AutoSizeAxes = Axes.X, Direction = FillDirection.Horizontal, Padding = new MarginPadding { Left = 1, Right = 1 }, Spacing = new Vector2(1, 0) } } }, new Container { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Top = HIT_TARGET_POSITION }, Children = new[] { barLineContainer = new SpeedAdjustmentCollection(Axes.Y) { Name = "Bar lines", Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, RelativeSizeAxes = Axes.Y, VisibleTimeRange = visibleTimeRange // Width is set in the Update method } } } } } }; for (int i = 0; i < columnCount; i++) { columns.Add(new Column { VisibleTimeRange = visibleTimeRange }); } }
public TestCaseScrollingHitObjects() { OsuSpriteText timeRangeText; SpeedAdjustmentCollection adjustmentCollection; timeRangeBindable = new BindableDouble(2000) { MinValue = 200, MaxValue = 4000, }; SliderBar <double> timeRange; Add(timeRange = new BasicSliderBar <double> { Size = new Vector2(200, 20), SelectionColor = Color4.Pink, KeyboardStep = 100 }); Add(timeRangeText = new OsuSpriteText { X = 210, TextSize = 16, }); timeRange.Current.BindTo(timeRangeBindable); timeRangeBindable.ValueChanged += v => timeRangeText.Text = $"Visible Range: {v:#,#.#}"; timeRangeBindable.ValueChanged += v => bottomLabel.Text = $"t minus {v:#,#}"; AddRange(new Drawable[] { new Container { Anchor = Anchor.Centre, Origin = Anchor.Centre, Size = new Vector2(100, 500), Children = new Drawable[] { new Box { RelativeSizeAxes = Axes.Both, Alpha = 0.25f }, adjustmentCollection = new SpeedAdjustmentCollection(Axes.Y) { RelativeSizeAxes = Axes.Both, VisibleTimeRange = timeRangeBindable, Masking = true, }, new OsuSpriteText { Text = "t minus 0", Margin = new MarginPadding(2), TextSize = 14, Anchor = Anchor.TopRight, }, bottomLabel = new OsuSpriteText { Text = "t minus x", Margin = new MarginPadding(2), TextSize = 14, Anchor = Anchor.BottomRight, Origin = Anchor.BottomLeft, }, topTime = new OsuSpriteText { Margin = new MarginPadding(2), TextSize = 14, Anchor = Anchor.TopLeft, Origin = Anchor.TopRight, }, bottomTime = new OsuSpriteText { Margin = new MarginPadding(2), TextSize = 14, Anchor = Anchor.BottomLeft, Origin = Anchor.BottomRight, }, } } }); timeRangeBindable.TriggerChange(); adjustmentCollection.Add(new TestSpeedAdjustmentContainer(new MultiplierControlPoint())); AddStep("Add hit object", () => adjustmentCollection.Add(new TestDrawableHitObject(new HitObject { StartTime = Time.Current + 2000 }))); }
public Column() { RelativeSizeAxes = Axes.Y; Width = column_width; Children = new Drawable[] { background = new Box { Name = "Foreground", RelativeSizeAxes = Axes.Both, Alpha = 0.2f }, new Container { Name = "Hit target + hit objects", RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Top = ManiaPlayfield.HIT_TARGET_POSITION }, Children = new Drawable[] { new Container { Name = "Hit target", RelativeSizeAxes = Axes.X, Height = hit_target_height, Children = new Drawable[] { new Box { Name = "Background", RelativeSizeAxes = Axes.Both, Colour = Color4.Black }, hitTargetBar = new Container { Name = "Bar", RelativeSizeAxes = Axes.X, Height = hit_target_bar_height, Masking = true, Children = new[] { new Box { RelativeSizeAxes = Axes.Both } } } } }, speedAdjustments = new SpeedAdjustmentCollection(Axes.Y) { Name = "Hit objects", RelativeSizeAxes = Axes.Both, VisibleTimeRange = VisibleTimeRange }, // For column lighting, we need to capture input events before the notes new InputTarget { KeyDown = onKeyDown, KeyUp = onKeyUp } } }, new Container { Name = "Key", RelativeSizeAxes = Axes.X, Height = ManiaPlayfield.HIT_TARGET_POSITION, Children = new Drawable[] { new Box { Name = "Key gradient", RelativeSizeAxes = Axes.Both, Colour = ColourInfo.GradientVertical(Color4.Black, Color4.Black.Opacity(0)), Alpha = 0.5f }, keyIcon = new Container { Name = "Key icon", Anchor = Anchor.Centre, Origin = Anchor.Centre, Size = new Vector2(key_icon_size), Masking = true, CornerRadius = key_icon_corner_radius, BorderThickness = 2, BorderColour = Color4.White, // Not true Children = new[] { new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } } } } } }; }