// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Game.Rulesets.Objects; using System.Collections.Generic; namespace osu.Game.Beatmaps { public abstract class DifficultyCalculator { protected double TimeRate = 1; protected abstract double CalculateInternal(Dictionary categoryDifficulty); private void loadTiming() { // TODO: Handle mods const int audio_rate = 100; TimeRate = audio_rate / 100.0; } public double Calculate(Dictionary categoryDifficulty = null) { loadTiming(); double difficulty = CalculateInternal(categoryDifficulty); return difficulty; } } public abstract class DifficultyCalculator : DifficultyCalculator where T : HitObject { protected readonly Beatmap Beatmap; protected List Objects; protected DifficultyCalculator(Beatmap beatmap) { Beatmap = beatmap; Objects = CreateBeatmapConverter().Convert(beatmap).HitObjects; foreach (var h in Objects) h.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.Difficulty); PreprocessHitObjects(); } protected virtual void PreprocessHitObjects() { } protected abstract BeatmapConverter CreateBeatmapConverter(); } }