private void load(OsuColour colours)
        {
            RelativeSizeAxes = Axes.X;
            AutoSizeAxes     = Axes.Y;
            Direction        = FillDirection.Vertical;

            Padding = new MarginPadding
            {
                Top    = 10,
                Bottom = 5,
                Right  = 20,
                Left   = 20,
            };

            AddRangeInternal(new Drawable[]
            {
                new Container
                {
                    RelativeSizeAxes = Axes.X,
                    AutoSizeAxes     = Axes.Y,
                    Children         = new Drawable[]
                    {
                        new ClearAllButton
                        {
                            Text   = clearButtonText,
                            Anchor = Anchor.TopRight,
                            Origin = Anchor.TopRight,
                            Action = clearAll
                        },
                        new FillFlowContainer
                        {
                            Margin = new MarginPadding
                            {
                                Bottom = 5
                            },
                            Spacing      = new Vector2(5, 0),
                            AutoSizeAxes = Axes.Both,
                            Children     = new Drawable[]
                            {
                                new OsuSpriteText
                                {
                                    Text = titleText.ToUpperInvariant(),
                                    Font = OsuFont.GetFont(weight: FontWeight.Bold)
                                },
                                countDrawable = new OsuSpriteText
                                {
                                    Text   = "3",
                                    Colour = colours.Yellow,
                                    Font   = OsuFont.GetFont(weight: FontWeight.Bold)
                                },
                            }
                        },
                    },
                },
                notifications = new AlwaysUpdateFillFlowContainer <Notification>
                {
                    AutoSizeAxes     = Axes.Y,
                    RelativeSizeAxes = Axes.X,
                    LayoutDuration   = 150,
                    LayoutEasing     = Easing.OutQuart,
                    Spacing          = new Vector2(3),
                }
            });
        }
Пример #2
0
        private void load(OsuColour colours)
        {
            Children = new Drawable[]
            {
                new Box
                {
                    RelativeSizeAxes = Axes.Both,
                    Colour           = Color4.Black,
                    Alpha            = background_alpha,
                },
                new FillFlowContainer
                {
                    RelativeSizeAxes = Axes.X,
                    AutoSizeAxes     = Axes.Y,
                    Direction        = FillDirection.Vertical,
                    Spacing          = new Vector2(0, 50),
                    Origin           = Anchor.Centre,
                    Anchor           = Anchor.Centre,
                    Children         = new Drawable[]
                    {
                        new FillFlowContainer
                        {
                            Origin           = Anchor.TopCentre,
                            Anchor           = Anchor.TopCentre,
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y,
                            Direction        = FillDirection.Vertical,
                            Spacing          = new Vector2(0, 20),
                            Children         = new Drawable[]
                            {
                                new OsuSpriteText
                                {
                                    Text         = Header,
                                    Font         = OsuFont.GetFont(size: 30),
                                    Spacing      = new Vector2(5, 0),
                                    Origin       = Anchor.TopCentre,
                                    Anchor       = Anchor.TopCentre,
                                    Colour       = colours.Yellow,
                                    Shadow       = true,
                                    ShadowColour = new Color4(0, 0, 0, 0.25f)
                                },
                                new OsuSpriteText
                                {
                                    Text         = Description,
                                    Origin       = Anchor.TopCentre,
                                    Anchor       = Anchor.TopCentre,
                                    Shadow       = true,
                                    ShadowColour = new Color4(0, 0, 0, 0.25f)
                                }
                            }
                        },
                        InternalButtons = new FillFlowContainer <DialogButton>
                        {
                            Origin           = Anchor.TopCentre,
                            Anchor           = Anchor.TopCentre,
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y,
                            Direction        = FillDirection.Vertical,
                            Masking          = true,
                            EdgeEffect       = new EdgeEffectParameters
                            {
                                Type   = EdgeEffectType.Shadow,
                                Colour = Color4.Black.Opacity(0.6f),
                                Radius = 50
                            },
                        },
                        retryCounterContainer = new FillFlowContainer
                        {
                            Origin       = Anchor.TopCentre,
                            Anchor       = Anchor.TopCentre,
                            AutoSizeAxes = Axes.Both,
                        }
                    }
                },
            };

            updateRetryCount();
        }
Пример #3
0
        private void load(OsuColour colours)
        {
            IdleColour  = colours.GreySeafoam;
            HoverColour = colours.GreySeafoamLight;

            Children = new Drawable[]
            {
                new UpdateableBeatmapSetCover
                {
                    RelativeSizeAxes = Axes.Y,
                    Width            = cover_width,
                    BeatmapSet       = beatmap.BeatmapSet,
                    CoverType        = BeatmapSetCoverType.List,
                },
                new Container
                {
                    RelativeSizeAxes = Axes.Both,
                    Padding          = new MarginPadding {
                        Left = cover_width - corner_radius
                    },
                    Children = new Drawable[]
                    {
                        new Container
                        {
                            RelativeSizeAxes = Axes.Both,
                            Masking          = true,
                            CornerRadius     = corner_radius,
                            Children         = new Drawable[]
                            {
                                background = new Box {
                                    RelativeSizeAxes = Axes.Both
                                },
                                new Container
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Padding          = new MarginPadding(10),
                                    Children         = new Drawable[]
                                    {
                                        new FillFlowContainer
                                        {
                                            Anchor       = Anchor.CentreLeft,
                                            Origin       = Anchor.CentreLeft,
                                            AutoSizeAxes = Axes.Both,
                                            Direction    = FillDirection.Vertical,
                                            Children     = new Drawable[]
                                            {
                                                new MostPlayedBeatmapMetadataContainer(beatmap),
                                                new LinkFlowContainer(t => t.Font = OsuFont.GetFont(size: 12, weight: FontWeight.Regular))
                                                {
                                                    AutoSizeAxes = Axes.Both,
                                                    Direction    = FillDirection.Horizontal,
                                                    Colour       = colours.GreySeafoamLighter
                                                }.With(d =>
                                                {
                                                    d.AddText("作图者:");
                                                    d.AddUserLink(beatmap.Metadata.Author);
                                                }),
                                            }
                                        },
                                        new PlayCountText(playCount)
                                        {
                                            Anchor = Anchor.CentreRight,
                                            Origin = Anchor.CentreRight
                                        },
                                    }
                                },
                            }
                        }
                    }
                }
            };
        }
Пример #4
0
        public OnScreenDisplay()
        {
            RelativeSizeAxes = Axes.Both;

            Children = new Drawable[]
            {
                box = new Container
                {
                    Origin = Anchor.Centre,
                    RelativePositionAxes = Axes.Both,
                    Position             = new Vector2(0.5f, 0.75f),
                    Masking      = true,
                    AutoSizeAxes = Axes.X,
                    Height       = height_contracted,
                    Alpha        = 0,
                    CornerRadius = 20,
                    Children     = new Drawable[]
                    {
                        new Box
                        {
                            RelativeSizeAxes = Axes.Both,
                            Colour           = Color4.Black,
                            Alpha            = 0.7f,
                        },
                        new Container // purely to add a minimum width
                        {
                            Anchor           = Anchor.Centre,
                            Origin           = Anchor.Centre,
                            Width            = 240,
                            RelativeSizeAxes = Axes.Y,
                        },
                        textLine1 = new OsuSpriteText
                        {
                            Padding = new MarginPadding(10),
                            Font    = OsuFont.GetFont(size: 14, weight: FontWeight.Black),
                            Spacing = new Vector2(1, 0),
                            Anchor  = Anchor.TopCentre,
                            Origin  = Anchor.TopCentre,
                        },
                        textLine2 = new OsuSpriteText
                        {
                            Font    = OsuFont.GetFont(size: 24, weight: FontWeight.Light),
                            Padding = new MarginPadding {
                                Left = 10, Right = 10
                            },
                            Anchor = Anchor.Centre,
                            Origin = Anchor.BottomCentre,
                        },
                        new FillFlowContainer
                        {
                            Anchor       = Anchor.BottomCentre,
                            Origin       = Anchor.BottomCentre,
                            AutoSizeAxes = Axes.Both,
                            Direction    = FillDirection.Vertical,
                            Children     = new Drawable[]
                            {
                                optionLights = new FillFlowContainer <OptionLight>
                                {
                                    Padding = new MarginPadding {
                                        Top = 20, Bottom = 5
                                    },
                                    Spacing      = new Vector2(5, 0),
                                    Direction    = FillDirection.Horizontal,
                                    Anchor       = Anchor.TopCentre,
                                    Origin       = Anchor.TopCentre,
                                    AutoSizeAxes = Axes.Both
                                },
                                textLine3 = new OsuSpriteText
                                {
                                    Anchor = Anchor.TopCentre,
                                    Origin = Anchor.TopCentre,
                                    Margin = new MarginPadding {
                                        Bottom = 15
                                    },
                                    Font  = OsuFont.GetFont(size: 12, weight: FontWeight.Bold),
                                    Alpha = 0.3f,
                                },
                            }
                        }
                    }
                },
            };
        }
Пример #5
0
 private void load()
 {
     InternalChild = new GridContainer
     {
         RelativeSizeAxes = Axes.Both,
         Content          = new[]
         {
             new Drawable[]
             {
                 new Container
                 {
                     RelativeSizeAxes = Axes.Both,
                     Masking          = true,
                     CornerExponent   = 2.5f,
                     CornerRadius     = 20,
                     EdgeEffect       = new EdgeEffectParameters
                     {
                         Colour = Color4.Black.Opacity(0.25f),
                         Type   = EdgeEffectType.Shadow,
                         Radius = 1,
                         Offset = new Vector2(0, 4)
                     },
                     Children = new Drawable[]
                     {
                         new Box
                         {
                             RelativeSizeAxes = Axes.Both,
                             Colour           = Color4Extensions.FromHex("444")
                         },
                         new UserCoverBackground
                         {
                             RelativeSizeAxes = Axes.Both,
                             User             = score.User,
                             Colour           = ColourInfo.GradientVertical(Color4.White.Opacity(0.5f), Color4Extensions.FromHex("#444").Opacity(0))
                         },
                         new FillFlowContainer
                         {
                             RelativeSizeAxes = Axes.Both,
                             Padding          = new MarginPadding(10),
                             Direction        = FillDirection.Vertical,
                             Spacing          = new Vector2(0, 10),
                             Children         = new Drawable[]
                             {
                                 new UpdateableAvatar(score.User)
                                 {
                                     Anchor         = Anchor.TopCentre,
                                     Origin         = Anchor.TopCentre,
                                     Size           = new Vector2(110),
                                     Masking        = true,
                                     CornerExponent = 2.5f,
                                     CornerRadius   = 20,
                                     EdgeEffect     = new EdgeEffectParameters
                                     {
                                         Colour = Color4.Black.Opacity(0.25f),
                                         Type   = EdgeEffectType.Shadow,
                                         Radius = 8,
                                         Offset = new Vector2(0, 4),
                                     }
                                 },
                                 new OsuSpriteText
                                 {
                                     Anchor = Anchor.TopCentre,
                                     Origin = Anchor.TopCentre,
                                     Text   = score.RealmUser.Username,
                                     Font   = OsuFont.GetFont(size: 16, weight: FontWeight.SemiBold)
                                 },
                                 new FillFlowContainer
                                 {
                                     RelativeSizeAxes   = Axes.X,
                                     AutoSizeAxes       = Axes.Y,
                                     Direction          = FillDirection.Vertical,
                                     Spacing            = new Vector2(0, 5),
                                     ChildrenEnumerable = score.GetStatisticsForDisplay().Where(s => !s.Result.IsBonus()).Select(createStatistic)
                                 },
                                 new FillFlowContainer
                                 {
                                     RelativeSizeAxes = Axes.X,
                                     AutoSizeAxes     = Axes.Y,
                                     Margin           = new MarginPadding {
                                         Top = 10
                                     },
                                     Direction = FillDirection.Vertical,
                                     Spacing   = new Vector2(0, 5),
                                     Children  = new[]
                                     {
                                         createStatistic("Max Combo", $"x{score.MaxCombo}"),
                                         createStatistic("Accuracy", $"{score.Accuracy.FormatAccuracy()}"),
                                     }
                                 },
                                 new ModFlowDisplay
                                 {
                                     Anchor           = Anchor.TopCentre,
                                     Origin           = Anchor.TopCentre,
                                     AutoSizeAxes     = Axes.Y,
                                     RelativeSizeAxes = Axes.X,
                                     Current          = { Value = score.Mods },
                                     IconScale        = 0.5f,
                                 }
                             }
                         }
                     }
                 },
             },
             new Drawable[]
             {
                 new Container
                 {
                     RelativeSizeAxes = Axes.Both,
                     Padding          = new MarginPadding {
                         Vertical = 5
                     },
                     Child = new GridContainer
                     {
                         RelativeSizeAxes = Axes.Both,
                         Content          = new[]
                         {
                             new Drawable[]
                             {
                                 new OsuSpriteText
                                 {
                                     Anchor  = Anchor.Centre,
                                     Origin  = Anchor.Centre,
                                     Current = scoreManager.GetBindableTotalScoreString(score),
                                     Font    = OsuFont.GetFont(size: 20, weight: FontWeight.Medium, fixedWidth: true),
                                     Spacing = new Vector2(-1, 0)
                                 },
                             },
                             new Drawable[]
                             {
                                 new Container
                                 {
                                     RelativeSizeAxes = Axes.Both,
                                     Padding          = new MarginPadding {
                                         Top = 2
                                     },
                                     Child = new DrawableRank(score.Rank)
                                     {
                                         Anchor = Anchor.Centre,
                                         Origin = Anchor.Centre,
                                     }
                                 }
                             },
                         },
                         RowDimensions = new[]
                         {
                             new Dimension(GridSizeMode.AutoSize),
                         }
                     }
                 }
             },
         },
         RowDimensions = new[]
         {
             new Dimension(),
             new Dimension(GridSizeMode.Absolute, 45),
         }
     };
 }
