Use best-name-finding helper in new difficulty creation flow

This commit is contained in:
Bartłomiej Dach 2022-02-16 23:12:13 +01:00
parent e09570c31b
commit 8a08bb7aaf
No known key found for this signature in database
GPG Key ID: BCECCD4FA41F6497

View File

@ -22,6 +22,7 @@ using osu.Game.Overlays.Notifications;
using osu.Game.Rulesets; using osu.Game.Rulesets;
using osu.Game.Skinning; using osu.Game.Skinning;
using osu.Game.Stores; using osu.Game.Stores;
using osu.Game.Utils;
#nullable enable #nullable enable
@ -123,7 +124,10 @@ namespace osu.Game.Beatmaps
{ {
var playableBeatmap = referenceWorkingBeatmap.GetPlayableBeatmap(rulesetInfo); var playableBeatmap = referenceWorkingBeatmap.GetPlayableBeatmap(rulesetInfo);
var newBeatmapInfo = new BeatmapInfo(rulesetInfo, new BeatmapDifficulty(), playableBeatmap.Metadata.DeepClone()); var newBeatmapInfo = new BeatmapInfo(rulesetInfo, new BeatmapDifficulty(), playableBeatmap.Metadata.DeepClone())
{
DifficultyName = NamingUtils.GetNextBestName(targetBeatmapSet.Beatmaps.Select(b => b.DifficultyName), "New Difficulty")
};
var newBeatmap = new Beatmap { BeatmapInfo = newBeatmapInfo }; var newBeatmap = new Beatmap { BeatmapInfo = newBeatmapInfo };
foreach (var timingPoint in playableBeatmap.ControlPointInfo.TimingPoints) foreach (var timingPoint in playableBeatmap.ControlPointInfo.TimingPoints)
newBeatmap.ControlPointInfo.Add(timingPoint.Time, timingPoint.DeepClone()); newBeatmap.ControlPointInfo.Add(timingPoint.Time, timingPoint.DeepClone());
@ -150,8 +154,10 @@ namespace osu.Game.Beatmaps
newBeatmap.BeatmapInfo = newBeatmapInfo = referenceWorkingBeatmap.BeatmapInfo.Clone(); newBeatmap.BeatmapInfo = newBeatmapInfo = referenceWorkingBeatmap.BeatmapInfo.Clone();
// assign a new ID to the clone. // assign a new ID to the clone.
newBeatmapInfo.ID = Guid.NewGuid(); newBeatmapInfo.ID = Guid.NewGuid();
// add "(copy)" suffix to difficulty name to avoid clashes on save. // add "(copy)" suffix to difficulty name, and additionally ensure that it doesn't conflict with any other potentially pre-existing copies.
newBeatmapInfo.DifficultyName += " (copy)"; newBeatmapInfo.DifficultyName = NamingUtils.GetNextBestName(
targetBeatmapSet.Beatmaps.Select(b => b.DifficultyName),
$"{newBeatmapInfo.DifficultyName} (copy)");
// clear the hash, as that's what is used to match .osu files with their corresponding realm beatmaps. // clear the hash, as that's what is used to match .osu files with their corresponding realm beatmaps.
newBeatmapInfo.Hash = string.Empty; newBeatmapInfo.Hash = string.Empty;
// clear online properties. // clear online properties.