From 86ebd9d663a2de0b8f0f133402ea22804a40814a Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Sat, 13 May 2017 02:51:58 +0300 Subject: [PATCH 1/6] spinner's progress depends on current map OD now --- .../Objects/Drawables/DrawableSpinner.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 90a6d432c4..0e0784c8ba 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -10,6 +10,8 @@ using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using OpenTK; using OpenTK.Graphics; using osu.Game.Rulesets.Osu.UI; +using osu.Game.Beatmaps; +using osu.Framework.Allocation; namespace osu.Game.Rulesets.Osu.Objects.Drawables { @@ -22,6 +24,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private readonly Container circleContainer; private readonly DrawableHitCircle circle; + private WorkingBeatmap currentBeatmap; + public DrawableSpinner(Spinner s) : base(s) { AlwaysReceiveInput = true; @@ -71,6 +75,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables disc.Scale = scaleToCircle; } + [BackgroundDependencyLoader(permitNulls: true)] + private void load(OsuGame game) + { + currentBeatmap = game?.Beatmap?.Value; + } + protected override void CheckJudgement(bool userTriggered) { if (Time.Current < HitObject.StartTime) return; @@ -108,9 +118,9 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private Vector2 scaleToCircle => circle.Scale * circle.DrawWidth / DrawWidth * 0.95f; - private const float spins_per_minute_needed = 100 + 5 * 15; //TODO: read per-map OD and place it on the 5 + private float spinsPerMinuteNeeded => 100 + (currentBeatmap?.Beatmap.BeatmapInfo.Difficulty.OverallDifficulty ?? 5) * 15; - private float rotationsNeeded => (float)(spins_per_minute_needed * (spinner.EndTime - spinner.StartTime) / 60000f); + private float rotationsNeeded => (float)(spinsPerMinuteNeeded * (spinner.EndTime - spinner.StartTime) / 60000f); public float Progress => MathHelper.Clamp(disc.RotationAbsolute / 360 / rotationsNeeded, 0, 1); From 5532d3ec496b9cb9171efd19fbc18dcb2ecfdc53 Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Sat, 13 May 2017 03:04:40 +0300 Subject: [PATCH 2/6] storing OD value only --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 0e0784c8ba..2586f246e5 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private readonly Container circleContainer; private readonly DrawableHitCircle circle; - private WorkingBeatmap currentBeatmap; + private float beatmapOD; public DrawableSpinner(Spinner s) : base(s) { @@ -78,7 +78,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables [BackgroundDependencyLoader(permitNulls: true)] private void load(OsuGame game) { - currentBeatmap = game?.Beatmap?.Value; + beatmapOD = game?.Beatmap?.Value.Beatmap.BeatmapInfo.Difficulty.OverallDifficulty ?? 5; } protected override void CheckJudgement(bool userTriggered) @@ -118,7 +118,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private Vector2 scaleToCircle => circle.Scale * circle.DrawWidth / DrawWidth * 0.95f; - private float spinsPerMinuteNeeded => 100 + (currentBeatmap?.Beatmap.BeatmapInfo.Difficulty.OverallDifficulty ?? 5) * 15; + private float spinsPerMinuteNeeded => 100 + beatmapOD * 15; private float rotationsNeeded => (float)(spinsPerMinuteNeeded * (spinner.EndTime - spinner.StartTime) / 60000f); From 6d9e11a74f8ff7be393e340d3ae80744b0b6eae2 Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Sat, 13 May 2017 03:10:13 +0300 Subject: [PATCH 3/6] CI fixes --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 2586f246e5..59a381149c 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -10,7 +10,6 @@ using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using OpenTK; using OpenTK.Graphics; using osu.Game.Rulesets.Osu.UI; -using osu.Game.Beatmaps; using osu.Framework.Allocation; namespace osu.Game.Rulesets.Osu.Objects.Drawables @@ -24,7 +23,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private readonly Container circleContainer; private readonly DrawableHitCircle circle; - private float beatmapOD; + private float beatmapOd; public DrawableSpinner(Spinner s) : base(s) { @@ -78,7 +77,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables [BackgroundDependencyLoader(permitNulls: true)] private void load(OsuGame game) { - beatmapOD = game?.Beatmap?.Value.Beatmap.BeatmapInfo.Difficulty.OverallDifficulty ?? 5; + beatmapOd = game?.Beatmap?.Value.Beatmap.BeatmapInfo.Difficulty.OverallDifficulty ?? 5; } protected override void CheckJudgement(bool userTriggered) @@ -118,7 +117,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private Vector2 scaleToCircle => circle.Scale * circle.DrawWidth / DrawWidth * 0.95f; - private float spinsPerMinuteNeeded => 100 + beatmapOD * 15; + private float spinsPerMinuteNeeded => 100 + beatmapOd * 15; private float rotationsNeeded => (float)(spinsPerMinuteNeeded * (spinner.EndTime - spinner.StartTime) / 60000f); From ef234057334eb899030e824d837cf6d53b80ebc1 Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Sun, 14 May 2017 06:45:35 +0300 Subject: [PATCH 4/6] Applied suggested changes --- .../Objects/Drawables/DrawableSpinner.cs | 15 +-------------- osu.Game.Rulesets.Osu/Objects/Spinner.cs | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 59a381149c..e06e72a8bf 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -10,7 +10,6 @@ using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using OpenTK; using OpenTK.Graphics; using osu.Game.Rulesets.Osu.UI; -using osu.Framework.Allocation; namespace osu.Game.Rulesets.Osu.Objects.Drawables { @@ -23,8 +22,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private readonly Container circleContainer; private readonly DrawableHitCircle circle; - private float beatmapOd; - public DrawableSpinner(Spinner s) : base(s) { AlwaysReceiveInput = true; @@ -74,12 +71,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables disc.Scale = scaleToCircle; } - [BackgroundDependencyLoader(permitNulls: true)] - private void load(OsuGame game) - { - beatmapOd = game?.Beatmap?.Value.Beatmap.BeatmapInfo.Difficulty.OverallDifficulty ?? 5; - } - protected override void CheckJudgement(bool userTriggered) { if (Time.Current < HitObject.StartTime) return; @@ -117,11 +108,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private Vector2 scaleToCircle => circle.Scale * circle.DrawWidth / DrawWidth * 0.95f; - private float spinsPerMinuteNeeded => 100 + beatmapOd * 15; - - private float rotationsNeeded => (float)(spinsPerMinuteNeeded * (spinner.EndTime - spinner.StartTime) / 60000f); - - public float Progress => MathHelper.Clamp(disc.RotationAbsolute / 360 / rotationsNeeded, 0, 1); + public float Progress => MathHelper.Clamp(disc.RotationAbsolute / 360 / (float)spinner.SpinsRequired, 0, 1); protected override void UpdatePreemptState() { diff --git a/osu.Game.Rulesets.Osu/Objects/Spinner.cs b/osu.Game.Rulesets.Osu/Objects/Spinner.cs index 0a2c05833a..ab5d03dadc 100644 --- a/osu.Game.Rulesets.Osu/Objects/Spinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Spinner.cs @@ -2,6 +2,8 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Game.Rulesets.Objects.Types; +using osu.Game.Beatmaps.Timing; +using osu.Game.Database; namespace osu.Game.Rulesets.Osu.Objects { @@ -10,6 +12,18 @@ namespace osu.Game.Rulesets.Osu.Objects public double EndTime { get; set; } public double Duration => EndTime - StartTime; + /// + /// Number of spins required to finish the spinner without miss. + /// + public double SpinsRequired { get; protected set; } + public override bool NewCombo => true; + + public override void ApplyDefaults(TimingInfo timing, BeatmapDifficulty difficulty) + { + base.ApplyDefaults(timing, difficulty); + + SpinsRequired = Duration / 1000 * BeatmapDifficulty.DifficultyRange(difficulty.OverallDifficulty, 3, 5, 7.5); + } } } From a4d5660e418cf3c4a3b0af93512b3e8012c04b0d Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Sun, 14 May 2017 09:22:49 +0300 Subject: [PATCH 5/6] Cast SpinsRequired value to int --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs | 2 +- osu.Game.Rulesets.Osu/Objects/Spinner.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index e06e72a8bf..a8ff231cc7 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -108,7 +108,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private Vector2 scaleToCircle => circle.Scale * circle.DrawWidth / DrawWidth * 0.95f; - public float Progress => MathHelper.Clamp(disc.RotationAbsolute / 360 / (float)spinner.SpinsRequired, 0, 1); + public float Progress => MathHelper.Clamp(disc.RotationAbsolute / 360 / spinner.SpinsRequired, 0, 1); protected override void UpdatePreemptState() { diff --git a/osu.Game.Rulesets.Osu/Objects/Spinner.cs b/osu.Game.Rulesets.Osu/Objects/Spinner.cs index ab5d03dadc..04ed7798af 100644 --- a/osu.Game.Rulesets.Osu/Objects/Spinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Spinner.cs @@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Osu.Objects /// /// Number of spins required to finish the spinner without miss. /// - public double SpinsRequired { get; protected set; } + public int SpinsRequired { get; protected set; } public override bool NewCombo => true; @@ -23,7 +23,7 @@ namespace osu.Game.Rulesets.Osu.Objects { base.ApplyDefaults(timing, difficulty); - SpinsRequired = Duration / 1000 * BeatmapDifficulty.DifficultyRange(difficulty.OverallDifficulty, 3, 5, 7.5); + SpinsRequired = (int)(Duration / 1000 * BeatmapDifficulty.DifficultyRange(difficulty.OverallDifficulty, 3, 5, 7.5)); } } } From 7055c99df07b05fb43689f4d357ede4b1ce75d56 Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Sun, 14 May 2017 09:36:09 +0300 Subject: [PATCH 6/6] Added default value --- osu.Game.Rulesets.Osu/Objects/Spinner.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Spinner.cs b/osu.Game.Rulesets.Osu/Objects/Spinner.cs index 04ed7798af..3761b62b65 100644 --- a/osu.Game.Rulesets.Osu/Objects/Spinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Spinner.cs @@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Osu.Objects /// /// Number of spins required to finish the spinner without miss. /// - public int SpinsRequired { get; protected set; } + public int SpinsRequired { get; protected set; } = 1; public override bool NewCombo => true;