Change `BeatmapInfo` copy logic to be opt-in rather than opt-out

This commit is contained in:
Bartłomiej Dach 2022-02-13 19:04:11 +01:00
parent 13abc392bd
commit 5dabc9282c
No known key found for this signature in database
GPG Key ID: BCECCD4FA41F6497
1 changed files with 22 additions and 7 deletions

View File

@ -131,13 +131,28 @@ public virtual WorkingBeatmap CreateNewDifficulty(NewDifficultyCreationParameter
else
{
newBeatmap = referenceBeatmap.Clone();
newBeatmap.BeatmapInfo = newBeatmapInfo = referenceBeatmap.BeatmapInfo.Clone();
// assign a new ID to the clone.
newBeatmapInfo.ID = Guid.NewGuid();
// clear difficulty name to avoid clashes on save.
newBeatmapInfo.DifficultyName = string.Empty;
// also clear the hash, as that's what is used to match .osu files with their corresponding realm beatmaps.
newBeatmapInfo.Hash = string.Empty;
var referenceBeatmapInfo = referenceBeatmap.BeatmapInfo;
newBeatmap.BeatmapInfo = newBeatmapInfo = new BeatmapInfo(referenceBeatmapInfo.Ruleset, referenceBeatmapInfo.Difficulty.Clone(), referenceBeatmapInfo.Metadata.DeepClone())
{
// Only selected appropriate properties are copied over.
// Things like database ID, online status/ID, MD5 hash, star rating, etc. are omitted
// because they should not be copied over and/or they will be recomputed on save.
AudioLeadIn = referenceBeatmapInfo.AudioLeadIn,
StackLeniency = referenceBeatmapInfo.StackLeniency,
SpecialStyle = referenceBeatmapInfo.SpecialStyle,
LetterboxInBreaks = referenceBeatmapInfo.LetterboxInBreaks,
WidescreenStoryboard = referenceBeatmapInfo.WidescreenStoryboard,
EpilepsyWarning = referenceBeatmapInfo.EpilepsyWarning,
SamplesMatchPlaybackRate = referenceBeatmapInfo.SamplesMatchPlaybackRate,
DistanceSpacing = referenceBeatmapInfo.DistanceSpacing,
BeatDivisor = referenceBeatmapInfo.BeatDivisor,
GridSize = referenceBeatmapInfo.GridSize,
TimelineZoom = referenceBeatmapInfo.TimelineZoom,
Countdown = referenceBeatmapInfo.Countdown,
CountdownOffset = referenceBeatmapInfo.CountdownOffset,
Bookmarks = (int[])referenceBeatmapInfo.Bookmarks.Clone()
};
}
// populate circular beatmap set info <-> beatmap info references manually.