mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 20:07:29 +08:00
Merge pull request #1426 from jorolf/recent-scores
Add recent scores section to user profile
This commit is contained in:
commit
009d8ca49e
@ -41,7 +41,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("Show cookiezi", () => ranks.User = new User { Id = 124493 });
|
AddStep("Show cookiezi", () => ranks.User.Value = new User { Id = 124493 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ using osu.Game.Graphics;
|
|||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Users;
|
using osu.Game.Users;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
using osu.Framework.Configuration;
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Profile
|
namespace osu.Game.Overlays.Profile
|
||||||
{
|
{
|
||||||
@ -22,13 +23,7 @@ namespace osu.Game.Overlays.Profile
|
|||||||
|
|
||||||
protected override Container<Drawable> Content => content;
|
protected override Container<Drawable> Content => content;
|
||||||
|
|
||||||
public virtual User User
|
public readonly Bindable<User> User = new Bindable<User>();
|
||||||
{
|
|
||||||
get { return user; }
|
|
||||||
set { user = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private User user;
|
|
||||||
|
|
||||||
protected ProfileSection()
|
protected ProfileSection()
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using osu.Game.Online.API.Requests;
|
||||||
|
using osu.Game.Overlays.Profile.Sections.Ranks;
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Profile.Sections
|
namespace osu.Game.Overlays.Profile.Sections
|
||||||
{
|
{
|
||||||
public class HistoricalSection : ProfileSection
|
public class HistoricalSection : ProfileSection
|
||||||
@ -8,5 +11,10 @@ namespace osu.Game.Overlays.Profile.Sections
|
|||||||
public override string Title => "Historical";
|
public override string Title => "Historical";
|
||||||
|
|
||||||
public override string Identifier => "historical";
|
public override string Identifier => "historical";
|
||||||
|
|
||||||
|
public HistoricalSection()
|
||||||
|
{
|
||||||
|
Child = new PaginatedScoreContainer(ScoreType.Recent, User, "Recent Plays (24h)");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Profile.Sections.Ranks
|
||||||
|
{
|
||||||
|
public class DrawablePerformanceScore : DrawableScore
|
||||||
|
{
|
||||||
|
private readonly double? weight;
|
||||||
|
|
||||||
|
public DrawablePerformanceScore(Score score, double? weight = null)
|
||||||
|
: base(score)
|
||||||
|
{
|
||||||
|
this.weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private new void load(OsuColour colour)
|
||||||
|
{
|
||||||
|
double pp = Score.PP ?? 0;
|
||||||
|
Stats.Add(new OsuSpriteText
|
||||||
|
{
|
||||||
|
Text = $"{pp:0}pp",
|
||||||
|
Anchor = Anchor.TopRight,
|
||||||
|
Origin = Anchor.TopRight,
|
||||||
|
TextSize = 18,
|
||||||
|
Font = "Exo2.0-BoldItalic",
|
||||||
|
});
|
||||||
|
|
||||||
|
if (weight.HasValue)
|
||||||
|
{
|
||||||
|
Stats.Add(new OsuSpriteText
|
||||||
|
{
|
||||||
|
Text = $"weighted: {pp * weight:0}pp ({weight:P0})",
|
||||||
|
Anchor = Anchor.TopRight,
|
||||||
|
Origin = Anchor.TopRight,
|
||||||
|
Colour = colour.GrayA,
|
||||||
|
TextSize = 11,
|
||||||
|
Font = "Exo2.0-RegularItalic",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,18 +18,16 @@ using osu.Game.Rulesets.UI;
|
|||||||
|
|
||||||
namespace osu.Game.Overlays.Profile.Sections.Ranks
|
namespace osu.Game.Overlays.Profile.Sections.Ranks
|
||||||
{
|
{
|
||||||
public class DrawableScore : Container
|
public abstract class DrawableScore : Container
|
||||||
{
|
{
|
||||||
private readonly FillFlowContainer<OsuSpriteText> stats;
|
protected readonly FillFlowContainer<OsuSpriteText> Stats;
|
||||||
private readonly FillFlowContainer metadata;
|
private readonly FillFlowContainer metadata;
|
||||||
private readonly ModContainer modContainer;
|
private readonly ModContainer modContainer;
|
||||||
private readonly Score score;
|
protected readonly Score Score;
|
||||||
private readonly double? weight;
|
|
||||||
|
|
||||||
public DrawableScore(Score score, double? weight = null)
|
protected DrawableScore(Score score)
|
||||||
{
|
{
|
||||||
this.score = score;
|
Score = score;
|
||||||
this.weight = weight;
|
|
||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
@ -39,7 +37,7 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks
|
|||||||
Width = 60,
|
Width = 60,
|
||||||
FillMode = FillMode.Fit,
|
FillMode = FillMode.Fit,
|
||||||
},
|
},
|
||||||
stats = new FillFlowContainer<OsuSpriteText>
|
Stats = new FillFlowContainer<OsuSpriteText>
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.X,
|
RelativeSizeAxes = Axes.X,
|
||||||
AutoSizeAxes = Axes.Y,
|
AutoSizeAxes = Axes.Y,
|
||||||
@ -74,40 +72,18 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(OsuColour colour, LocalisationEngine locale, BeatmapSetOverlay beatmapSetOverlay)
|
private void load(OsuColour colour, LocalisationEngine locale, BeatmapSetOverlay beatmapSetOverlay)
|
||||||
{
|
{
|
||||||
double pp = score.PP ?? 0;
|
Stats.Add(new OsuSpriteText
|
||||||
stats.Add(new OsuSpriteText
|
|
||||||
{
|
{
|
||||||
Text = $"{pp:0}pp",
|
Text = $"accuracy: {Score.Accuracy:P2}",
|
||||||
Anchor = Anchor.TopRight,
|
|
||||||
Origin = Anchor.TopRight,
|
|
||||||
TextSize = 18,
|
|
||||||
Font = "Exo2.0-BoldItalic",
|
|
||||||
});
|
|
||||||
|
|
||||||
if (weight.HasValue)
|
|
||||||
{
|
|
||||||
stats.Add(new OsuSpriteText
|
|
||||||
{
|
|
||||||
Text = $"weighted: {pp * weight:0}pp ({weight:P0})",
|
|
||||||
Anchor = Anchor.TopRight,
|
|
||||||
Origin = Anchor.TopRight,
|
|
||||||
Colour = colour.GrayA,
|
|
||||||
TextSize = 11,
|
|
||||||
Font = "Exo2.0-RegularItalic",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
stats.Add(new OsuSpriteText
|
|
||||||
{
|
|
||||||
Text = $"accuracy: {score.Accuracy:P2}",
|
|
||||||
Anchor = Anchor.TopRight,
|
Anchor = Anchor.TopRight,
|
||||||
Origin = Anchor.TopRight,
|
Origin = Anchor.TopRight,
|
||||||
Colour = colour.GrayA,
|
Colour = colour.GrayA,
|
||||||
TextSize = 11,
|
TextSize = 11,
|
||||||
Font = "Exo2.0-RegularItalic",
|
Font = "Exo2.0-RegularItalic",
|
||||||
|
Depth = -1,
|
||||||
});
|
});
|
||||||
|
|
||||||
metadata.Add(new OsuHoverContainer
|
metadata.Add(new OsuHoverContainer
|
||||||
@ -115,7 +91,7 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks
|
|||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
Action = () =>
|
Action = () =>
|
||||||
{
|
{
|
||||||
if (score.Beatmap.OnlineBeatmapSetID.HasValue) beatmapSetOverlay.ShowBeatmapSet(score.Beatmap.OnlineBeatmapSetID.Value);
|
if (Score.Beatmap.OnlineBeatmapSetID.HasValue) beatmapSetOverlay?.ShowBeatmapSet(Score.Beatmap.OnlineBeatmapSetID.Value);
|
||||||
},
|
},
|
||||||
Child = new FillFlowContainer
|
Child = new FillFlowContainer
|
||||||
{
|
{
|
||||||
@ -125,15 +101,15 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks
|
|||||||
new OsuSpriteText
|
new OsuSpriteText
|
||||||
{
|
{
|
||||||
Current = locale.GetUnicodePreference(
|
Current = locale.GetUnicodePreference(
|
||||||
$"{score.Beatmap.Metadata.TitleUnicode ?? score.Beatmap.Metadata.Title} [{score.Beatmap.Version}] ",
|
$"{Score.Beatmap.Metadata.TitleUnicode ?? Score.Beatmap.Metadata.Title} [{Score.Beatmap.Version}] ",
|
||||||
$"{score.Beatmap.Metadata.Title ?? score.Beatmap.Metadata.TitleUnicode} [{score.Beatmap.Version}] "
|
$"{Score.Beatmap.Metadata.Title ?? Score.Beatmap.Metadata.TitleUnicode} [{Score.Beatmap.Version}] "
|
||||||
),
|
),
|
||||||
TextSize = 15,
|
TextSize = 15,
|
||||||
Font = "Exo2.0-SemiBoldItalic",
|
Font = "Exo2.0-SemiBoldItalic",
|
||||||
},
|
},
|
||||||
new OsuSpriteText
|
new OsuSpriteText
|
||||||
{
|
{
|
||||||
Current = locale.GetUnicodePreference(score.Beatmap.Metadata.ArtistUnicode, score.Beatmap.Metadata.Artist),
|
Current = locale.GetUnicodePreference(Score.Beatmap.Metadata.ArtistUnicode, Score.Beatmap.Metadata.Artist),
|
||||||
TextSize = 12,
|
TextSize = 12,
|
||||||
Padding = new MarginPadding { Top = 3 },
|
Padding = new MarginPadding { Top = 3 },
|
||||||
Font = "Exo2.0-RegularItalic",
|
Font = "Exo2.0-RegularItalic",
|
||||||
@ -142,7 +118,7 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
foreach (Mod mod in score.Mods)
|
foreach (Mod mod in Score.Mods)
|
||||||
modContainer.Add(new ModIcon(mod)
|
modContainer.Add(new ModIcon(mod)
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Profile.Sections.Ranks
|
||||||
|
{
|
||||||
|
public class DrawableTotalScore : DrawableScore
|
||||||
|
{
|
||||||
|
public DrawableTotalScore(Score score)
|
||||||
|
: base(score)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private new void load()
|
||||||
|
{
|
||||||
|
Stats.Add(new OsuSpriteText
|
||||||
|
{
|
||||||
|
Text = Score.TotalScore.ToString("#,###"),
|
||||||
|
Anchor = Anchor.TopRight,
|
||||||
|
Origin = Anchor.TopRight,
|
||||||
|
TextSize = 18,
|
||||||
|
Font = "Exo2.0-BoldItalic",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,153 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using OpenTK;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Configuration;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Game.Graphics.Containers;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Graphics.UserInterface;
|
||||||
|
using osu.Game.Online.API;
|
||||||
|
using osu.Game.Online.API.Requests;
|
||||||
|
using osu.Game.Rulesets;
|
||||||
|
using osu.Game.Users;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Profile.Sections.Ranks
|
||||||
|
{
|
||||||
|
public class PaginatedScoreContainer : FillFlowContainer
|
||||||
|
{
|
||||||
|
private readonly FillFlowContainer<DrawableScore> scoreContainer;
|
||||||
|
private readonly OsuSpriteText missing;
|
||||||
|
private readonly OsuHoverContainer showMoreButton;
|
||||||
|
private readonly LoadingAnimation showMoreLoading;
|
||||||
|
|
||||||
|
private readonly bool includeWeight;
|
||||||
|
private readonly ScoreType type;
|
||||||
|
private int visiblePages;
|
||||||
|
|
||||||
|
private readonly Bindable<User> user = new Bindable<User>();
|
||||||
|
|
||||||
|
private RulesetStore rulesets;
|
||||||
|
private APIAccess api;
|
||||||
|
|
||||||
|
public PaginatedScoreContainer(ScoreType type, Bindable<User> user, string header, bool includeWeight = false)
|
||||||
|
{
|
||||||
|
this.type = type;
|
||||||
|
this.includeWeight = includeWeight;
|
||||||
|
this.user.BindTo(user);
|
||||||
|
|
||||||
|
RelativeSizeAxes = Axes.X;
|
||||||
|
AutoSizeAxes = Axes.Y;
|
||||||
|
Direction = FillDirection.Vertical;
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
TextSize = 15,
|
||||||
|
Text = header,
|
||||||
|
Font = "Exo2.0-RegularItalic",
|
||||||
|
Margin = new MarginPadding { Top = 10, Bottom = 10 },
|
||||||
|
},
|
||||||
|
scoreContainer = new FillFlowContainer<DrawableScore>
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Y,
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
Direction = FillDirection.Vertical,
|
||||||
|
},
|
||||||
|
showMoreButton = new OsuHoverContainer
|
||||||
|
{
|
||||||
|
Alpha = 0,
|
||||||
|
Action = showMore,
|
||||||
|
AutoSizeAxes = Axes.Both,
|
||||||
|
Anchor = Anchor.TopCentre,
|
||||||
|
Origin = Anchor.TopCentre,
|
||||||
|
Child = new OsuSpriteText
|
||||||
|
{
|
||||||
|
TextSize = 14,
|
||||||
|
Text = "show more",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
showMoreLoading = new LoadingAnimation
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopCentre,
|
||||||
|
Origin = Anchor.TopCentre,
|
||||||
|
Size = new Vector2(14),
|
||||||
|
},
|
||||||
|
missing = new OsuSpriteText
|
||||||
|
{
|
||||||
|
TextSize = 14,
|
||||||
|
Text = type == ScoreType.Recent ? "No performance records. :(" : "No awesome performance records yet. :(",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(APIAccess api, RulesetStore rulesets)
|
||||||
|
{
|
||||||
|
this.api = api;
|
||||||
|
this.rulesets = rulesets;
|
||||||
|
|
||||||
|
user.ValueChanged += user_ValueChanged;
|
||||||
|
user.TriggerChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void user_ValueChanged(User newUser)
|
||||||
|
{
|
||||||
|
visiblePages = 0;
|
||||||
|
scoreContainer.Clear();
|
||||||
|
showMoreButton.Hide();
|
||||||
|
missing.Show();
|
||||||
|
|
||||||
|
if (newUser != null)
|
||||||
|
showMore();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showMore()
|
||||||
|
{
|
||||||
|
var req = new GetUserScoresRequest(user.Value.Id, type, visiblePages++ * 5);
|
||||||
|
|
||||||
|
showMoreLoading.Show();
|
||||||
|
showMoreButton.Hide();
|
||||||
|
|
||||||
|
req.Success += scores =>
|
||||||
|
{
|
||||||
|
foreach (var s in scores)
|
||||||
|
s.ApplyRuleset(rulesets.GetRuleset(s.OnlineRulesetID));
|
||||||
|
|
||||||
|
showMoreButton.FadeTo(scores.Count == 5 ? 1 : 0);
|
||||||
|
showMoreLoading.Hide();
|
||||||
|
|
||||||
|
if (!scores.Any()) return;
|
||||||
|
|
||||||
|
missing.Hide();
|
||||||
|
|
||||||
|
foreach (OnlineScore score in scores)
|
||||||
|
{
|
||||||
|
DrawableScore drawableScore;
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
drawableScore = new DrawablePerformanceScore(score, includeWeight ? Math.Pow(0.95, scoreContainer.Count) : (double?)null);
|
||||||
|
break;
|
||||||
|
case ScoreType.Recent:
|
||||||
|
drawableScore = new DrawableTotalScore(score);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
drawableScore.RelativeSizeAxes = Axes.X;
|
||||||
|
drawableScore.Height = 60;
|
||||||
|
|
||||||
|
scoreContainer.Add(drawableScore);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
api.Queue(req);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,20 +1,8 @@
|
|||||||
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
using osu.Game.Graphics.Containers;
|
|
||||||
using osu.Game.Graphics.Sprites;
|
|
||||||
using osu.Game.Overlays.Profile.Sections.Ranks;
|
using osu.Game.Overlays.Profile.Sections.Ranks;
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using osu.Game.Online.API;
|
|
||||||
using osu.Game.Online.API.Requests;
|
using osu.Game.Online.API.Requests;
|
||||||
using osu.Game.Rulesets;
|
|
||||||
using osu.Game.Users;
|
|
||||||
using osu.Game.Graphics.UserInterface;
|
|
||||||
using OpenTK;
|
|
||||||
using osu.Framework.Allocation;
|
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Profile.Sections
|
namespace osu.Game.Overlays.Profile.Sections
|
||||||
{
|
{
|
||||||
@ -24,147 +12,13 @@ namespace osu.Game.Overlays.Profile.Sections
|
|||||||
|
|
||||||
public override string Identifier => "top_ranks";
|
public override string Identifier => "top_ranks";
|
||||||
|
|
||||||
private readonly ScoreContainer best, first;
|
|
||||||
|
|
||||||
public RanksSection()
|
public RanksSection()
|
||||||
{
|
{
|
||||||
Children = new Drawable[]
|
Children = new[]
|
||||||
{
|
{
|
||||||
best = new ScoreContainer(ScoreType.Best, "Best Performance", true),
|
new PaginatedScoreContainer(ScoreType.Best, User, "Best Performance", true),
|
||||||
first = new ScoreContainer(ScoreType.Firsts, "First Place Ranks"),
|
new PaginatedScoreContainer(ScoreType.Firsts, User, "First Place Ranks"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public override User User
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return base.User;
|
|
||||||
}
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
base.User = value;
|
|
||||||
best.User = value;
|
|
||||||
first.User = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ScoreContainer : FillFlowContainer
|
|
||||||
{
|
|
||||||
private readonly FillFlowContainer<DrawableScore> scoreContainer;
|
|
||||||
private readonly OsuSpriteText missing;
|
|
||||||
private readonly OsuHoverContainer showMoreButton;
|
|
||||||
private readonly LoadingAnimation showMoreLoading;
|
|
||||||
|
|
||||||
private readonly ScoreType type;
|
|
||||||
private int visiblePages;
|
|
||||||
private User user;
|
|
||||||
private readonly bool includeWeigth;
|
|
||||||
|
|
||||||
private RulesetStore rulesets;
|
|
||||||
private APIAccess api;
|
|
||||||
|
|
||||||
public User User
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
user = value;
|
|
||||||
visiblePages = 0;
|
|
||||||
scoreContainer.Clear();
|
|
||||||
showMoreButton.Hide();
|
|
||||||
missing.Show();
|
|
||||||
showMore();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScoreContainer(ScoreType type, string header, bool includeWeigth = false)
|
|
||||||
{
|
|
||||||
this.type = type;
|
|
||||||
this.includeWeigth = includeWeigth;
|
|
||||||
|
|
||||||
RelativeSizeAxes = Axes.X;
|
|
||||||
AutoSizeAxes = Axes.Y;
|
|
||||||
Direction = FillDirection.Vertical;
|
|
||||||
|
|
||||||
Children = new Drawable[]
|
|
||||||
{
|
|
||||||
new OsuSpriteText
|
|
||||||
{
|
|
||||||
TextSize = 15,
|
|
||||||
Text = header,
|
|
||||||
Font = "Exo2.0-RegularItalic",
|
|
||||||
Margin = new MarginPadding { Top = 10, Bottom = 10 },
|
|
||||||
},
|
|
||||||
scoreContainer = new FillFlowContainer<DrawableScore>
|
|
||||||
{
|
|
||||||
AutoSizeAxes = Axes.Y,
|
|
||||||
RelativeSizeAxes = Axes.X,
|
|
||||||
Direction = FillDirection.Vertical,
|
|
||||||
},
|
|
||||||
showMoreButton = new OsuHoverContainer
|
|
||||||
{
|
|
||||||
Alpha = 0,
|
|
||||||
Action = showMore,
|
|
||||||
AutoSizeAxes = Axes.Both,
|
|
||||||
Anchor = Anchor.TopCentre,
|
|
||||||
Origin = Anchor.TopCentre,
|
|
||||||
Child = new OsuSpriteText
|
|
||||||
{
|
|
||||||
TextSize = 14,
|
|
||||||
Text = "show more",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
showMoreLoading = new LoadingAnimation
|
|
||||||
{
|
|
||||||
Anchor = Anchor.TopCentre,
|
|
||||||
Origin = Anchor.TopCentre,
|
|
||||||
Size = new Vector2(14),
|
|
||||||
},
|
|
||||||
missing = new OsuSpriteText
|
|
||||||
{
|
|
||||||
TextSize = 14,
|
|
||||||
Text = "No awesome performance records yet. :(",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
|
||||||
private void load(APIAccess api, RulesetStore rulesets)
|
|
||||||
{
|
|
||||||
this.api = api;
|
|
||||||
this.rulesets = rulesets;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showMore()
|
|
||||||
{
|
|
||||||
var req = new GetUserScoresRequest(user.Id, type, visiblePages++ * 5);
|
|
||||||
|
|
||||||
showMoreLoading.Show();
|
|
||||||
showMoreButton.Hide();
|
|
||||||
|
|
||||||
req.Success += scores =>
|
|
||||||
{
|
|
||||||
foreach (var s in scores)
|
|
||||||
s.ApplyRuleset(rulesets.GetRuleset(s.OnlineRulesetID));
|
|
||||||
|
|
||||||
showMoreButton.FadeTo(scores.Count == 5 ? 1 : 0);
|
|
||||||
showMoreLoading.Hide();
|
|
||||||
|
|
||||||
if (scores.Any())
|
|
||||||
{
|
|
||||||
missing.Hide();
|
|
||||||
foreach (OnlineScore score in scores)
|
|
||||||
scoreContainer.Add(new DrawableScore(score, includeWeigth ? Math.Pow(0.95, scoreContainer.Count) : (double?)null)
|
|
||||||
{
|
|
||||||
RelativeSizeAxes = Axes.X,
|
|
||||||
Height = 60,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Schedule(() => { api.Queue(req); });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ namespace osu.Game.Overlays
|
|||||||
//new RecentSection(),
|
//new RecentSection(),
|
||||||
new RanksSection(),
|
new RanksSection(),
|
||||||
//new MedalsSection(),
|
//new MedalsSection(),
|
||||||
//new HistoricalSection(),
|
new HistoricalSection(),
|
||||||
//new BeatmapsSection(),
|
//new BeatmapsSection(),
|
||||||
//new KudosuSection()
|
//new KudosuSection()
|
||||||
};
|
};
|
||||||
@ -175,7 +175,7 @@ namespace osu.Game.Overlays
|
|||||||
var sec = sections.FirstOrDefault(s => s.Identifier == id);
|
var sec = sections.FirstOrDefault(s => s.Identifier == id);
|
||||||
if (sec != null)
|
if (sec != null)
|
||||||
{
|
{
|
||||||
sec.User = user;
|
sec.User.Value = user;
|
||||||
|
|
||||||
sectionsContainer.Add(sec);
|
sectionsContainer.Add(sec);
|
||||||
tabs.AddItem(sec);
|
tabs.AddItem(sec);
|
||||||
|
@ -294,6 +294,9 @@
|
|||||||
<Compile Include="Migrations\OsuDbContextModelSnapshot.cs" />
|
<Compile Include="Migrations\OsuDbContextModelSnapshot.cs" />
|
||||||
<Compile Include="Online\API\Requests\GetBeatmapSetRequest.cs" />
|
<Compile Include="Online\API\Requests\GetBeatmapSetRequest.cs" />
|
||||||
<Compile Include="Online\API\Requests\GetBeatmapSetsResponse.cs" />
|
<Compile Include="Online\API\Requests\GetBeatmapSetsResponse.cs" />
|
||||||
|
<Compile Include="Overlays\Profile\Sections\Ranks\DrawablePerformanceScore.cs" />
|
||||||
|
<Compile Include="Overlays\Profile\Sections\Ranks\PaginatedScoreContainer.cs" />
|
||||||
|
<Compile Include="Overlays\Profile\Sections\Ranks\DrawableTotalScore.cs" />
|
||||||
<Compile Include="Overlays\Settings\SettingsButton.cs" />
|
<Compile Include="Overlays\Settings\SettingsButton.cs" />
|
||||||
<Compile Include="Screens\Edit\Screens\Compose\Timeline\BeatmapWaveformGraph.cs" />
|
<Compile Include="Screens\Edit\Screens\Compose\Timeline\BeatmapWaveformGraph.cs" />
|
||||||
<Compile Include="Beatmaps\Drawables\DifficultyColouredContainer.cs" />
|
<Compile Include="Beatmaps\Drawables\DifficultyColouredContainer.cs" />
|
||||||
@ -821,4 +824,4 @@
|
|||||||
<Import Project="$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.osx.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.osx.targets" Condition="Exists('$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.osx.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.osx.targets')" />
|
<Import Project="$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.osx.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.osx.targets" Condition="Exists('$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.osx.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.osx.targets')" />
|
||||||
<Import Project="$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.linux.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.linux.targets" Condition="Exists('$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.linux.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.linux.targets')" />
|
<Import Project="$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.linux.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.linux.targets" Condition="Exists('$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.linux.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.linux.targets')" />
|
||||||
<Import Project="$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.v110_xp.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.v110_xp.targets" Condition="Exists('$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.v110_xp.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.v110_xp.targets')" />
|
<Import Project="$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.v110_xp.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.v110_xp.targets" Condition="Exists('$(SolutionDir)\packages\SQLitePCLRaw.lib.e_sqlite3.v110_xp.1.1.8\build\net35\SQLitePCLRaw.lib.e_sqlite3.v110_xp.targets')" />
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in New Issue
Block a user