mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 14:17:26 +08:00
Add support for switching rulesets on profile overlay
This commit is contained in:
parent
a2e726502f
commit
c759b743dc
@ -2,6 +2,7 @@
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
using System.Linq;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Bindables;
|
||||
using osu.Framework.Extensions.ObjectExtensions;
|
||||
using osu.Framework.Graphics.UserInterface;
|
||||
@ -12,6 +13,9 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
||||
{
|
||||
public partial class ProfileRulesetSelector : OverlayRulesetSelector
|
||||
{
|
||||
[Resolved]
|
||||
private UserProfileOverlay? profileOverlay { get; set; }
|
||||
|
||||
public readonly Bindable<UserProfile?> UserProfile = new Bindable<UserProfile?>();
|
||||
|
||||
protected override void LoadComplete()
|
||||
@ -19,6 +23,11 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
||||
base.LoadComplete();
|
||||
|
||||
UserProfile.BindValueChanged(userProfile => updateState(userProfile.NewValue), true);
|
||||
Current.BindValueChanged(ruleset =>
|
||||
{
|
||||
if (UserProfile.Value != null && !ruleset.NewValue.Equals(UserProfile.Value.Ruleset))
|
||||
profileOverlay?.ShowUser(UserProfile.Value.User, ruleset.NewValue);
|
||||
});
|
||||
}
|
||||
|
||||
private void updateState(UserProfile? userProfile)
|
||||
|
@ -64,8 +64,8 @@ namespace osu.Game.Overlays.Profile.Sections.Beatmaps
|
||||
}
|
||||
}
|
||||
|
||||
protected override APIRequest<List<APIBeatmapSet>> CreateRequest(APIUser user, PaginationParameters pagination) =>
|
||||
new GetUserBeatmapsRequest(user.Id, type, pagination);
|
||||
protected override APIRequest<List<APIBeatmapSet>> CreateRequest(UserProfile userProfile, PaginationParameters pagination) =>
|
||||
new GetUserBeatmapsRequest(userProfile.User.Id, type, pagination);
|
||||
|
||||
protected override Drawable? CreateDrawableItem(APIBeatmapSet model) => model.OnlineID > 0
|
||||
? new BeatmapCardNormal(model)
|
||||
|
@ -29,8 +29,8 @@ namespace osu.Game.Overlays.Profile.Sections.Historical
|
||||
|
||||
protected override int GetCount(APIUser user) => user.BeatmapPlayCountsCount;
|
||||
|
||||
protected override APIRequest<List<APIUserMostPlayedBeatmap>> CreateRequest(APIUser user, PaginationParameters pagination) =>
|
||||
new GetUserMostPlayedBeatmapsRequest(user.Id, pagination);
|
||||
protected override APIRequest<List<APIUserMostPlayedBeatmap>> CreateRequest(UserProfile userProfile, PaginationParameters pagination) =>
|
||||
new GetUserMostPlayedBeatmapsRequest(userProfile.User.Id, pagination);
|
||||
|
||||
protected override Drawable CreateDrawableItem(APIUserMostPlayedBeatmap mostPlayed) =>
|
||||
new DrawableMostPlayedBeatmap(mostPlayed);
|
||||
|
@ -8,7 +8,6 @@ using osu.Game.Online.API.Requests.Responses;
|
||||
using osu.Game.Online.API;
|
||||
using System.Collections.Generic;
|
||||
using osu.Game.Resources.Localisation.Web;
|
||||
using APIUser = osu.Game.Online.API.Requests.Responses.APIUser;
|
||||
|
||||
namespace osu.Game.Overlays.Profile.Sections.Kudosu
|
||||
{
|
||||
@ -19,8 +18,8 @@ namespace osu.Game.Overlays.Profile.Sections.Kudosu
|
||||
{
|
||||
}
|
||||
|
||||
protected override APIRequest<List<APIKudosuHistory>> CreateRequest(APIUser user, PaginationParameters pagination)
|
||||
=> new GetUserKudosuHistoryRequest(user.Id, pagination);
|
||||
protected override APIRequest<List<APIKudosuHistory>> CreateRequest(UserProfile userProfile, PaginationParameters pagination)
|
||||
=> new GetUserKudosuHistoryRequest(userProfile.User.Id, pagination);
|
||||
|
||||
protected override Drawable CreateDrawableItem(APIKudosuHistory item) => new DrawableKudosuHistoryItem(item);
|
||||
}
|
||||
|
@ -109,14 +109,14 @@ namespace osu.Game.Overlays.Profile.Sections
|
||||
|
||||
private void showMore()
|
||||
{
|
||||
if (UserProfile.Value?.User == null)
|
||||
if (UserProfile.Value == null)
|
||||
return;
|
||||
|
||||
loadCancellation = new CancellationTokenSource();
|
||||
|
||||
CurrentPage = CurrentPage?.TakeNext(ItemsPerPage) ?? new PaginationParameters(InitialItemsCount);
|
||||
|
||||
retrievalRequest = CreateRequest(UserProfile.Value.User, CurrentPage.Value);
|
||||
retrievalRequest = CreateRequest(UserProfile.Value, CurrentPage.Value);
|
||||
retrievalRequest.Success += items => UpdateItems(items, loadCancellation);
|
||||
|
||||
api.Queue(retrievalRequest);
|
||||
@ -154,7 +154,7 @@ namespace osu.Game.Overlays.Profile.Sections
|
||||
{
|
||||
}
|
||||
|
||||
protected abstract APIRequest<List<TModel>> CreateRequest(APIUser user, PaginationParameters pagination);
|
||||
protected abstract APIRequest<List<TModel>> CreateRequest(UserProfile userProfile, PaginationParameters pagination);
|
||||
|
||||
protected abstract Drawable? CreateDrawableItem(TModel model);
|
||||
|
||||
|
@ -60,8 +60,8 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks
|
||||
base.OnItemsReceived(items);
|
||||
}
|
||||
|
||||
protected override APIRequest<List<SoloScoreInfo>> CreateRequest(APIUser user, PaginationParameters pagination) =>
|
||||
new GetUserScoresRequest(user.Id, type, pagination);
|
||||
protected override APIRequest<List<SoloScoreInfo>> CreateRequest(UserProfile userProfile, PaginationParameters pagination) =>
|
||||
new GetUserScoresRequest(userProfile.User.Id, type, pagination, userProfile.Ruleset);
|
||||
|
||||
private int drawableItemIndex;
|
||||
|
||||
|
@ -10,7 +10,6 @@ using System.Collections.Generic;
|
||||
using osuTK;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Game.Resources.Localisation.Web;
|
||||
using APIUser = osu.Game.Online.API.Requests.Responses.APIUser;
|
||||
|
||||
namespace osu.Game.Overlays.Profile.Sections.Recent
|
||||
{
|
||||
@ -27,8 +26,8 @@ namespace osu.Game.Overlays.Profile.Sections.Recent
|
||||
ItemsContainer.Spacing = new Vector2(0, 8);
|
||||
}
|
||||
|
||||
protected override APIRequest<List<APIRecentActivity>> CreateRequest(APIUser user, PaginationParameters pagination) =>
|
||||
new GetUserRecentActivitiesRequest(user.Id, pagination);
|
||||
protected override APIRequest<List<APIRecentActivity>> CreateRequest(UserProfile userProfile, PaginationParameters pagination) =>
|
||||
new GetUserRecentActivitiesRequest(userProfile.User.Id, pagination);
|
||||
|
||||
protected override Drawable CreateDrawableItem(APIRecentActivity model) => new DrawableRecentActivity(model);
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.Shapes;
|
||||
using osu.Framework.Graphics.UserInterface;
|
||||
using osu.Framework.Input.Events;
|
||||
using osu.Game.Extensions;
|
||||
using osu.Game.Graphics.Containers;
|
||||
using osu.Game.Online.API.Requests;
|
||||
using osu.Game.Online.API.Requests.Responses;
|
||||
@ -52,7 +53,7 @@ namespace osu.Game.Overlays
|
||||
|
||||
Show();
|
||||
|
||||
if (user.OnlineID == Header?.UserProfile.Value?.User.Id)
|
||||
if (user.OnlineID == Header.UserProfile.Value?.User.Id && ruleset?.MatchesOnlineID(Header.UserProfile.Value?.Ruleset) == true)
|
||||
return;
|
||||
|
||||
if (sectionsContainer != null)
|
||||
@ -121,7 +122,7 @@ namespace osu.Game.Overlays
|
||||
|
||||
sectionsContainer.ScrollToTop();
|
||||
|
||||
userReq = user.OnlineID > 1 ? new GetUserRequest(user.OnlineID) : new GetUserRequest(user.Username);
|
||||
userReq = user.OnlineID > 1 ? new GetUserRequest(user.OnlineID, ruleset) : new GetUserRequest(user.Username, ruleset);
|
||||
userReq.Success += u => userLoadComplete(u, ruleset);
|
||||
API.Queue(userReq);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user