mirror of
https://github.com/ppy/osu.git
synced 2025-01-06 21:12:55 +08:00
Make ScoreInfo.BeatmapInfo
nullable
This commit is contained in:
parent
f6939223b3
commit
d74b1e148d
@ -187,7 +187,7 @@ namespace osu.Desktop
|
||||
return edit.BeatmapInfo.ToString() ?? string.Empty;
|
||||
|
||||
case UserActivity.WatchingReplay watching:
|
||||
return watching.BeatmapInfo.ToString();
|
||||
return watching.BeatmapInfo?.ToString() ?? string.Empty;
|
||||
|
||||
case UserActivity.InLobby lobby:
|
||||
return privacyMode.Value == DiscordRichPresenceMode.Limited ? string.Empty : lobby.Room.Name.Value;
|
||||
|
@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
|
||||
effectiveMissCount = Math.Max(1.0, 1000.0 / totalSuccessfulHits) * countMiss;
|
||||
|
||||
// TODO: The detection of rulesets is temporary until the leftover old skills have been reworked.
|
||||
bool isConvert = score.BeatmapInfo.Ruleset.OnlineID != 1;
|
||||
bool isConvert = score.BeatmapInfo!.Ruleset.OnlineID != 1;
|
||||
|
||||
double multiplier = 1.13;
|
||||
|
||||
|
@ -87,10 +87,10 @@ namespace osu.Game.Tests.Models
|
||||
var mock = new Mock<IScoreInfo>();
|
||||
|
||||
mock.Setup(m => m.User).Returns(new APIUser { Username = "user" }); // TODO: temporary.
|
||||
mock.Setup(m => m.Beatmap.Metadata.Artist).Returns("artist");
|
||||
mock.Setup(m => m.Beatmap.Metadata.Title).Returns("title");
|
||||
mock.Setup(m => m.Beatmap.Metadata.Author.Username).Returns("author");
|
||||
mock.Setup(m => m.Beatmap.DifficultyName).Returns("difficulty");
|
||||
mock.Setup(m => m.Beatmap!.Metadata.Artist).Returns("artist");
|
||||
mock.Setup(m => m.Beatmap!.Metadata.Title).Returns("title");
|
||||
mock.Setup(m => m.Beatmap!.Metadata.Author.Username).Returns("author");
|
||||
mock.Setup(m => m.Beatmap!.DifficultyName).Returns("difficulty");
|
||||
|
||||
Assert.That(mock.Object.GetDisplayString(), Is.EqualTo("user playing artist - title (author) [difficulty]"));
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ namespace osu.Game.Tests.Visual.Ranking
|
||||
AddStep("show excess mods score", () =>
|
||||
{
|
||||
var score = TestResources.CreateTestScoreInfo();
|
||||
score.Mods = score.BeatmapInfo.Ruleset.CreateInstance().CreateAllMods().ToArray();
|
||||
score.Mods = score.BeatmapInfo!.Ruleset.CreateInstance().CreateAllMods().ToArray();
|
||||
showPanel(CreateWorkingBeatmap(CreateBeatmap(new OsuRuleset().RulesetInfo)), score);
|
||||
});
|
||||
}
|
||||
|
@ -896,7 +896,7 @@ namespace osu.Game.Database
|
||||
var scores = migration.NewRealm.All<ScoreInfo>();
|
||||
|
||||
foreach (var score in scores)
|
||||
score.BeatmapHash = score.BeatmapInfo.Hash;
|
||||
score.BeatmapHash = score.BeatmapInfo?.Hash ?? string.Empty;
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -185,7 +185,7 @@ namespace osu.Game.Online.Spectator
|
||||
IsPlaying = true;
|
||||
|
||||
// transfer state at point of beginning play
|
||||
currentState.BeatmapID = score.ScoreInfo.BeatmapInfo.OnlineID;
|
||||
currentState.BeatmapID = score.ScoreInfo.BeatmapInfo!.OnlineID;
|
||||
currentState.RulesetID = score.ScoreInfo.RulesetID;
|
||||
currentState.Mods = score.ScoreInfo.Mods.Select(m => new APIMod(m)).ToArray();
|
||||
currentState.State = SpectatedUserState.Playing;
|
||||
|
@ -28,7 +28,7 @@ namespace osu.Game.Scoring
|
||||
|
||||
double? PP { get; }
|
||||
|
||||
IBeatmapInfo Beatmap { get; }
|
||||
IBeatmapInfo? Beatmap { get; }
|
||||
|
||||
IRulesetInfo Ruleset { get; }
|
||||
|
||||
|
@ -65,7 +65,7 @@ namespace osu.Game.Scoring.Legacy
|
||||
{
|
||||
sw.Write((byte)(score.ScoreInfo.Ruleset.OnlineID));
|
||||
sw.Write(LATEST_VERSION);
|
||||
sw.Write(score.ScoreInfo.BeatmapInfo.MD5Hash);
|
||||
sw.Write(score.ScoreInfo.BeatmapInfo!.MD5Hash);
|
||||
sw.Write(score.ScoreInfo.User.Username);
|
||||
sw.Write(FormattableString.Invariant($"lazer-{score.ScoreInfo.User.Username}-{score.ScoreInfo.Date}").ComputeMD5Hash());
|
||||
sw.Write((ushort)(score.ScoreInfo.GetCount300() ?? 0));
|
||||
|
@ -64,6 +64,8 @@ namespace osu.Game.Scoring
|
||||
|
||||
protected override void Populate(ScoreInfo model, ArchiveReader? archive, Realm realm, CancellationToken cancellationToken = default)
|
||||
{
|
||||
Debug.Assert(model.BeatmapInfo != null);
|
||||
|
||||
// Ensure the beatmap is not detached.
|
||||
if (!model.BeatmapInfo.IsManaged)
|
||||
model.BeatmapInfo = realm.Find<BeatmapInfo>(model.BeatmapInfo.ID);
|
||||
@ -99,7 +101,7 @@ namespace osu.Game.Scoring
|
||||
if (score.MaximumStatistics.Select(kvp => kvp.Value).Sum() > 0)
|
||||
return;
|
||||
|
||||
var beatmap = score.BeatmapInfo.Detach();
|
||||
var beatmap = score.BeatmapInfo?.Detach();
|
||||
var ruleset = score.Ruleset.Detach();
|
||||
var rulesetInstance = ruleset.CreateInstance();
|
||||
|
||||
|
@ -36,7 +36,7 @@ namespace osu.Game.Scoring
|
||||
/// <remarks>
|
||||
/// When setting this, make sure to also set <see cref="BeatmapHash"/> to allow relational consistency when a beatmap is potentially changed.
|
||||
/// </remarks>
|
||||
public BeatmapInfo BeatmapInfo { get; set; } = null!;
|
||||
public BeatmapInfo? BeatmapInfo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="osu.Game.Beatmaps.BeatmapInfo.Hash"/> at the point in time when the score was set.
|
||||
@ -129,14 +129,12 @@ namespace osu.Game.Scoring
|
||||
public int RankInt { get; set; }
|
||||
|
||||
IRulesetInfo IScoreInfo.Ruleset => Ruleset;
|
||||
IBeatmapInfo IScoreInfo.Beatmap => BeatmapInfo;
|
||||
IBeatmapInfo? IScoreInfo.Beatmap => BeatmapInfo;
|
||||
IUser IScoreInfo.User => User;
|
||||
IEnumerable<INamedFileUsage> IHasNamedFiles.Files => Files;
|
||||
|
||||
#region Properties required to make things work with existing usages
|
||||
|
||||
public Guid BeatmapInfoID => BeatmapInfo.ID;
|
||||
|
||||
public int UserID => RealmUser.OnlineID;
|
||||
|
||||
public int RulesetID => Ruleset.OnlineID;
|
||||
|
@ -13,7 +13,7 @@ namespace osu.Game.Scoring
|
||||
/// <summary>
|
||||
/// A user-presentable display title representing this score.
|
||||
/// </summary>
|
||||
public static string GetDisplayTitle(this IScoreInfo scoreInfo) => $"{scoreInfo.User.Username} playing {scoreInfo.Beatmap.GetDisplayTitle()}";
|
||||
public static string GetDisplayTitle(this IScoreInfo scoreInfo) => $"{scoreInfo.User.Username} playing {scoreInfo.Beatmap?.GetDisplayTitle() ?? "unknown"}";
|
||||
|
||||
/// <summary>
|
||||
/// Orders an array of <see cref="ScoreInfo"/>s by total score.
|
||||
|
@ -34,7 +34,7 @@ namespace osu.Game.Scoring
|
||||
{
|
||||
var score = lookup.ScoreInfo;
|
||||
|
||||
var attributes = await difficultyCache.GetDifficultyAsync(score.BeatmapInfo, score.Ruleset, score.Mods, token).ConfigureAwait(false);
|
||||
var attributes = await difficultyCache.GetDifficultyAsync(score.BeatmapInfo!, score.Ruleset, score.Mods, token).ConfigureAwait(false);
|
||||
|
||||
// Performance calculation requires the beatmap and ruleset to be locally available. If not, return a default value.
|
||||
if (attributes?.Attributes == null)
|
||||
|
@ -63,7 +63,7 @@ namespace osu.Game.Screens.Ranking
|
||||
|
||||
protected override APIRequest? FetchScores(Action<IEnumerable<ScoreInfo>>? scoresCallback)
|
||||
{
|
||||
if (Score.BeatmapInfo.OnlineID <= 0 || Score.BeatmapInfo.Status <= BeatmapOnlineStatus.Pending)
|
||||
if (Score.BeatmapInfo!.OnlineID <= 0 || Score.BeatmapInfo.Status <= BeatmapOnlineStatus.Pending)
|
||||
return null;
|
||||
|
||||
getScoreRequest = new GetScoresRequest(Score.BeatmapInfo, Score.Ruleset);
|
||||
|
@ -4,9 +4,7 @@
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Game.Overlays.Dialog;
|
||||
using osu.Game.Scoring;
|
||||
using System.Diagnostics;
|
||||
using osu.Framework.Graphics.Sprites;
|
||||
using osu.Game.Beatmaps;
|
||||
|
||||
namespace osu.Game.Screens.Select
|
||||
{
|
||||
@ -20,11 +18,8 @@ namespace osu.Game.Screens.Select
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load(BeatmapManager beatmapManager, ScoreManager scoreManager)
|
||||
private void load(ScoreManager scoreManager)
|
||||
{
|
||||
BeatmapInfo? beatmapInfo = beatmapManager.QueryBeatmap(b => b.ID == score.BeatmapInfoID);
|
||||
Debug.Assert(beatmapInfo != null);
|
||||
|
||||
BodyText = $"{score.User} ({score.DisplayAccuracy}, {score.Rank})";
|
||||
|
||||
Icon = FontAwesome.Regular.TrashAlt;
|
||||
|
@ -111,7 +111,7 @@ namespace osu.Game.Users
|
||||
|
||||
protected string Username => score.User.Username;
|
||||
|
||||
public BeatmapInfo BeatmapInfo => score.BeatmapInfo;
|
||||
public BeatmapInfo? BeatmapInfo => score.BeatmapInfo;
|
||||
|
||||
public WatchingReplay(ScoreInfo score)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user