// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Linq; using osu.Game.Beatmaps; using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Rulesets.Scoring.Legacy { /// /// A set of properties that are required to facilitate beatmap conversion between legacy rulesets. /// public class LegacyBeatmapConversionDifficultyInfo : IBeatmapDifficultyInfo { /// /// The beatmap's ruleset. /// public IRulesetInfo SourceRuleset { get; set; } = new RulesetInfo(); /// /// The beatmap drain rate. /// public float DrainRate { get; set; } /// /// The beatmap approach rate. /// public float ApproachRate { get; set; } /// /// The beatmap circle size. /// public float CircleSize { get; set; } /// /// The beatmap overall difficulty. /// public float OverallDifficulty { get; set; } /// /// The number of hitobjects in the beatmap with a distinct end time. /// /// /// Canonically, these are hitobjects are either sliders or spinners. /// public int EndTimeObjectCount { get; set; } /// /// The total count of hitobjects in the beatmap. /// public int TotalObjectCount { get; set; } double IBeatmapDifficultyInfo.SliderMultiplier => 0; double IBeatmapDifficultyInfo.SliderTickRate => 0; public static LegacyBeatmapConversionDifficultyInfo FromAPIBeatmap(APIBeatmap apiBeatmap) => FromBeatmapInfo(apiBeatmap); public static LegacyBeatmapConversionDifficultyInfo FromBeatmap(IBeatmap beatmap) => new LegacyBeatmapConversionDifficultyInfo { SourceRuleset = beatmap.BeatmapInfo.Ruleset, DrainRate = beatmap.Difficulty.DrainRate, ApproachRate = beatmap.Difficulty.ApproachRate, CircleSize = beatmap.Difficulty.CircleSize, OverallDifficulty = beatmap.Difficulty.OverallDifficulty, EndTimeObjectCount = beatmap.HitObjects.Count(h => h is IHasDuration), TotalObjectCount = beatmap.HitObjects.Count }; public static LegacyBeatmapConversionDifficultyInfo FromBeatmapInfo(IBeatmapInfo beatmapInfo) => new LegacyBeatmapConversionDifficultyInfo { SourceRuleset = beatmapInfo.Ruleset, DrainRate = beatmapInfo.Difficulty.DrainRate, ApproachRate = beatmapInfo.Difficulty.ApproachRate, CircleSize = beatmapInfo.Difficulty.CircleSize, OverallDifficulty = beatmapInfo.Difficulty.OverallDifficulty, EndTimeObjectCount = beatmapInfo.EndTimeObjectCount, TotalObjectCount = beatmapInfo.TotalObjectCount }; } }