Пример #6
0
        public DrawableComment(Comment comment)
        {
            LinkFlowContainer          username;
            FillFlowContainer          childCommentsContainer;
            DeletedChildrenPlaceholder deletedChildrenPlaceholder;
            FillFlowContainer          info;
            LinkFlowContainer          message;
            GridContainer content;
            VotePill      votePill;

            this.comment = comment;

            RelativeSizeAxes = Axes.X;
            AutoSizeAxes     = Axes.Y;
            InternalChild    = new FillFlowContainer
            {
                RelativeSizeAxes = Axes.X,
                AutoSizeAxes     = Axes.Y,
                Direction        = FillDirection.Vertical,
                Children         = new Drawable[]
                {
                    new Container
                    {
                        RelativeSizeAxes = Axes.X,
                        AutoSizeAxes     = Axes.Y,
                        Padding          = new MarginPadding(margin)
                        {
                            Left = margin + 5
                        },
                        Child = content = new GridContainer
                        {
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y,
                            ColumnDimensions = new[]
                            {
                                new Dimension(GridSizeMode.AutoSize),
                                new Dimension(),
                            },
                            RowDimensions = new[]
                            {
                                new Dimension(GridSizeMode.AutoSize)
                            },
                            Content = new[]
                            {
                                new Drawable[]
                                {
                                    new FillFlowContainer
                                    {
                                        AutoSizeAxes = Axes.Both,
                                        Margin       = new MarginPadding {
                                            Horizontal = margin
                                        },
                                        Direction = FillDirection.Horizontal,
                                        Spacing   = new Vector2(5, 0),
                                        Children  = new Drawable[]
                                        {
                                            new Container
                                            {
                                                Anchor       = Anchor.Centre,
                                                Origin       = Anchor.Centre,
                                                Width        = 40,
                                                AutoSizeAxes = Axes.Y,
                                                Child        = votePill = new VotePill(comment)
                                                {
                                                    Anchor = Anchor.CentreRight,
                                                    Origin = Anchor.CentreRight,
                                                }
                                            },
                                            new UpdateableAvatar(comment.User)
                                            {
                                                Anchor         = Anchor.Centre,
                                                Origin         = Anchor.Centre,
                                                Size           = new Vector2(avatar_size),
                                                Masking        = true,
                                                CornerRadius   = avatar_size / 2f,
                                                CornerExponent = 2,
                                            },
                                        }
                                    },
                                    new FillFlowContainer
                                    {
                                        RelativeSizeAxes = Axes.X,
                                        AutoSizeAxes     = Axes.Y,
                                        Spacing          = new Vector2(0, 3),
                                        Children         = new Drawable[]
                                        {
                                            new FillFlowContainer
                                            {
                                                AutoSizeAxes = Axes.Both,
                                                Direction    = FillDirection.Horizontal,
                                                Spacing      = new Vector2(7, 0),
                                                Children     = new Drawable[]
                                                {
                                                    username = new LinkFlowContainer(s => s.Font = OsuFont.GetFont(size: 14, weight: FontWeight.Bold, italics: true))
                                                    {
                                                        AutoSizeAxes = Axes.Both,
                                                    },
                                                    new ParentUsername(comment),
                                                    new OsuSpriteText
                                                    {
                                                        Alpha = comment.IsDeleted ? 1 : 0,
                                                        Font  = OsuFont.GetFont(size: 14, weight: FontWeight.Bold, italics: true),
                                                        Text  = @"deleted",
                                                    }
                                                }
                                            },
                                            message = new LinkFlowContainer(s => s.Font = OsuFont.GetFont(size: 14))
                                            {
                                                RelativeSizeAxes = Axes.X,
                                                AutoSizeAxes     = Axes.Y,
                                                Padding          = new MarginPadding {
                                                    Right = 40
                                                }
                                            },
                                            info = new FillFlowContainer
                                            {
                                                AutoSizeAxes = Axes.Both,
                                                Direction    = FillDirection.Horizontal,
                                                Spacing      = new Vector2(10, 0),
                                                Colour       = OsuColour.Gray(0.7f),
                                                Children     = new Drawable[]
                                                {
                                                    new OsuSpriteText
                                                    {
                                                        Anchor = Anchor.CentreLeft,
                                                        Origin = Anchor.CentreLeft,
                                                        Font   = OsuFont.GetFont(size: 12),
                                                        Text   = HumanizerUtils.Humanize(comment.CreatedAt)
                                                    },
                                                    new RepliesButton(comment.RepliesCount)
                                                    {
                                                        Expanded = { BindTarget = childrenExpanded }
                                                    },
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    childCommentsVisibilityContainer = new FillFlowContainer
                    {
                        RelativeSizeAxes = Axes.X,
                        AutoSizeAxes     = Axes.Y,
                        Direction        = FillDirection.Vertical,
                        Children         = new Drawable[]
                        {
                            childCommentsContainer = new FillFlowContainer
                            {
                                Padding = new MarginPadding {
                                    Left = 20
                                },
                                RelativeSizeAxes = Axes.X,
                                AutoSizeAxes     = Axes.Y,
                                Direction        = FillDirection.Vertical
                            },
                            deletedChildrenPlaceholder = new DeletedChildrenPlaceholder
                            {
                                ShowDeleted = { BindTarget = ShowDeleted }
                            }
                        }
                    }
                }
            };

            deletedChildrenPlaceholder.DeletedCount.Value = comment.DeletedChildrenCount;

            if (comment.UserId.HasValue)
            {
                username.AddUserLink(comment.User);
            }
            else
            {
                username.AddText(comment.LegacyName);
            }

            if (comment.EditedAt.HasValue)
            {
                info.Add(new OsuSpriteText
                {
                    Anchor = Anchor.CentreLeft,
                    Origin = Anchor.CentreLeft,
                    Font   = OsuFont.GetFont(size: 12),
                    Text   = $@"edited {HumanizerUtils.Humanize(comment.EditedAt.Value)} by {comment.EditedUser.Username}"
                });
            }

            if (comment.HasMessage)
            {
                var formattedSource = MessageFormatter.FormatText(comment.GetMessage);
                message.AddLinks(formattedSource.Text, formattedSource.Links);
            }

            if (comment.IsDeleted)
            {
                content.FadeColour(OsuColour.Gray(0.5f));
                votePill.Hide();
            }

            if (comment.IsTopLevel)
            {
                AddInternal(new Container
                {
                    RelativeSizeAxes = Axes.X,
                    Height           = 1.5f,
                    Anchor           = Anchor.BottomCentre,
                    Origin           = Anchor.BottomCentre,
                    Child            = new Box
                    {
                        RelativeSizeAxes = Axes.Both,
                        Colour           = OsuColour.Gray(0.1f)
                    }
                });

                if (comment.ChildComments.Any())
                {
                    AddInternal(new ChevronButton(comment)
                    {
                        Anchor = Anchor.TopRight,
                        Origin = Anchor.TopRight,
                        Margin = new MarginPadding {
                            Right = 30, Top = margin
                        },
                        Expanded = { BindTarget = childrenExpanded }
                    });
                }
            }

            comment.ChildComments.ForEach(c => childCommentsContainer.Add(new DrawableComment(c)
            {
                ShowDeleted = { BindTarget = ShowDeleted }
            }));
        }
Пример #7
0
        public CloudsuBestPerformancePanel()
        {
            RelativeSizeAxes      = Axes.X;
            AutoSizeAxes          = Axes.Y;
            Direction             = FillDirection.Vertical;
            ruleset.ValueChanged += _ => Schedule(refreshScores);

            Children = new Drawable[]
            {
                StatsContainer = new FillFlowContainer
                {
                    AutoSizeAxes     = Axes.Y,
                    RelativeSizeAxes = Axes.X,
                    Direction        = FillDirection.Vertical,
                    Alpha            = 0,
                    Children         = new Drawable[]
                    {
                        new FillFlowContainer
                        {
                            AutoSizeAxes = Axes.Both,
                            Direction    = FillDirection.Horizontal,
                            Spacing      = new Vector2(0, 0),
                            Margin       = new MarginPadding {
                                Top = 10
                            },
                            Children = new Drawable[]
                            {
                                PlaysText = new OsuSpriteText
                                {
                                    Anchor = Anchor.BottomLeft,
                                    Origin = Anchor.BottomLeft,
                                    Font   = OsuFont.GetFont(size: 24, weight: FontWeight.Bold),
                                    Text   = ""
                                },
                                new OsuSpriteText
                                {
                                    Anchor = Anchor.BottomLeft,
                                    Origin = Anchor.BottomLeft,
                                    Font   = OsuFont.GetFont(size: 24, weight: FontWeight.Bold),
                                    Text   = " performances"
                                }
                            }
                        },
                        new FillFlowContainer
                        {
                            AutoSizeAxes = Axes.Both,
                            Direction    = FillDirection.Horizontal,
                            Spacing      = new Vector2(0, 0),
                            Margin       = new MarginPadding {
                                Top = 5
                            },
                            Children = new Drawable[]
                            {
                                PPText = new OsuSpriteText
                                {
                                    Anchor = Anchor.BottomLeft,
                                    Origin = Anchor.BottomLeft,
                                    Font   = OsuFont.GetFont(size: 20, weight: FontWeight.Bold),
                                    Text   = ""
                                },
                                PPSuffix = new OsuSpriteText
                                {
                                    Anchor = Anchor.BottomLeft,
                                    Origin = Anchor.BottomLeft,
                                    Font   = OsuFont.GetFont(size: 16, weight: FontWeight.Bold),
                                    Text   = "pp"
                                },
                                BonusPPText = new OsuSpriteText
                                {
                                    Anchor = Anchor.BottomLeft,
                                    Origin = Anchor.BottomLeft,
                                    Font   = OsuFont.GetFont(size: 15, weight: FontWeight.Bold),
                                    Text   = "",
                                    Margin = new MarginPadding {
                                        Left = 5
                                    }
                                },
                                BonusPPSuffix = new OsuSpriteText
                                {
                                    Anchor = Anchor.BottomLeft,
                                    Origin = Anchor.BottomLeft,
                                    Font   = OsuFont.GetFont(size: 11, weight: FontWeight.Bold),
                                    Text   = "pp"
                                }
                            }
                        },
                    }
                },
                ItemsContainer = new FillFlowContainer
                {
                    AutoSizeAxes     = Axes.Y,
                    RelativeSizeAxes = Axes.X,
                    Margin           = new MarginPadding {
                        Top = 10
                    },
                    Spacing = new Vector2(0, 2)
                },
                missingText = new OsuSpriteText
                {
                    Font  = OsuFont.GetFont(size: 18),
                    Text  = "",
                    Alpha = 0,
                },
            };
        }
 private void load(OverlayColourProvider colourProvider)
 {
     AddRangeInternal(new Drawable[]
     {
         new UpdateableBeatmapSetCover
         {
             RelativeSizeAxes = Axes.Y,
             Width            = cover_width,
             BeatmapSet       = beatmap.BeatmapSet,
             CoverType        = BeatmapSetCoverType.List,
         },
         new Container
         {
             RelativeSizeAxes = Axes.Both,
             Padding          = new MarginPadding {
                 Left = cover_width - corner_radius
             },
             Children = new Drawable[]
             {
                 new Container
                 {
                     RelativeSizeAxes = Axes.Both,
                     Masking          = true,
                     CornerRadius     = corner_radius,
                     Children         = new Drawable[]
                     {
                         new MostPlayedBeatmapContainer
                         {
                             Child = new Container
                             {
                                 RelativeSizeAxes = Axes.Both,
                                 Padding          = new MarginPadding(10),
                                 Children         = new Drawable[]
                                 {
                                     new FillFlowContainer
                                     {
                                         Anchor       = Anchor.CentreLeft,
                                         Origin       = Anchor.CentreLeft,
                                         AutoSizeAxes = Axes.Both,
                                         Direction    = FillDirection.Vertical,
                                         Children     = new Drawable[]
                                         {
                                             new MostPlayedBeatmapMetadataContainer(beatmap),
                                             new LinkFlowContainer(t =>
                                             {
                                                 t.Font   = OsuFont.GetFont(size: 12, weight: FontWeight.Regular);
                                                 t.Colour = colourProvider.Foreground1;
                                             })
                                             {
                                                 AutoSizeAxes = Axes.Both,
                                                 Direction    = FillDirection.Horizontal,
                                             }.With(d =>
                                             {
                                                 d.AddText("mapped by ");
                                                 d.AddUserLink(beatmap.Metadata.Author);
                                             }),
                                         }
                                     },
                                     new PlayCountText(playCount)
                                     {
                                         Anchor = Anchor.CentreRight,
                                         Origin = Anchor.CentreRight
                                     },
                                 }
                             },
                         }
                     }
                 }
             }
         }
     });
 }
Пример #9
0
        private void load(OsuColour colours)
        {
            InternalChildren = new Drawable[]
            {
                new FillFlowContainer
                {
                    RelativeSizeAxes = Axes.Both,
                    Direction        = FillDirection.Vertical,
                    Anchor           = Anchor.TopCentre,
                    Origin           = Anchor.TopCentre,
                    Padding          = new MarginPadding(20),
                    Spacing          = new Vector2(0, 10),
                    Children         = new Drawable[]
                    {
                        new OsuSpriteText
                        {
                            Margin = new MarginPadding {
                                Vertical = 10
                            },
                            Anchor = Anchor.TopCentre,
                            Origin = Anchor.TopCentre,
                            Font   = OsuFont.GetFont(size: 20),
                            Text   = "Let's create an account!",
                        },
                        usernameTextBox = new OsuTextBox
                        {
                            PlaceholderText          = "username",
                            RelativeSizeAxes         = Axes.X,
                            TabbableContentContainer = this
                        },
                        usernameDescription = new ErrorTextFlowContainer
                        {
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y
                        },
                        emailTextBox = new OsuTextBox
                        {
                            PlaceholderText          = "email address",
                            RelativeSizeAxes         = Axes.X,
                            TabbableContentContainer = this
                        },
                        emailAddressDescription = new ErrorTextFlowContainer
                        {
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y
                        },
                        passwordTextBox = new OsuPasswordTextBox
                        {
                            PlaceholderText          = "password",
                            RelativeSizeAxes         = Axes.X,
                            TabbableContentContainer = this,
                        },
                        passwordDescription = new ErrorTextFlowContainer
                        {
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y
                        },
                        new Container
                        {
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y,
                            Children         = new Drawable[]
                            {
                                registerShake = new ShakeContainer
                                {
                                    RelativeSizeAxes = Axes.X,
                                    AutoSizeAxes     = Axes.Y,
                                    Child            = new SettingsButton
                                    {
                                        Text   = "Register",
                                        Margin = new MarginPadding {
                                            Vertical = 20
                                        },
                                        Action = performRegistration
                                    }
                                }
                            }
                        },
                    },
                },
                loadingLayer = new LoadingLayer(true)
            };

            textboxes = new[] { usernameTextBox, emailTextBox, passwordTextBox };

            usernameDescription.AddText("This will be your public presence. No profanity, no impersonation. Avoid exposing your own personal details, too!");

            emailAddressDescription.AddText("Will be used for notifications, account verification and in the case you forget your password. No spam, ever.");
            emailAddressDescription.AddText(" Make sure to get it right!", cp => cp.Font = cp.Font.With(Typeface.Torus, weight: FontWeight.Bold));

            passwordDescription.AddText("At least ");
            characterCheckText = passwordDescription.AddText("8 characters long");
            passwordDescription.AddText(". Choose something long but also something you will remember, like a line from your favourite song.");

            passwordTextBox.Current.ValueChanged += password => { characterCheckText.ForEach(s => s.Colour = password.NewValue.Length == 0 ? Color4.White : Interpolation.ValueAt(password.NewValue.Length, Color4.OrangeRed, Color4.YellowGreen, 0, 8, Easing.In)); };
        }
Пример #10
0
        private void load(BeatmapManager manager, SongSelect songSelect)
        {
            Header.Height = height;

            if (songSelect != null)
            {
                startRequested = b => songSelect.FinaliseSelection(b);
                if (songSelect.AllowEditing)
                {
                    editRequested = songSelect.Edit;
                }
            }

            if (manager != null)
            {
                hideRequested = manager.Hide;
            }

            Header.Children = new Drawable[]
            {
                background = new Box
                {
                    RelativeSizeAxes = Axes.Both,
                },
                triangles = new Triangles
                {
                    TriangleScale    = 2,
                    RelativeSizeAxes = Axes.Both,
                    ColourLight      = Color4Extensions.FromHex(@"3a7285"),
                    ColourDark       = Color4Extensions.FromHex(@"123744")
                },
                new FillFlowContainer
                {
                    Padding      = new MarginPadding(5),
                    Direction    = FillDirection.Horizontal,
                    AutoSizeAxes = Axes.Both,
                    Anchor       = Anchor.CentreLeft,
                    Origin       = Anchor.CentreLeft,
                    Children     = new Drawable[]
                    {
                        new DifficultyIcon(beatmapInfo, shouldShowTooltip: false)
                        {
                            Scale = new Vector2(1.8f),
                        },
                        new FillFlowContainer
                        {
                            Padding = new MarginPadding {
                                Left = 5
                            },
                            Direction    = FillDirection.Vertical,
                            AutoSizeAxes = Axes.Both,
                            Children     = new Drawable[]
                            {
                                new FillFlowContainer
                                {
                                    Direction    = FillDirection.Horizontal,
                                    Spacing      = new Vector2(4, 0),
                                    AutoSizeAxes = Axes.Both,
                                    Children     = new[]
                                    {
                                        new OsuSpriteText
                                        {
                                            Text   = beatmapInfo.DifficultyName,
                                            Font   = OsuFont.GetFont(size: 20),
                                            Anchor = Anchor.BottomLeft,
                                            Origin = Anchor.BottomLeft
                                        },
                                        new OsuSpriteText
                                        {
                                            Text   = BeatmapsetsStrings.ShowDetailsMappedBy(beatmapInfo.Metadata.Author.Username),
                                            Anchor = Anchor.BottomLeft,
                                            Origin = Anchor.BottomLeft
                                        },
                                    }
                                },
                                new FillFlowContainer
                                {
                                    Direction    = FillDirection.Horizontal,
                                    Spacing      = new Vector2(4, 0),
                                    AutoSizeAxes = Axes.Both,
                                    Children     = new Drawable[]
                                    {
                                        new TopLocalRank(beatmapInfo)
                                        {
                                            Scale = new Vector2(0.8f),
                                        },
                                        starCounter = new StarCounter
                                        {
                                            Scale = new Vector2(0.8f),
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };
        }
Пример #11
0
        private void load(OsuColour colours)
        {
            InternalChildren = new Drawable[]
            {
                new Box
                {
                    RelativeSizeAxes = Axes.Both,
                    Colour           = OsuColour.FromHex(@"343138"),
                },
                new GridContainer
                {
                    RelativeSizeAxes = Axes.Both,
                    RowDimensions    = new[]
                    {
                        new Dimension(GridSizeMode.AutoSize),
                        new Dimension(GridSizeMode.Distributed),
                    },
                    Content = new[]
                    {
                        new Drawable[]
                        {
                            new FillFlowContainer
                            {
                                RelativeSizeAxes = Axes.X,
                                AutoSizeAxes     = Axes.Y,
                                Direction        = FillDirection.Vertical,
                                Children         = new Drawable[]
                                {
                                    new Container
                                    {
                                        RelativeSizeAxes = Axes.X,
                                        Height           = 200,
                                        Masking          = true,
                                        Children         = new Drawable[]
                                        {
                                            new MultiplayerBackgroundSprite {
                                                RelativeSizeAxes = Axes.Both
                                            },
                                            new Box
                                            {
                                                RelativeSizeAxes = Axes.Both,
                                                Colour           = ColourInfo.GradientVertical(Color4.Black.Opacity(0.5f), Color4.Black.Opacity(0)),
                                            },
                                            new Container
                                            {
                                                RelativeSizeAxes = Axes.Both,
                                                Padding          = new MarginPadding(20),
                                                Children         = new Drawable[]
                                                {
                                                    participantCount = new ParticipantCountDisplay
                                                    {
                                                        Anchor = Anchor.TopRight,
                                                        Origin = Anchor.TopRight,
                                                    },
                                                    name = new OsuSpriteText
                                                    {
                                                        Anchor  = Anchor.BottomLeft,
                                                        Origin  = Anchor.BottomLeft,
                                                        Font    = OsuFont.GetFont(size: 30),
                                                        Current = RoomName
                                                    },
                                                },
                                            },
                                        },
                                    },
                                    new StatusColouredContainer(transition_duration)
                                    {
                                        RelativeSizeAxes = Axes.X,
                                        Height           = 5,
                                        Child            = new Box {
                                            RelativeSizeAxes = Axes.Both
                                        }
                                    },
                                    new Container
                                    {
                                        RelativeSizeAxes = Axes.X,
                                        AutoSizeAxes     = Axes.Y,
                                        Children         = new Drawable[]
                                        {
                                            new Box
                                            {
                                                RelativeSizeAxes = Axes.Both,
                                                Colour           = OsuColour.FromHex(@"28242d"),
                                            },
                                            new FillFlowContainer
                                            {
                                                RelativeSizeAxes = Axes.X,
                                                AutoSizeAxes     = Axes.Y,
                                                Direction        = FillDirection.Vertical,
                                                LayoutDuration   = transition_duration,
                                                Padding          = contentPadding,
                                                Spacing          = new Vector2(0f, 5f),
                                                Children         = new Drawable[]
                                                {
                                                    new StatusColouredContainer(transition_duration)
                                                    {
                                                        AutoSizeAxes = Axes.Both,
                                                        Child        = new StatusText
                                                        {
                                                            Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 14),
                                                        }
                                                    },
                                                    beatmapTypeInfo = new BeatmapTypeInfo(),
                                                },
                                            },
                                        },
                                    },
                                    new Container
                                    {
                                        RelativeSizeAxes = Axes.X,
                                        AutoSizeAxes     = Axes.Y,
                                        Padding          = contentPadding,
                                        Children         = new Drawable[]
                                        {
                                            participantInfo = new ParticipantInfo(),
                                        },
                                    },
                                },
                            },
                        },
                        new Drawable[]
                        {
                            new MatchParticipants
                            {
                                RelativeSizeAxes = Axes.Both,
                            }
                        }
                    }
                }
            };

            Status.BindValueChanged(_ => updateStatus(), true);
            RoomID.BindValueChanged(_ => updateStatus(), true);
        }
Пример #12
0
        private void load(IAPIProvider api, BeatmapManager beatmaps)
        {
            FillFlowContainer textSprites;

            AddRangeInternal(new Drawable[]
            {
                shakeContainer = new ShakeContainer
                {
                    Depth            = -1,
                    RelativeSizeAxes = Axes.Both,
                    Masking          = true,
                    CornerRadius     = 5,
                    Children         = new Drawable[]
                    {
                        button = new HeaderButton {
                            RelativeSizeAxes = Axes.Both
                        },
                        new Container
                        {
                            // cannot nest inside here due to the structure of button (putting things in its own content).
                            // requires framework fix.
                            Padding = new MarginPadding {
                                Horizontal = 10
                            },
                            RelativeSizeAxes = Axes.Both,
                            Children         = new Drawable[]
                            {
                                textSprites = new FillFlowContainer
                                {
                                    Depth            = -1,
                                    Anchor           = Anchor.CentreLeft,
                                    Origin           = Anchor.CentreLeft,
                                    AutoSizeAxes     = Axes.Both,
                                    AutoSizeDuration = 500,
                                    AutoSizeEasing   = Easing.OutQuint,
                                    Direction        = FillDirection.Vertical,
                                },
                                new SpriteIcon
                                {
                                    Depth  = -1,
                                    Anchor = Anchor.CentreRight,
                                    Origin = Anchor.CentreRight,
                                    Icon   = FontAwesome.Solid.Download,
                                    Size   = new Vector2(16),
                                    Margin = new MarginPadding {
                                        Right = 5
                                    },
                                },
                            }
                        },
                        new DownloadProgressBar(BeatmapSet.Value)
                        {
                            Depth  = -2,
                            Anchor = Anchor.BottomLeft,
                            Origin = Anchor.BottomLeft,
                        },
                    },
                },
            });

            button.Action = () =>
            {
                if (State.Value != DownloadState.NotDownloaded)
                {
                    shakeContainer.Shake();
                    return;
                }

                beatmaps.Download(BeatmapSet.Value, noVideo);
            };

            localUser.BindTo(api.LocalUser);
            localUser.BindValueChanged(userChanged, true);
            button.Enabled.BindValueChanged(enabledChanged, true);

            State.BindValueChanged(state =>
            {
                switch (state.NewValue)
                {
                case DownloadState.Downloading:
                    textSprites.Children = new Drawable[]
                    {
                        new OsuSpriteText
                        {
                            Text = "下载中...",
                            Font = OsuFont.GetFont(size: 13, weight: FontWeight.Bold)
                        },
                    };
                    break;

                case DownloadState.Downloaded:
                    textSprites.Children = new Drawable[]
                    {
                        new OsuSpriteText
                        {
                            Text = "导入中...",
                            Font = OsuFont.GetFont(size: 13, weight: FontWeight.Bold)
                        },
                    };
                    break;

                case DownloadState.LocallyAvailable:
                    this.FadeOut(200);
                    break;

                case DownloadState.NotDownloaded:
                    textSprites.Children = new Drawable[]
                    {
                        new OsuSpriteText
                        {
                            Text = "下载",
                            Font = OsuFont.GetFont(size: 13, weight: FontWeight.Bold)
                        },
                        new OsuSpriteText
                        {
                            Text = BeatmapSet.Value.OnlineInfo.HasVideo && noVideo ? "不带视频" : string.Empty,
                            Font = OsuFont.GetFont(size: 11, weight: FontWeight.Bold)
                        },
                    };
                    this.FadeIn(200);
                    break;
                }
            }, true);
        }
Пример #13
0
        private void load()
        {
            if (hitEvents == null || hitEvents.Count == 0)
            {
                return;
            }

            int[] bins = new int[total_timing_distribution_bins];

            double binSize = Math.Ceiling(hitEvents.Max(e => Math.Abs(e.TimeOffset)) / timing_distribution_bins);

            // Prevent div-by-0 by enforcing a minimum bin size
            binSize = Math.Max(1, binSize);

            foreach (var e in hitEvents)
            {
                int binOffset = (int)(e.TimeOffset / binSize);
                bins[timing_distribution_centre_bin_index + binOffset]++;
            }

            int maxCount = bins.Max();
            var bars     = new Drawable[total_timing_distribution_bins];

            for (int i = 0; i < bars.Length; i++)
            {
                bars[i] = new Bar {
                    Height = Math.Max(0.05f, (float)bins[i] / maxCount)
                }
            }
            ;

            Container axisFlow;

            InternalChild = new GridContainer
            {
                Anchor           = Anchor.Centre,
                Origin           = Anchor.Centre,
                RelativeSizeAxes = Axes.Both,
                Width            = 0.8f,
                Content          = new[]
                {
                    new Drawable[]
                    {
                        new GridContainer
                        {
                            RelativeSizeAxes = Axes.Both,
                            Content          = new[] { bars }
                        }
                    },
                    new Drawable[]
                    {
                        axisFlow = new Container
                        {
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y
                        }
                    },
                },
                RowDimensions = new[]
                {
                    new Dimension(),
                    new Dimension(GridSizeMode.AutoSize),
                }
            };

            // Our axis will contain one centre element + 5 points on each side, each with a value depending on the number of bins * bin size.
            double maxValue      = timing_distribution_bins * binSize;
            double axisValueStep = maxValue / axis_points;

            axisFlow.Add(new OsuSpriteText
            {
                Anchor = Anchor.Centre,
                Origin = Anchor.Centre,
                Text   = "0",
                Font   = OsuFont.GetFont(size: 12, weight: FontWeight.SemiBold)
            });

            for (int i = 1; i <= axis_points; i++)
            {
                double axisValue = i * axisValueStep;
                float  position  = (float)(axisValue / maxValue);
                float  alpha     = 1f - position * 0.8f;

                axisFlow.Add(new OsuSpriteText
                {
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                    RelativePositionAxes = Axes.X,
                    X     = -position / 2,
                    Alpha = alpha,
                    Text  = axisValue.ToString("-0"),
                    Font  = OsuFont.GetFont(size: 12, weight: FontWeight.SemiBold)
                });

                axisFlow.Add(new OsuSpriteText
                {
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                    RelativePositionAxes = Axes.X,
                    X     = position / 2,
                    Alpha = alpha,
                    Text  = axisValue.ToString("+0"),
                    Font  = OsuFont.GetFont(size: 12, weight: FontWeight.SemiBold)
                });
            }
        }
Пример #14
0
        public SelectionCard(string romName)
        {
            Anchor           = Anchor.Centre;
            Origin           = Anchor.Centre;
            RelativeSizeAxes = Axes.Y;
            AutoSizeAxes     = Axes.X;
            Masking          = true;
            CornerRadius     = 15;

            InternalChild = new Container
            {
                Anchor           = Anchor.Centre,
                Origin           = Anchor.Centre,
                RelativeSizeAxes = Axes.Y,
                AutoSizeAxes     = Axes.X,
                Children         = new Drawable[]
                {
                    new Box
                    {
                        RelativeSizeAxes = Axes.Both,
                        Colour           = Color4.Gray.Opacity(0.4f)
                    },
                    new FillFlowContainer
                    {
                        RelativeSizeAxes = Axes.Y,
                        AutoSizeAxes     = Axes.X,
                        Anchor           = Anchor.TopLeft,
                        Origin           = Anchor.TopLeft,
                        Direction        = FillDirection.Vertical,
                        Spacing          = new osuTK.Vector2(0, 0.10f),
                        Children         = new Drawable[]
                        {
                            new Container
                            {
                                Masking          = true,
                                RelativeSizeAxes = Axes.Y,
                                Height           = 0.75f,
                                Width            = 300,
                                Margin           = new MarginPadding {
                                    Horizontal = 10, Vertical = 10
                                },
                                Children = new Drawable[]
                                {
                                    new Box
                                    {
                                        RelativeSizeAxes = Axes.Both,
                                        Colour           = Color4.Black.Opacity(0.6f)
                                    },
                                    loadFailedText = new OsuSpriteText
                                    {
                                        Anchor = Anchor.BottomCentre,
                                        Origin = Anchor.BottomCentre,
                                        Margin = new MarginPadding {
                                            Bottom = 10
                                        },
                                        Font   = OsuFont.GetFont(Typeface.Torus, 20, FontWeight.Bold),
                                        Text   = "Failed to load cartridge!",
                                        Colour = Color4.Red,
                                        Alpha  = 0,
                                    },
                                    cartridge = new Sprite
                                    {
                                        Anchor = Anchor.Centre,
                                        Origin = Anchor.Centre,
                                        Scale  = new osuTK.Vector2(2)
                                    },
                                    loadFailedIcon = new SpriteIcon
                                    {
                                        Icon   = OsuIcon.CrossCircle,
                                        Anchor = Anchor.Centre,
                                        Origin = Anchor.Centre,
                                        Colour = Color4.Red.Opacity(0.9f),
                                        Size   = new osuTK.Vector2(160),
                                        Alpha  = 0
                                    },
                                },
                                CornerRadius = 15
                            },
                            new Container
                            {
                                Anchor           = Anchor.TopLeft,
                                Origin           = Anchor.TopLeft,
                                Width            = 300,
                                RelativeSizeAxes = Axes.Y,
                                Masking          = true,
                                CornerRadius     = 15,
                                Height           = 0.15f,
                                Margin           = new MarginPadding {
                                    Horizontal = 10, Vertical = 10
                                },
                                Children = new Drawable[]
                                {
                                    new Box
                                    {
                                        RelativeSizeAxes = Axes.Both,
                                        Colour           = Color4.Black.Opacity(0.6f),
                                    },
                                    romNameText = new ScrollingSpriteText
                                    {
                                        Margin = new MarginPadding {
                                            Horizontal = 5
                                        },
                                        Font   = OsuFont.GetFont(Typeface.Torus, 28, FontWeight.Bold),
                                        Anchor = Anchor.Centre,
                                        Origin = Anchor.Centre,
                                        Text   = romName.Replace(RomStore.RecognizedExtensions.Where(ext => romName.Contains(ext)).First(), "")
                                    },
                                }
                            }
                        }
                    }
                }
            };
        }
Пример #15
0
 private void addText(string text)
 => content.AddText(text, t => t.Font = OsuFont.GetFont(size: font_size, weight: FontWeight.SemiBold));
Пример #16
0
        private void load()
        {
            var user = User.User;

            var backgroundColour = Color4Extensions.FromHex("#33413C");

            InternalChild = new GridContainer
            {
                RelativeSizeAxes = Axes.Both,
                ColumnDimensions = new[]
                {
                    new Dimension(GridSizeMode.Absolute, 18),
                    new Dimension(GridSizeMode.AutoSize),
                    new Dimension(),
                    new Dimension(GridSizeMode.AutoSize),
                },
                Content = new[]
                {
                    new Drawable[]
                    {
                        crown = new SpriteIcon
                        {
                            Anchor = Anchor.CentreLeft,
                            Origin = Anchor.CentreLeft,
                            Icon   = FontAwesome.Solid.Crown,
                            Size   = new Vector2(14),
                            Colour = Color4Extensions.FromHex("#F7E65D"),
                            Alpha  = 0
                        },
                        new TeamDisplay(User),
                        new Container
                        {
                            RelativeSizeAxes = Axes.Both,
                            Masking          = true,
                            CornerRadius     = 5,
                            Children         = new Drawable[]
                            {
                                new Box
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Colour           = backgroundColour
                                },
                                new UserCoverBackground
                                {
                                    Anchor           = Anchor.CentreRight,
                                    Origin           = Anchor.CentreRight,
                                    RelativeSizeAxes = Axes.Both,
                                    Width            = 0.75f,
                                    User             = user,
                                    Colour           = ColourInfo.GradientHorizontal(Color4.White.Opacity(0), Color4.White.Opacity(0.25f))
                                },
                                new FillFlowContainer
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Spacing          = new Vector2(10),
                                    Direction        = FillDirection.Horizontal,
                                    Children         = new Drawable[]
                                    {
                                        new UpdateableAvatar
                                        {
                                            Anchor           = Anchor.CentreLeft,
                                            Origin           = Anchor.CentreLeft,
                                            RelativeSizeAxes = Axes.Both,
                                            FillMode         = FillMode.Fit,
                                            User             = user
                                        },
                                        new UpdateableFlag
                                        {
                                            Anchor  = Anchor.CentreLeft,
                                            Origin  = Anchor.CentreLeft,
                                            Size    = new Vector2(30, 20),
                                            Country = user?.Country
                                        },
                                        new OsuSpriteText
                                        {
                                            Anchor = Anchor.CentreLeft,
                                            Origin = Anchor.CentreLeft,
                                            Font   = OsuFont.GetFont(weight: FontWeight.Bold, size: 18),
                                            Text   = user?.Username
                                        },
                                        userRankText = new OsuSpriteText
                                        {
                                            Anchor = Anchor.CentreLeft,
                                            Origin = Anchor.CentreLeft,
                                            Font   = OsuFont.GetFont(size: 14),
                                        }
                                    }
                                },
                                new Container
                                {
                                    Anchor       = Anchor.CentreRight,
                                    Origin       = Anchor.CentreRight,
                                    AutoSizeAxes = Axes.Both,
                                    Margin       = new MarginPadding {
                                        Right = 70
                                    },
                                    Child = userModsDisplay = new ModDisplay
                                    {
                                        Scale         = new Vector2(0.5f),
                                        ExpansionMode = ExpansionMode.AlwaysContracted,
                                    }
                                },
                                userStateDisplay = new StateDisplay
                                {
                                    Anchor = Anchor.CentreRight,
                                    Origin = Anchor.CentreRight,
                                    Margin = new MarginPadding {
                                        Right = 10
                                    },
                                }
                            }
                        },
                        kickButton = new KickButton
                        {
                            Anchor = Anchor.Centre,
                            Origin = Anchor.Centre,
                            Alpha  = 0,
                            Margin = new MarginPadding(4),
                            Action = () => Client.KickUser(User.UserID),
                        },
                    },
                }
            };
        }
Пример #17
0
        private void load(OsuColour colours)
        {
            const float user_header_height = 120;

            Children = new Drawable[]
            {
                new Container
                {
                    RelativeSizeAxes = Axes.Both,
                    Padding          = new MarginPadding {
                        Top = user_header_height
                    },
                    Children = new Drawable[]
                    {
                        new Box
                        {
                            RelativeSizeAxes = Axes.Both,
                            Colour           = Color4.White,
                        },
                    }
                },
                new FillFlowContainer
                {
                    RelativeSizeAxes = Axes.X,
                    AutoSizeAxes     = Axes.Y,
                    Direction        = FillDirection.Vertical,
                    Children         = new Drawable[]
                    {
                        new UserHeader(Score.User)
                        {
                            Anchor           = Anchor.TopCentre,
                            Origin           = Anchor.TopCentre,
                            RelativeSizeAxes = Axes.X,
                            Height           = user_header_height,
                        },
                        new UpdateableRank(Score.Rank)
                        {
                            Anchor = Anchor.TopCentre,
                            Origin = Anchor.TopCentre,
                            Size   = new Vector2(150, 60),
                            Margin = new MarginPadding(20),
                        },
                        scoreContainer = new Container
                        {
                            Anchor           = Anchor.TopCentre,
                            Origin           = Anchor.TopCentre,
                            RelativeSizeAxes = Axes.X,
                            Height           = 60,
                            Children         = new Drawable[]
                            {
                                new SongProgressGraph
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Alpha            = 0.5f,
                                    Objects          = Beatmap.Beatmap.HitObjects,
                                },
                                scoreCounter = new SlowScoreCounter(6)
                                {
                                    Anchor   = Anchor.Centre,
                                    Origin   = Anchor.Centre,
                                    Colour   = colours.PinkDarker,
                                    Y        = 10,
                                    TextSize = 56,
                                },
                            }
                        },
                        new OsuSpriteText
                        {
                            Anchor = Anchor.TopCentre,
                            Origin = Anchor.TopCentre,
                            Colour = colours.PinkDarker,
                            Shadow = false,
                            Font   = OsuFont.GetFont(weight: FontWeight.Bold),
                            Text   = "total score",
                            Margin = new MarginPadding {
                                Bottom = 15
                            },
                        },
                        new BeatmapDetails(Beatmap.BeatmapInfo)
                        {
                            Anchor = Anchor.TopCentre,
                            Origin = Anchor.TopCentre,
                            Margin = new MarginPadding {
                                Bottom = 10
                            },
                        },
                        new DateTimeDisplay(Score.Date.LocalDateTime)
                        {
                            Anchor = Anchor.TopCentre,
                            Origin = Anchor.TopCentre,
                        },
                        new Container
                        {
                            RelativeSizeAxes = Axes.X,
                            Size             = new Vector2(0.75f, 1),
                            Anchor           = Anchor.TopCentre,
                            Origin           = Anchor.TopCentre,
                            Margin           = new MarginPadding {
                                Top = 10, Bottom = 10
                            },
                            Children = new Drawable[]
                            {
                                new Box
                                {
                                    Colour = ColourInfo.GradientHorizontal(
                                        colours.GrayC.Opacity(0),
                                        colours.GrayC.Opacity(0.9f)),
                                    RelativeSizeAxes = Axes.Both,
                                    Size             = new Vector2(0.5f, 1),
                                },
                                new Box
                                {
                                    Anchor = Anchor.TopRight,
                                    Origin = Anchor.TopRight,
                                    Colour = ColourInfo.GradientHorizontal(
                                        colours.GrayC.Opacity(0.9f),
                                        colours.GrayC.Opacity(0)),
                                    RelativeSizeAxes = Axes.Both,
                                    Size             = new Vector2(0.5f, 1),
                                },
                            }
                        },
                        statisticsContainer = new FillFlowContainer <DrawableScoreStatistic>
                        {
                            AutoSizeAxes   = Axes.Both,
                            Anchor         = Anchor.TopCentre,
                            Origin         = Anchor.TopCentre,
                            Direction      = FillDirection.Horizontal,
                            LayoutDuration = 200,
                            LayoutEasing   = Easing.OutQuint
                        },
                    },
                },
                new FillFlowContainer
                {
                    Anchor = Anchor.BottomCentre,
                    Origin = Anchor.BottomCentre,
                    Margin = new MarginPadding {
                        Bottom = 10
                    },
                    Spacing      = new Vector2(5),
                    AutoSizeAxes = Axes.Both,
                    Direction    = FillDirection.Horizontal,
                    Children     = new Drawable[]
                    {
                        new ReplayDownloadButton(score),
                        new RetryButton()
                    }
                },
            };

            statisticsContainer.ChildrenEnumerable = Score.Statistics.OrderByDescending(p => p.Key).Select(s => new DrawableScoreStatistic(s));
        }
Пример #18
0
 private void load(OverlayColourProvider colourProvider)
 {
     Children = new Drawable[]
     {
         new FillFlowContainer
         {
             RelativeSizeAxes = Axes.X,
             AutoSizeAxes     = Axes.Y,
             Direction        = FillDirection.Vertical,
             Children         = new Drawable[]
             {
                 new ClickableNewsBackground(post),
                 new GridContainer
                 {
                     RelativeSizeAxes = Axes.X,
                     AutoSizeAxes     = Axes.Y,
                     RowDimensions    = new[]
                     {
                         new Dimension(GridSizeMode.AutoSize)
                     },
                     ColumnDimensions = new[]
                     {
                         new Dimension(GridSizeMode.Absolute, size: 60),
                         new Dimension(GridSizeMode.Absolute, size: 20),
                         new Dimension()
                     },
                     Content = new[]
                     {
                         new Drawable[]
                         {
                             new Date(post.PublishedAt),
                             new Container
                             {
                                 RelativeSizeAxes = Axes.Both,
                                 Padding          = new MarginPadding {
                                     Vertical = 10
                                 },
                                 Child = new Box
                                 {
                                     Anchor           = Anchor.TopCentre,
                                     Origin           = Anchor.TopRight,
                                     Width            = 1,
                                     RelativeSizeAxes = Axes.Y,
                                     Colour           = colourProvider.Light1
                                 }
                             },
                             new FillFlowContainer
                             {
                                 RelativeSizeAxes = Axes.X,
                                 AutoSizeAxes     = Axes.Y,
                                 Margin           = new MarginPadding {
                                     Top = 5, Bottom = 10
                                 },
                                 Padding = new MarginPadding {
                                     Right = 10
                                 },
                                 Spacing   = new Vector2(0, 10),
                                 Direction = FillDirection.Vertical,
                                 Children  = new Drawable[]
                                 {
                                     new NewsTitleLink(post),
                                     new TextFlowContainer(f =>
                                     {
                                         f.Font = OsuFont.GetFont(size: 12, weight: FontWeight.Regular);
                                     })
                                     {
                                         RelativeSizeAxes = Axes.X,
                                         AutoSizeAxes     = Axes.Y,
                                         Text             = post.Preview
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     };
 }
Пример #19
0
Файл: Toast.cs Проект: Wieku/osu
        protected Toast(LocalisableString description, LocalisableString value, LocalisableString shortcut)
        {
            Anchor = Anchor.Centre;
            Origin = Anchor.Centre;

            // A toast's height is decided (and transformed) by the containing OnScreenDisplay.
            RelativeSizeAxes = Axes.Y;
            AutoSizeAxes     = Axes.X;

            InternalChildren = new Drawable[]
            {
                new Container // this container exists just to set a minimum width for the toast
                {
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                    Width  = toast_minimum_width
                },
                new Box
                {
                    RelativeSizeAxes = Axes.Both,
                    Colour           = Color4.Black,
                    Alpha            = 0.7f
                },
                content = new Container
                {
                    Anchor           = Anchor.Centre,
                    Origin           = Anchor.Centre,
                    RelativeSizeAxes = Axes.Both,
                },
                new OsuSpriteText
                {
                    Padding = new MarginPadding(10),
                    Name    = "Description",
                    Font    = OsuFont.GetFont(size: 14, weight: FontWeight.Bold),
                    Spacing = new Vector2(1, 0),
                    Anchor  = Anchor.TopCentre,
                    Origin  = Anchor.TopCentre,
                    Text    = description.ToUpper()
                },
                ValueText = new OsuSpriteText
                {
                    Font    = OsuFont.GetFont(size: 24, weight: FontWeight.Light),
                    Padding = new MarginPadding {
                        Horizontal = 10
                    },
                    Name   = "Value",
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                    Text   = value
                },
                ShortcutText = new OsuSpriteText
                {
                    Anchor = Anchor.BottomCentre,
                    Origin = Anchor.BottomCentre,
                    Name   = "Shortcut",
                    Alpha  = 0.3f,
                    Margin = new MarginPadding {
                        Bottom = 15, Horizontal = 10
                    },
                    Font = OsuFont.GetFont(size: 12, weight: FontWeight.Bold),
                    Text = string.IsNullOrEmpty(shortcut.ToString()) ? ToastStrings.NoKeyBound.ToUpper() : shortcut.ToUpper()
                },
            };
        }
Пример #20
0
 public HeaderText(string text)
 {
     Text = text.ToUpper();
     Font = OsuFont.GetFont(size: 12, weight: FontWeight.Bold);
 }
Пример #21
0
        private void matchChanged(ValueChangedEvent <TournamentMatch> match)
        {
            if (match.NewValue == null)
            {
                mainContainer.Clear();
                return;
            }

            var upcoming     = ladder.Matches.Where(p => !p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4);
            var conditionals = ladder
                               .Matches.Where(p => !p.Completed.Value && (p.Team1.Value == null || p.Team2.Value == null) && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4)
                               .SelectMany(m => m.ConditionalMatches.Where(cp => m.Acronyms.TrueForAll(a => cp.Acronyms.Contains(a))));

            upcoming = upcoming.Concat(conditionals);
            upcoming = upcoming.OrderBy(p => p.Date.Value).Take(12);

            mainContainer.Child = new FillFlowContainer
            {
                RelativeSizeAxes = Axes.Both,
                Direction        = FillDirection.Vertical,
                Children         = new Drawable[]
                {
                    new Container
                    {
                        RelativeSizeAxes = Axes.Both,
                        Height           = 0.65f,
                        Child            = new FillFlowContainer
                        {
                            RelativeSizeAxes = Axes.Both,
                            Direction        = FillDirection.Horizontal,
                            Children         = new Drawable[]
                            {
                                new ScheduleContainer("recent matches")
                                {
                                    RelativeSizeAxes   = Axes.Both,
                                    Width              = 0.4f,
                                    ChildrenEnumerable = ladder.Matches
                                                         .Where(p => p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null &&
                                                                Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4)
                                                         .OrderByDescending(p => p.Date.Value)
                                                         .Take(8)
                                                         .Select(p => new ScheduleMatch(p))
                                },
                                new ScheduleContainer("match overview")
                                {
                                    RelativeSizeAxes   = Axes.Both,
                                    Width              = 0.6f,
                                    ChildrenEnumerable = upcoming.Select(p => new ScheduleMatch(p))
                                },
                            }
                        }
                    },
                    new ScheduleContainer("current match")
                    {
                        RelativeSizeAxes = Axes.Both,
                        Height           = 0.25f,
                        Children         = new Drawable[]
                        {
                            new OsuSpriteText
                            {
                                Margin = new MarginPadding {
                                    Left = -10, Bottom = 10, Top = -5
                                },
                                Spacing = new Vector2(10, 0),
                                Text    = match.NewValue.Round.Value?.Name.Value,
                                Colour  = Color4.Black,
                                Font    = OsuFont.GetFont(size: 20)
                            },
                            new ScheduleMatch(match.NewValue, false),
                            new OsuSpriteText
                            {
                                Text   = "Start Time " + match.NewValue.Date.Value.ToUniversalTime().ToString("HH:mm UTC"),
                                Colour = Color4.Black,
                                Font   = OsuFont.GetFont(size: 20)
                            },
                        }
                    }
                }
            };
        }
        private void load(BeatmapDifficultyCache beatmapDifficultyCache)
        {
            var beatmap  = score.Beatmap;
            var metadata = beatmap.BeatmapSet?.Metadata ?? beatmap.Metadata;
            var creator  = metadata.Author?.Username;

            var topStatistics = new List <StatisticDisplay>
            {
                new AccuracyStatistic(score.Accuracy),
                new ComboStatistic(score.MaxCombo, !score.Statistics.TryGetValue(HitResult.Miss, out var missCount) || missCount == 0),
                new PerformanceStatistic(score),
            };

            var bottomStatistics = new List <HitResultStatistic>();

            foreach (var result in score.GetStatisticsForDisplay())
            {
                bottomStatistics.Add(new HitResultStatistic(result));
            }

            statisticDisplays.AddRange(topStatistics);
            statisticDisplays.AddRange(bottomStatistics);

            var starDifficulty = beatmapDifficultyCache.GetDifficultyAsync(beatmap, score.Ruleset, score.Mods).Result;

            InternalChildren = new Drawable[]
            {
                new FillFlowContainer
                {
                    RelativeSizeAxes = Axes.Both,
                    Direction        = FillDirection.Vertical,
                    Spacing          = new Vector2(20),
                    Children         = new Drawable[]
                    {
                        new FillFlowContainer
                        {
                            Anchor           = Anchor.TopCentre,
                            Origin           = Anchor.TopCentre,
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y,
                            Direction        = FillDirection.Vertical,
                            Children         = new Drawable[]
                            {
                                new OsuSpriteText
                                {
                                    Anchor   = Anchor.TopCentre,
                                    Origin   = Anchor.TopCentre,
                                    Text     = new RomanisableString(metadata.TitleUnicode, metadata.Title),
                                    Font     = OsuFont.Torus.With(size: 20, weight: FontWeight.SemiBold),
                                    MaxWidth = ScorePanel.EXPANDED_WIDTH - padding * 2,
                                    Truncate = true,
                                },
                                new OsuSpriteText
                                {
                                    Anchor   = Anchor.TopCentre,
                                    Origin   = Anchor.TopCentre,
                                    Text     = new RomanisableString(metadata.ArtistUnicode, metadata.Artist),
                                    Font     = OsuFont.Torus.With(size: 14, weight: FontWeight.SemiBold),
                                    MaxWidth = ScorePanel.EXPANDED_WIDTH - padding * 2,
                                    Truncate = true,
                                },
                                new Container
                                {
                                    Anchor = Anchor.TopCentre,
                                    Origin = Anchor.TopCentre,
                                    Margin = new MarginPadding {
                                        Top = 40
                                    },
                                    RelativeSizeAxes = Axes.X,
                                    Height           = 230,
                                    Child            = new AccuracyCircle(score, withFlair)
                                    {
                                        Anchor           = Anchor.Centre,
                                        Origin           = Anchor.Centre,
                                        RelativeSizeAxes = Axes.Both,
                                        FillMode         = FillMode.Fit,
                                    }
                                },
                                scoreCounter = new TotalScoreCounter
                                {
                                    Margin = new MarginPadding {
                                        Top = 0, Bottom = 5
                                    },
                                    Current       = { Value = 0 },
                                    Alpha         = 0,
                                    AlwaysPresent = true
                                },
                                starAndModDisplay = new FillFlowContainer
                                {
                                    Anchor       = Anchor.TopCentre,
                                    Origin       = Anchor.TopCentre,
                                    AutoSizeAxes = Axes.Both,
                                    Spacing      = new Vector2(5, 0),
                                    Children     = new Drawable[]
                                    {
                                        new StarRatingDisplay(starDifficulty)
                                        {
                                            Anchor = Anchor.CentreLeft,
                                            Origin = Anchor.CentreLeft
                                        },
                                    }
                                },
                                new FillFlowContainer
                                {
                                    Anchor       = Anchor.TopCentre,
                                    Origin       = Anchor.TopCentre,
                                    Direction    = FillDirection.Vertical,
                                    AutoSizeAxes = Axes.Both,
                                    Children     = new Drawable[]
                                    {
                                        new OsuSpriteText
                                        {
                                            Anchor = Anchor.TopCentre,
                                            Origin = Anchor.TopCentre,
                                            Text   = beatmap.Version,
                                            Font   = OsuFont.Torus.With(size: 16, weight: FontWeight.SemiBold),
                                        },
                                        new OsuTextFlowContainer(s => s.Font = OsuFont.Torus.With(size: 12))
                                        {
                                            Anchor       = Anchor.TopCentre,
                                            Origin       = Anchor.TopCentre,
                                            AutoSizeAxes = Axes.Both,
                                            Direction    = FillDirection.Horizontal,
                                        }.With(t =>
                                        {
                                            if (!string.IsNullOrEmpty(creator))
                                            {
                                                t.AddText("mapped by ");
                                                t.AddText(creator, s => s.Font = s.Font.With(weight: FontWeight.SemiBold));
                                            }
                                        })
                                    }
                                },
                            }
                        },
                        new FillFlowContainer
                        {
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y,
                            Direction        = FillDirection.Vertical,
                            Spacing          = new Vector2(0, 5),
                            Children         = new Drawable[]
                            {
                                new GridContainer
                                {
                                    RelativeSizeAxes = Axes.X,
                                    AutoSizeAxes     = Axes.Y,
                                    Content          = new[] { topStatistics.Cast <Drawable>().ToArray() },
                                    RowDimensions    = new[]
                                    {
                                        new Dimension(GridSizeMode.AutoSize),
                                    }
                                },
                                new GridContainer
                                {
                                    RelativeSizeAxes = Axes.X,
                                    AutoSizeAxes     = Axes.Y,
                                    Content          = new[] { bottomStatistics.Where(s => s.Result <= HitResult.Perfect).ToArray() },
                                    RowDimensions    = new[]
                                    {
                                        new Dimension(GridSizeMode.AutoSize),
                                    }
                                },
                                new GridContainer
                                {
                                    RelativeSizeAxes = Axes.X,
                                    AutoSizeAxes     = Axes.Y,
                                    Content          = new[] { bottomStatistics.Where(s => s.Result > HitResult.Perfect).ToArray() },
                                    RowDimensions    = new[]
                                    {
                                        new Dimension(GridSizeMode.AutoSize),
                                    }
                                }
                            }
                        }
                    }
                },
                new OsuSpriteText
                {
                    Anchor = Anchor.BottomCentre,
                    Origin = Anchor.BottomCentre,
                    Font   = OsuFont.GetFont(size: 10, weight: FontWeight.SemiBold),
                    Text   = $"Played on {score.Date.ToLocalTime():d MMMM yyyy HH:mm}"
                }
            };

            if (score.Mods.Any())
            {
                starAndModDisplay.Add(new ModDisplay
                {
                    Anchor = Anchor.CentreLeft,
                    Origin = Anchor.CentreLeft,
                    DisplayUnrankedText = false,
                    ExpansionMode       = ExpansionMode.AlwaysExpanded,
                    Scale   = new Vector2(0.5f),
                    Current = { Value = score.Mods }
                });
            }
        }
        private void load(OsuColour colours)
        {
            OsuSpriteText     summary;
            Container         flagContainer;
            LinkFlowContainer hostText;

            InternalChildren = new Drawable[]
            {
                new FillFlowContainer
                {
                    AutoSizeAxes     = Axes.X,
                    RelativeSizeAxes = Axes.Y,
                    Direction        = FillDirection.Horizontal,
                    Spacing          = new Vector2(5f, 0f),
                    Children         = new Drawable[]
                    {
                        flagContainer = new Container
                        {
                            Width            = 22f,
                            RelativeSizeAxes = Axes.Y,
                        },
                        hostText = new LinkFlowContainer
                        {
                            Anchor       = Anchor.CentreLeft,
                            Origin       = Anchor.CentreLeft,
                            AutoSizeAxes = Axes.Both
                        }
                    },
                },
                new FillFlowContainer
                {
                    Anchor       = Anchor.CentreRight,
                    Origin       = Anchor.CentreRight,
                    AutoSizeAxes = Axes.Both,
                    Direction    = FillDirection.Horizontal,
                    Colour       = colours.Gray9,
                    Children     = new[]
                    {
                        summary = new OsuSpriteText
                        {
                            Text = "0 participants",
                            Font = OsuFont.GetFont(size: 14)
                        }
                    },
                },
            };

            Host.BindValueChanged(host =>
            {
                hostText.Clear();
                flagContainer.Clear();

                if (host.NewValue != null)
                {
                    hostText.AddText("hosted by ");
                    hostText.AddUserLink(host.NewValue, s => s.Font = s.Font.With(Typeface.Torus, weight: FontWeight.Bold, italics: true));

                    flagContainer.Child = new UpdateableFlag(host.NewValue.Country)
                    {
                        RelativeSizeAxes = Axes.Both
                    };
                }
            }, true);

            ParticipantCount.BindValueChanged(count => summary.Text = "participant".ToQuantity(count.NewValue), true);
        }
Пример #24
0
        private void load(IAPIProvider api, OsuColour colour, ScoreManager scoreManager)
        {
            var user = Score.User;

            statisticsLabels = GetStatistics(Score).Select(s => new ScoreComponentLabel(s)).ToList();

            ClickableAvatar innerAvatar;

            Children = new Drawable[]
            {
                new RankLabel(rank)
                {
                    RelativeSizeAxes = Axes.Y,
                    Width            = rank_width,
                },
                content = new Container
                {
                    RelativeSizeAxes = Axes.Both,
                    Padding          = new MarginPadding {
                        Left = rank_width
                    },
                    Children = new Drawable[]
                    {
                        new Container
                        {
                            RelativeSizeAxes = Axes.Both,
                            CornerRadius     = corner_radius,
                            Masking          = true,
                            Children         = new[]
                            {
                                background = new Box
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Colour           = user.OnlineID == api.LocalUser.Value.Id && isOnlineScope ? colour.Green : Color4.Black,
                                    Alpha            = background_alpha,
                                },
                            },
                        },
                        new Container
                        {
                            RelativeSizeAxes = Axes.Both,
                            Padding          = new MarginPadding(edge_margin),
                            Children         = new[]
                            {
                                avatar          = new DelayedLoadWrapper(
                                    innerAvatar = new ClickableAvatar(user)
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    CornerRadius     = corner_radius,
                                    Masking          = true,
                                    EdgeEffect       = new EdgeEffectParameters
                                    {
                                        Type   = EdgeEffectType.Shadow,
                                        Radius = 1,
                                        Colour = Color4.Black.Opacity(0.2f),
                                    },
                                })
                                {
                                    RelativeSizeAxes = Axes.None,
                                    Size             = new Vector2(HEIGHT - edge_margin * 2, HEIGHT - edge_margin * 2),
                                },
                                new Container
                                {
                                    RelativeSizeAxes = Axes.Y,
                                    AutoSizeAxes     = Axes.X,
                                    Position         = new Vector2(HEIGHT - edge_margin, 0f),
                                    Children         = new Drawable[]
                                    {
                                        nameLabel = new OsuSpriteText
                                        {
                                            Text = user.Username,
                                            Font = OsuFont.GetFont(size: 23, weight: FontWeight.Bold, italics: true)
                                        },
                                        new FillFlowContainer
                                        {
                                            Anchor       = Anchor.BottomLeft,
                                            Origin       = Anchor.BottomLeft,
                                            AutoSizeAxes = Axes.Both,
                                            Direction    = FillDirection.Horizontal,
                                            Spacing      = new Vector2(10f, 0f),
                                            Children     = new Drawable[]
                                            {
                                                flagBadgeAndDateContainer = new FillFlowContainer
                                                {
                                                    Anchor           = Anchor.CentreLeft,
                                                    Origin           = Anchor.CentreLeft,
                                                    RelativeSizeAxes = Axes.Y,
                                                    Direction        = FillDirection.Horizontal,
                                                    Spacing          = new Vector2(5f, 0f),
                                                    Width            = 87f,
                                                    Masking          = true,
                                                    Children         = new Drawable[]
                                                    {
                                                        new UpdateableFlag(user.Country)
                                                        {
                                                            Anchor = Anchor.CentreLeft,
                                                            Origin = Anchor.CentreLeft,
                                                            Size   = new Vector2(28, 20),
                                                        },
                                                        new DateLabel(Score.Date)
                                                        {
                                                            Anchor = Anchor.CentreLeft,
                                                            Origin = Anchor.CentreLeft,
                                                        },
                                                    },
                                                },
                                                new FillFlowContainer
                                                {
                                                    Origin       = Anchor.CentreLeft,
                                                    Anchor       = Anchor.CentreLeft,
                                                    AutoSizeAxes = Axes.Both,
                                                    Direction    = FillDirection.Horizontal,
                                                    Margin       = new MarginPadding {
                                                        Left = edge_margin
                                                    },
                                                    Children = statisticsLabels
                                                },
                                            },
                                        },
                                    },
                                },
                                new FillFlowContainer
                                {
                                    AutoSizeAxes = Axes.Both,
                                    Anchor       = Anchor.TopRight,
                                    Origin       = Anchor.TopRight,
                                    Direction    = FillDirection.Horizontal,
                                    Spacing      = new Vector2(5f, 0f),
                                    Children     = new Drawable[]
                                    {
                                        ScoreText = new GlowingSpriteText
                                        {
                                            TextColour = Color4.White,
                                            GlowColour = Color4Extensions.FromHex(@"83ccfa"),
                                            Current    = scoreManager.GetBindableTotalScoreString(Score),
                                            Font       = OsuFont.Numeric.With(size: 23),
                                        },
                                        RankContainer = new Container
                                        {
                                            Size     = new Vector2(40f, 20f),
                                            Children = new[]
                                            {
                                                scoreRank = new UpdateableRank(Score.Rank)
                                                {
                                                    Anchor = Anchor.Centre,
                                                    Origin = Anchor.Centre,
                                                    Size   = new Vector2(40f)
                                                },
                                            },
                                        },
                                    },
                                },
                                modsContainer = new FillFlowContainer <ModIcon>
                                {
                                    Anchor             = Anchor.BottomRight,
                                    Origin             = Anchor.BottomRight,
                                    AutoSizeAxes       = Axes.Both,
                                    Direction          = FillDirection.Horizontal,
                                    ChildrenEnumerable = Score.Mods.Select(mod => new ModIcon(mod)
                                    {
                                        Scale = new Vector2(0.375f)
                                    })
                                },
                            },
                        },
                    },
                },
            };

            innerAvatar.OnLoadComplete += d => d.FadeInFromZero(200);
        }
Пример #25
0
            private void load(OsuColour colours)
            {
                Container dimContent;

                InternalChildren = new Drawable[]
                {
                    dimContent = new Container
                    {
                        RelativeSizeAxes = Axes.Both,
                        Children         = new Drawable[]
                        {
                            new Box
                            {
                                RelativeSizeAxes = Axes.Both,
                                Colour           = Color4Extensions.FromHex(@"28242d"),
                            },
                            new GridContainer
                            {
                                RelativeSizeAxes = Axes.Both,
                                RowDimensions    = new[]
                                {
                                    new Dimension(GridSizeMode.Distributed),
                                    new Dimension(GridSizeMode.AutoSize),
                                },
                                Content = new[]
                                {
                                    new Drawable[]
                                    {
                                        new OsuScrollContainer
                                        {
                                            Padding = new MarginPadding
                                            {
                                                Horizontal = OsuScreen.HORIZONTAL_OVERFLOW_PADDING,
                                                Vertical   = 10
                                            },
                                            RelativeSizeAxes = Axes.Both,
                                            Children         = new[]
                                            {
                                                new Container
                                                {
                                                    Padding = new MarginPadding {
                                                        Horizontal = WaveOverlayContainer.WIDTH_PADDING
                                                    },
                                                    RelativeSizeAxes = Axes.X,
                                                    AutoSizeAxes     = Axes.Y,
                                                    Children         = new Drawable[]
                                                    {
                                                        new SectionContainer
                                                        {
                                                            Padding = new MarginPadding {
                                                                Right = FIELD_PADDING / 2
                                                            },
                                                            Children = new[]
                                                            {
                                                                new Section("Room name")
                                                                {
                                                                    Child = NameField = new SettingsTextBox
                                                                    {
                                                                        RelativeSizeAxes         = Axes.X,
                                                                        TabbableContentContainer = this,
                                                                        LengthLimit = 100
                                                                    },
                                                                },
                                                                new Section("Duration")
                                                                {
                                                                    Child = DurationField = new DurationDropdown
                                                                    {
                                                                        RelativeSizeAxes = Axes.X,
                                                                        Items            = new[]
                                                                        {
                                                                            TimeSpan.FromMinutes(30),
                                                                            TimeSpan.FromHours(1),
                                                                            TimeSpan.FromHours(2),
                                                                            TimeSpan.FromHours(4),
                                                                            TimeSpan.FromHours(8),
                                                                            TimeSpan.FromHours(12),
                                                                            //TimeSpan.FromHours(16),
                                                                            TimeSpan.FromHours(24),
                                                                            TimeSpan.FromDays(3),
                                                                            TimeSpan.FromDays(7)
                                                                        }
                                                                    }
                                                                },
                                                                new Section("Room visibility")
                                                                {
                                                                    Alpha = disabled_alpha,
                                                                    Child = AvailabilityPicker = new RoomAvailabilityPicker
                                                                    {
                                                                        Enabled = { Value = false }
                                                                    },
                                                                },
                                                                new Section("Game type")
                                                                {
                                                                    Alpha = disabled_alpha,
                                                                    Child = new FillFlowContainer
                                                                    {
                                                                        AutoSizeAxes     = Axes.Y,
                                                                        RelativeSizeAxes = Axes.X,
                                                                        Direction        = FillDirection.Vertical,
                                                                        Spacing          = new Vector2(7),
                                                                        Children         = new Drawable[]
                                                                        {
                                                                            TypePicker = new GameTypePicker
                                                                            {
                                                                                RelativeSizeAxes = Axes.X,
                                                                                Enabled          = { Value = false }
                                                                            },
                                                                            typeLabel = new OsuSpriteText
                                                                            {
                                                                                Font   = OsuFont.GetFont(size: 14),
                                                                                Colour = colours.Yellow
                                                                            },
                                                                        },
                                                                    },
                                                                },
                                                                new Section("Max participants")
                                                                {
                                                                    Alpha = disabled_alpha,
                                                                    Child = MaxParticipantsField = new SettingsNumberTextBox
                                                                    {
                                                                        RelativeSizeAxes         = Axes.X,
                                                                        TabbableContentContainer = this,
                                                                        ReadOnly = true,
                                                                    },
                                                                },
                                                                new Section("Password (optional)")
                                                                {
                                                                    Alpha = disabled_alpha,
                                                                    Child = new SettingsPasswordTextBox
                                                                    {
                                                                        RelativeSizeAxes         = Axes.X,
                                                                        TabbableContentContainer = this,
                                                                        ReadOnly = true,
                                                                    },
                                                                },
                                                            },
                                                        },
                                                        new SectionContainer
                                                        {
                                                            Anchor  = Anchor.TopRight,
                                                            Origin  = Anchor.TopRight,
                                                            Padding = new MarginPadding {
                                                                Left = FIELD_PADDING / 2
                                                            },
                                                            Children = new[]
                                                            {
                                                                new Section("Playlist")
                                                                {
                                                                    Child = new GridContainer
                                                                    {
                                                                        RelativeSizeAxes = Axes.X,
                                                                        Height           = 300,
                                                                        Content          = new[]
                                                                        {
                                                                            new Drawable[]
                                                                            {
                                                                                playlist = new DrawableRoomPlaylist(true, true)
                                                                                {
                                                                                    RelativeSizeAxes = Axes.Both
                                                                                }
                                                                            },
                                                                            new Drawable[]
                                                                            {
                                                                                playlistLength = new OsuSpriteText
                                                                                {
                                                                                    Margin = new MarginPadding {
                                                                                        Vertical = 5
                                                                                    },
                                                                                    Colour = colours.Yellow,
                                                                                    Font   = OsuFont.GetFont(size: 12),
                                                                                }
                                                                            },
                                                                            new Drawable[]
                                                                            {
                                                                                new PurpleTriangleButton
                                                                                {
                                                                                    RelativeSizeAxes = Axes.X,
                                                                                    Height           = 40,
                                                                                    Text             = "Edit playlist",
                                                                                    Action           = () => EditPlaylist?.Invoke()
                                                                                }
                                                                            }
                                                                        },
                                                                        RowDimensions = new[]
                                                                        {
                                                                            new Dimension(),
                                                                            new Dimension(GridSizeMode.AutoSize),
                                                                            new Dimension(GridSizeMode.AutoSize),
                                                                        }
                                                                    }
                                                                },
                                                            },
                                                        },
                                                    },
                                                }
                                            },
                                        },
                                    },
                                    new Drawable[]
                                    {
                                        new Container
                                        {
                                            Anchor           = Anchor.BottomLeft,
                                            Origin           = Anchor.BottomLeft,
                                            Y                = 2,
                                            RelativeSizeAxes = Axes.X,
                                            AutoSizeAxes     = Axes.Y,
                                            Children         = new Drawable[]
                                            {
                                                new Box
                                                {
                                                    RelativeSizeAxes = Axes.Both,
                                                    Colour           = Color4Extensions.FromHex(@"28242d").Darken(0.5f).Opacity(1f),
                                                },
                                                new FillFlowContainer
                                                {
                                                    RelativeSizeAxes = Axes.X,
                                                    AutoSizeAxes     = Axes.Y,
                                                    Direction        = FillDirection.Vertical,
                                                    Spacing          = new Vector2(0, 20),
                                                    Margin           = new MarginPadding {
                                                        Vertical = 20
                                                    },
                                                    Padding = new MarginPadding {
                                                        Horizontal = OsuScreen.HORIZONTAL_OVERFLOW_PADDING
                                                    },
                                                    Children = new Drawable[]
                                                    {
                                                        ApplyButton = new CreateRoomButton
                                                        {
                                                            Anchor  = Anchor.BottomCentre,
                                                            Origin  = Anchor.BottomCentre,
                                                            Size    = new Vector2(230, 55),
                                                            Enabled = { Value = false },
                                                            Action  = apply,
                                                        },
                                                        ErrorText = new OsuSpriteText
                                                        {
                                                            Anchor = Anchor.BottomCentre,
                                                            Origin = Anchor.BottomCentre,
                                                            Alpha  = 0,
                                                            Depth  = 1,
                                                            Colour = colours.RedDark
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                        }
                    },
                    loadingLayer = new LoadingLayer(dimContent)
                };

                TypePicker.Current.BindValueChanged(type => typeLabel.Text = type.NewValue?.Name ?? string.Empty, true);
                RoomName.BindValueChanged(name => NameField.Text           = name.NewValue, true);
                Availability.BindValueChanged(availability => AvailabilityPicker.Current.Value = availability.NewValue, true);
                Type.BindValueChanged(type => TypePicker.Current.Value = type.NewValue, true);
                MaxParticipants.BindValueChanged(count => MaxParticipantsField.Text = count.NewValue?.ToString(), true);
                Duration.BindValueChanged(duration => DurationField.Current.Value   = duration.NewValue ?? TimeSpan.FromMinutes(30), true);

                playlist.Items.BindTo(Playlist);
                Playlist.BindCollectionChanged(onPlaylistChanged, true);
            }
Пример #26
0
 public DateLabel(DateTimeOffset date)
     : base(date)
 {
     Font = OsuFont.GetFont(size: 17, weight: FontWeight.Bold, italics: true);
 }
Пример #27
0
        public ChannelTabItem(Channel value)
            : base(value)
        {
            Width = 150;

            RelativeSizeAxes = Axes.Y;

            Anchor = Anchor.BottomLeft;
            Origin = Anchor.BottomLeft;

            Shear = new Vector2(ChannelTabControl.SHEAR_WIDTH / ChatOverlay.TAB_AREA_HEIGHT, 0);

            Masking = true;

            InternalChildren = new Drawable[]
            {
                box = new Box
                {
                    EdgeSmoothness   = new Vector2(1, 0),
                    RelativeSizeAxes = Axes.Both,
                },
                highlightBox = new Box
                {
                    Width            = 5,
                    Alpha            = 0,
                    Anchor           = Anchor.BottomRight,
                    Origin           = Anchor.BottomRight,
                    EdgeSmoothness   = new Vector2(1, 0),
                    RelativeSizeAxes = Axes.Y,
                },
                content = new Container
                {
                    Shear            = new Vector2(-ChannelTabControl.SHEAR_WIDTH / ChatOverlay.TAB_AREA_HEIGHT, 0),
                    RelativeSizeAxes = Axes.Both,
                    Children         = new Drawable[]
                    {
                        Icon = new SpriteIcon
                        {
                            Icon   = DisplayIcon,
                            Anchor = Anchor.CentreLeft,
                            Origin = Anchor.CentreLeft,
                            Colour = Color4.Black,
                            X      = -10,
                            Alpha  = 0.2f,
                            Size   = new Vector2(ChatOverlay.TAB_AREA_HEIGHT),
                        },
                        Text = new OsuSpriteText
                        {
                            Origin  = Anchor.CentreLeft,
                            Anchor  = Anchor.CentreLeft,
                            Text    = value.ToString(),
                            Font    = OsuFont.GetFont(size: 18),
                            Padding = new MarginPadding(5)
                            {
                                Left  = LeftTextPadding,
                                Right = RightTextPadding,
                            },
                            RelativeSizeAxes = Axes.X,
                            Truncate         = true,
                        },
                        CloseButton = new TabCloseButton
                        {
                            Alpha  = 0,
                            Margin = new MarginPadding {
                                Right = 20
                            },
                            Origin = Anchor.CentreRight,
                            Anchor = Anchor.CentreRight,
                            Action = delegate
                            {
                                if (IsRemovable)
                                {
                                    OnRequestClose?.Invoke(this);
                                }
                            },
                        },
                    },
                },
            };
        }
Пример #28
0
 private FontUsage getLinkFont(FontWeight fontWeight = FontWeight.Regular)
 => OsuFont.GetFont(size: font_size, weight: fontWeight, italics: true);
Пример #29
0
 private void load(RulesetStore rulesets)
 {
     AddInternal(new ProfileItemContainer
     {
         Children = new Drawable[]
         {
             new Container
             {
                 RelativeSizeAxes = Axes.Both,
                 Padding          = new MarginPadding {
                     Left = 20, Right = performance_width
                 },
                 Children = new Drawable[]
                 {
                     new FillFlowContainer
                     {
                         Anchor       = Anchor.CentreLeft,
                         Origin       = Anchor.CentreLeft,
                         AutoSizeAxes = Axes.Both,
                         Direction    = FillDirection.Horizontal,
                         Spacing      = new Vector2(10, 0),
                         Children     = new Drawable[]
                         {
                             new UpdateableRank(Score.Rank)
                             {
                                 Anchor = Anchor.CentreLeft,
                                 Origin = Anchor.CentreLeft,
                                 Size   = new Vector2(50, 20),
                             },
                             new FillFlowContainer
                             {
                                 Anchor       = Anchor.CentreLeft,
                                 Origin       = Anchor.CentreLeft,
                                 AutoSizeAxes = Axes.Both,
                                 Direction    = FillDirection.Vertical,
                                 Spacing      = new Vector2(0, 2),
                                 Children     = new Drawable[]
                                 {
                                     new ScoreBeatmapMetadataContainer(Score.Beatmap),
                                     new FillFlowContainer
                                     {
                                         AutoSizeAxes = Axes.Both,
                                         Direction    = FillDirection.Horizontal,
                                         Spacing      = new Vector2(15, 0),
                                         Children     = new Drawable[]
                                         {
                                             new OsuSpriteText
                                             {
                                                 Text   = $"{Score.Beatmap?.DifficultyName}",
                                                 Font   = OsuFont.GetFont(size: 12, weight: FontWeight.Regular),
                                                 Colour = colours.Yellow
                                             },
                                             new DrawableDate(Score.Date, 12)
                                             {
                                                 Colour = colourProvider.Foreground1
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     },
                     new FillFlowContainer
                     {
                         Anchor           = Anchor.CentreRight,
                         Origin           = Anchor.CentreRight,
                         AutoSizeAxes     = Axes.X,
                         RelativeSizeAxes = Axes.Y,
                         Direction        = FillDirection.Horizontal,
                         Spacing          = new Vector2(15),
                         Children         = new Drawable[]
                         {
                             new Container
                             {
                                 AutoSizeAxes     = Axes.X,
                                 RelativeSizeAxes = Axes.Y,
                                 Padding          = new MarginPadding {
                                     Horizontal = 10, Vertical = 5
                                 },
                                 Anchor = Anchor.CentreRight,
                                 Origin = Anchor.CentreRight,
                                 Child  = CreateRightContent()
                             },
                             new FillFlowContainer
                             {
                                 AutoSizeAxes = Axes.Both,
                                 Anchor       = Anchor.CentreRight,
                                 Origin       = Anchor.CentreRight,
                                 Direction    = FillDirection.Horizontal,
                                 Spacing      = new Vector2(2),
                                 Children     = Score.Mods.Select(mod => new ModIcon(rulesets.GetRuleset(Score.RulesetID).CreateInstance().CreateModFromAcronym(mod.Acronym))
                                 {
                                     Scale = new Vector2(0.35f)
                                 }).ToList(),
                             }
                         }
                     }
                 }
             },
             new Container
             {
                 RelativeSizeAxes = Axes.Y,
                 Width            = performance_width,
                 Anchor           = Anchor.CentreRight,
                 Origin           = Anchor.CentreRight,
                 Children         = new Drawable[]
                 {
                     new Box
                     {
                         Anchor           = Anchor.TopRight,
                         Origin           = Anchor.TopRight,
                         RelativeSizeAxes = Axes.Both,
                         Height           = 0.5f,
                         Colour           = colourProvider.Background4,
                         Shear            = new Vector2(-performance_background_shear, 0),
                         EdgeSmoothness   = new Vector2(2, 0),
                     },
                     new Box
                     {
                         Anchor               = Anchor.TopRight,
                         Origin               = Anchor.TopRight,
                         RelativeSizeAxes     = Axes.Both,
                         RelativePositionAxes = Axes.Y,
                         Height               = -0.5f,
                         Position             = new Vector2(0, 1),
                         Colour               = colourProvider.Background4,
                         Shear          = new Vector2(performance_background_shear, 0),
                         EdgeSmoothness = new Vector2(2, 0),
                     },
                     new Container
                     {
                         RelativeSizeAxes = Axes.Both,
                         Padding          = new MarginPadding
                         {
                             Vertical = 5,
                             Left     = 30,
                             Right    = 20
                         },
                         Child = createDrawablePerformance().With(d =>
                         {
                             d.Anchor = Anchor.Centre;
                             d.Origin = Anchor.Centre;
                         })
                     }
                 }
             }
         }
     });
 }
Пример #30
0
        private void load()
        {
            const int line_offset   = 80;
            const int circle_offset = 250;

            Children = new Drawable[]
            {
                lines = new Container <Box>
                {
                    Anchor       = Anchor.Centre,
                    Origin       = Anchor.Centre,
                    AutoSizeAxes = Axes.Both,
                    Children     = new[]
                    {
                        lineTopLeft = new Box
                        {
                            Origin   = Anchor.CentreLeft,
                            Anchor   = Anchor.Centre,
                            Position = new Vector2(-line_offset, -line_offset),
                            Rotation = 45,
                            Colour   = Color4.White.Opacity(180),
                        },
                        lineTopRight = new Box
                        {
                            Origin   = Anchor.CentreRight,
                            Anchor   = Anchor.Centre,
                            Position = new Vector2(line_offset, -line_offset),
                            Rotation = -45,
                            Colour   = Color4.White.Opacity(80),
                        },
                        lineBottomLeft = new Box
                        {
                            Origin   = Anchor.CentreLeft,
                            Anchor   = Anchor.Centre,
                            Position = new Vector2(-line_offset, line_offset),
                            Rotation = -45,
                            Colour   = Color4.White.Opacity(230),
                        },
                        lineBottomRight = new Box
                        {
                            Origin   = Anchor.CentreRight,
                            Anchor   = Anchor.Centre,
                            Position = new Vector2(line_offset, line_offset),
                            Rotation = 45,
                            Colour   = Color4.White.Opacity(130),
                        },
                    }
                },
                bigRing     = new Ring(Color4Extensions.FromHex(@"B6C5E9"), 0.85f),
                mediumRing  = new Ring(Color4.White.Opacity(130), 0.7f),
                smallRing   = new Ring(Color4.White, 0.6f),
                welcomeText = new OsuSpriteText
                {
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre,
                    Text    = "welcome",
                    Padding = new MarginPadding {
                        Bottom = 10
                    },
                    Font    = OsuFont.GetFont(weight: FontWeight.Light, size: 42),
                    Alpha   = 0,
                    Spacing = new Vector2(5),
                },
                new CircularContainer
                {
                    Anchor   = Anchor.Centre,
                    Origin   = Anchor.Centre,
                    Size     = new Vector2(logo_size),
                    Masking  = true,
                    Children = new Drawable[]
                    {
                        backgroundFill = new Box
                        {
                            Anchor           = Anchor.Centre,
                            Origin           = Anchor.Centre,
                            RelativeSizeAxes = Axes.Both,
                            Height           = 0,
                            Colour           = Color4Extensions.FromHex(@"C6D8FF").Opacity(160),
                        },
                        foregroundFill = new Box
                        {
                            Anchor           = Anchor.Centre,
                            Origin           = Anchor.Centre,
                            Size             = Vector2.Zero,
                            RelativeSizeAxes = Axes.Both,
                            Width            = 0,
                            Colour           = Color4.White,
                        },
                    }
                },
                purpleCircle = new Circle
                {
                    Anchor   = Anchor.Centre,
                    Origin   = Anchor.TopCentre,
                    Position = new Vector2(0, circle_offset),
                    Colour   = Color4Extensions.FromHex(@"AA92FF"),
                },
                blueCircle = new Circle
                {
                    Anchor   = Anchor.Centre,
                    Origin   = Anchor.CentreRight,
                    Position = new Vector2(-circle_offset, 0),
                    Colour   = Color4Extensions.FromHex(@"8FE5FE"),
                },
                yellowCircle = new Circle
                {
                    Anchor   = Anchor.Centre,
                    Origin   = Anchor.BottomCentre,
                    Position = new Vector2(0, -circle_offset),
                    Colour   = Color4Extensions.FromHex(@"FFD64C"),
                },
                pinkCircle = new Circle
                {
                    Anchor   = Anchor.Centre,
                    Origin   = Anchor.CentreLeft,
                    Position = new Vector2(circle_offset, 0),
                    Colour   = Color4Extensions.FromHex(@"e967a1"),
                },
            };

            foreach (var line in lines)
            {
                line.Size  = new Vector2(105, 1.5f);
                line.Alpha = 0;
            }

            Scale = new Vector2(0.5f);
        }