Exemplo n.º 1
0
        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
                });
            }
        }
Exemplo n.º 2
0
        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
            })));
        }
Exemplo n.º 3
0
        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
                                }
                            }
                        }
                    }
                }
            };
        }