// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using Newtonsoft.Json; using osu.Game.Beatmaps; using osu.Game.Rulesets.Difficulty; namespace osu.Game.Rulesets.Taiko.Difficulty { public class TaikoDifficultyAttributes : DifficultyAttributes { /// /// The difficulty corresponding to the stamina skill. /// [JsonProperty("stamina_difficulty")] public double StaminaDifficulty { get; set; } /// /// The ratio of stamina difficulty from mono-color (single colour) streams to total stamina difficulty. /// [JsonProperty("mono_stamina_factor")] public double MonoStaminaFactor { get; set; } /// /// The difficulty corresponding to the rhythm skill. /// [JsonProperty("rhythm_difficulty")] public double RhythmDifficulty { get; set; } /// /// The difficulty corresponding to the colour skill. /// [JsonProperty("colour_difficulty")] public double ColourDifficulty { get; set; } /// /// The difficulty corresponding to the hardest parts of the map. /// [JsonProperty("peak_difficulty")] public double PeakDifficulty { get; set; } /// /// The perceived hit window for a GREAT hit inclusive of rate-adjusting mods (DT/HT/etc). /// /// /// Rate-adjusting mods don't directly affect the hit window, but have a perceived effect as a result of adjusting audio timing. /// [JsonProperty("great_hit_window")] public double GreatHitWindow { get; set; } /// /// The perceived hit window for an OK hit inclusive of rate-adjusting mods (DT/HT/etc). /// /// /// Rate-adjusting mods don't directly affect the hit window, but have a perceived effect as a result of adjusting audio timing. /// [JsonProperty("ok_hit_window")] public double OkHitWindow { get; set; } public override IEnumerable<(int attributeId, object value)> ToDatabaseAttributes() { foreach (var v in base.ToDatabaseAttributes()) yield return v; yield return (ATTRIB_ID_DIFFICULTY, StarRating); yield return (ATTRIB_ID_GREAT_HIT_WINDOW, GreatHitWindow); yield return (ATTRIB_ID_OK_HIT_WINDOW, OkHitWindow); yield return (ATTRIB_ID_MONO_STAMINA_FACTOR, MonoStaminaFactor); } public override void FromDatabaseAttributes(IReadOnlyDictionary values, IBeatmapOnlineInfo onlineInfo) { base.FromDatabaseAttributes(values, onlineInfo); StarRating = values[ATTRIB_ID_DIFFICULTY]; GreatHitWindow = values[ATTRIB_ID_GREAT_HIT_WINDOW]; OkHitWindow = values[ATTRIB_ID_OK_HIT_WINDOW]; MonoStaminaFactor = values[ATTRIB_ID_MONO_STAMINA_FACTOR]; } } }