From 38263714a13761011ff6f7cbc7cd75446f8587b8 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 3 Aug 2018 16:56:46 +0900 Subject: [PATCH] Cleanups --- .../TestCaseTaikoPlayfield.cs | 2 +- ...itJudgement.cs => TaikoStrongJudgement.cs} | 2 +- .../Objects/Drawables/DrawableDrumRoll.cs | 20 +++++- .../Objects/Drawables/DrawableDrumRollTick.cs | 20 +++++- .../Objects/Drawables/DrawableHit.cs | 61 ++++++++++++++++- .../Drawables/DrawableStrongDrumRoll.cs | 25 ------- .../Drawables/DrawableStrongDrumRollTick.cs | 25 ------- ...gHitObject.cs => DrawableStrongHandler.cs} | 8 ++- .../Objects/Drawables/DrawableStrongHit.cs | 67 ------------------- .../Drawables/DrawableTaikoHitObject.cs | 10 ++- .../Objects/StrongHitObject.cs | 2 +- osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs | 4 +- 12 files changed, 117 insertions(+), 129 deletions(-) rename osu.Game.Rulesets.Taiko/Judgements/{TaikoStrongHitJudgement.cs => TaikoStrongJudgement.cs} (82%) delete mode 100644 osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRoll.cs delete mode 100644 osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRollTick.cs rename osu.Game.Rulesets.Taiko/Objects/Drawables/{DrawableStrongHitObject.cs => DrawableStrongHandler.cs} (60%) delete mode 100644 osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHit.cs diff --git a/osu.Game.Rulesets.Taiko.Tests/TestCaseTaikoPlayfield.cs b/osu.Game.Rulesets.Taiko.Tests/TestCaseTaikoPlayfield.cs index 18333e794e..35cb94e8de 100644 --- a/osu.Game.Rulesets.Taiko.Tests/TestCaseTaikoPlayfield.cs +++ b/osu.Game.Rulesets.Taiko.Tests/TestCaseTaikoPlayfield.cs @@ -145,7 +145,7 @@ namespace osu.Game.Rulesets.Taiko.Tests if (RNG.Next(10) == 0) { ((TaikoPlayfield)rulesetContainer.Playfield).OnJudgement(h, new JudgementResult(new TaikoJudgement()) { Type = hitResult }); - ((TaikoPlayfield)rulesetContainer.Playfield).OnJudgement(h, new JudgementResult(new TaikoStrongHitJudgement()) { Type = HitResult.Great }); + ((TaikoPlayfield)rulesetContainer.Playfield).OnJudgement(h, new JudgementResult(new TaikoStrongJudgement()) { Type = HitResult.Great }); } } diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongJudgement.cs similarity index 82% rename from osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs rename to osu.Game.Rulesets.Taiko/Judgements/TaikoStrongJudgement.cs index b69bbd4fd8..ccfdeb5b0e 100644 --- a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs +++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongJudgement.cs @@ -3,7 +3,7 @@ namespace osu.Game.Rulesets.Taiko.Judgements { - public class TaikoStrongHitJudgement : TaikoJudgement + public class TaikoStrongJudgement : TaikoJudgement { public override bool AffectsCombo => false; } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs index da57f4ec4b..a984af3b51 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs @@ -99,6 +99,24 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables } } - protected override DrawableStrongHitObject CreateStrongObject(StrongHitObject hitObject) => new DrawableStrongDrumRoll(hitObject, this); + protected override DrawableStrongHandler CreateStrongHandler(StrongHitObject hitObject) => new StrongHandler(hitObject, this); + + private class StrongHandler : DrawableStrongHandler + { + public StrongHandler(StrongHitObject strong, DrawableDrumRoll drumRoll) + : base(strong, drumRoll) + { + } + + protected override void CheckForJudgements(bool userTriggered, double timeOffset) + { + if (!MainObject.Judged) + return; + + ApplyResult(r => r.Type = MainObject.IsHit ? HitResult.Great : HitResult.Miss); + } + + public override bool OnPressed(TaikoAction action) => false; + } } } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs index 458c4d7c80..cbe6e10dcb 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs @@ -51,6 +51,24 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables public override bool OnPressed(TaikoAction action) => UpdateJudgement(true); - protected override DrawableStrongHitObject CreateStrongObject(StrongHitObject hitObject) => new DrawableStrongDrumRollTick(hitObject, this); + protected override DrawableStrongHandler CreateStrongHandler(StrongHitObject hitObject) => new StrongHandler(hitObject, this); + + private class StrongHandler : DrawableStrongHandler + { + public StrongHandler(StrongHitObject strong, DrawableDrumRollTick tick) + : base(strong, tick) + { + } + + protected override void CheckForJudgements(bool userTriggered, double timeOffset) + { + if (!MainObject.Judged) + return; + + ApplyResult(r => r.Type = MainObject.IsHit ? HitResult.Great : HitResult.Miss); + } + + public override bool OnPressed(TaikoAction action) => false; + } } } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs index 35fa5eb344..4289a77f4c 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Linq; using osu.Framework.Graphics; using osu.Game.Rulesets.Objects.Drawables; @@ -126,6 +127,64 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables } } - protected override DrawableStrongHitObject CreateStrongObject(StrongHitObject hitObject) => new DrawableStrongHit(hitObject, this); + protected override DrawableStrongHandler CreateStrongHandler(StrongHitObject hitObject) => new StrongHandler(hitObject, this); + + private class StrongHandler : DrawableStrongHandler + { + /// + /// The lenience for the second key press. + /// This does not adjust by map difficulty in ScoreV2 yet. + /// + private const double second_hit_window = 30; + + public new DrawableHit MainObject => (DrawableHit)base.MainObject; + + public StrongHandler(StrongHitObject strong, DrawableHit hit) + : base(strong, hit) + { + } + + protected override void CheckForJudgements(bool userTriggered, double timeOffset) + { + if (!MainObject.Result.HasResult) + { + base.CheckForJudgements(userTriggered, timeOffset); + return; + } + + if (!MainObject.Result.IsHit) + { + ApplyResult(r => r.Type = HitResult.Miss); + return; + } + + if (!userTriggered) + { + if (timeOffset > second_hit_window) + ApplyResult(r => r.Type = HitResult.Miss); + return; + } + + if (Math.Abs(MainObject.Result.TimeOffset - timeOffset) < second_hit_window) + ApplyResult(r => r.Type = HitResult.Great); + } + + public override bool OnPressed(TaikoAction action) + { + // Don't process actions until the main hitobject is hit + if (!MainObject.IsHit) + return false; + + // Don't process actions if the pressed button was released + if (MainObject.HitAction == null) + return false; + + // Don't handle invalid hit action presses + if (!MainObject.HitActions.Contains(action)) + return false; + + return UpdateJudgement(true); + } + } } } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRoll.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRoll.cs deleted file mode 100644 index 3e8f5103c9..0000000000 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRoll.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Game.Rulesets.Scoring; - -namespace osu.Game.Rulesets.Taiko.Objects.Drawables -{ - public class DrawableStrongDrumRoll : DrawableStrongHitObject - { - public DrawableStrongDrumRoll(StrongHitObject strong, DrawableDrumRoll drumRoll) - : base(strong, drumRoll) - { - } - - protected override void CheckForJudgements(bool userTriggered, double timeOffset) - { - if (!MainObject.Judged) - return; - - ApplyResult(r => r.Type = MainObject.IsHit ? HitResult.Great : HitResult.Miss); - } - - public override bool OnPressed(TaikoAction action) => false; - } -} diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRollTick.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRollTick.cs deleted file mode 100644 index 1724054800..0000000000 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongDrumRollTick.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Game.Rulesets.Scoring; - -namespace osu.Game.Rulesets.Taiko.Objects.Drawables -{ - public class DrawableStrongDrumRollTick : DrawableStrongHitObject - { - public DrawableStrongDrumRollTick(StrongHitObject strong, DrawableDrumRollTick tick) - : base(strong, tick) - { - } - - protected override void CheckForJudgements(bool userTriggered, double timeOffset) - { - if (!MainObject.Judged) - return; - - ApplyResult(r => r.Type = MainObject.IsHit ? HitResult.Great : HitResult.Miss); - } - - public override bool OnPressed(TaikoAction action) => false; - } -} diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHitObject.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHandler.cs similarity index 60% rename from osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHitObject.cs rename to osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHandler.cs index 3f6080d1b5..6f2db764a8 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHitObject.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHandler.cs @@ -2,16 +2,20 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Taiko.Judgements; namespace osu.Game.Rulesets.Taiko.Objects.Drawables { - public abstract class DrawableStrongHitObject : DrawableTaikoHitObject + /// + /// Used as a nested hitobject to provide s for s. + /// + public abstract class DrawableStrongHandler : DrawableTaikoHitObject { public override bool DisplayJudgement => false; public readonly DrawableHitObject MainObject; - protected DrawableStrongHitObject(StrongHitObject strong, DrawableHitObject mainObject) + protected DrawableStrongHandler(StrongHitObject strong, DrawableHitObject mainObject) : base(strong) { MainObject = mainObject; diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHit.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHit.cs deleted file mode 100644 index d0c6525cde..0000000000 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableStrongHit.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using System.Linq; -using osu.Game.Rulesets.Scoring; - -namespace osu.Game.Rulesets.Taiko.Objects.Drawables -{ - public class DrawableStrongHit : DrawableStrongHitObject - { - /// - /// The lenience for the second key press. - /// This does not adjust by map difficulty in ScoreV2 yet. - /// - private const double second_hit_window = 30; - - public DrawableHit MainObject => (DrawableHit)base.MainObject; - - public DrawableStrongHit(StrongHitObject strong, DrawableHit hit) - : base(strong, hit) - { - } - - protected override void CheckForJudgements(bool userTriggered, double timeOffset) - { - if (!MainObject.Result.HasResult) - { - base.CheckForJudgements(userTriggered, timeOffset); - return; - } - - if (!MainObject.Result.IsHit) - { - ApplyResult(r => r.Type = HitResult.Miss); - return; - } - - if (!userTriggered) - { - if (timeOffset > second_hit_window) - ApplyResult(r => r.Type = HitResult.Miss); - return; - } - - if (Math.Abs(MainObject.Result.TimeOffset - timeOffset) < second_hit_window) - ApplyResult(r => r.Type = HitResult.Great); - } - - public override bool OnPressed(TaikoAction action) - { - // Don't process actions until the main hitobject is hit - if (!MainObject.IsHit) - return false; - - // Don't process actions if the pressed button was released - if (MainObject.HitAction == null) - return false; - - // Don't handle invalid hit action presses - if (!MainObject.HitActions.Contains(action)) - return false; - - return UpdateJudgement(true); - } - } -} diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs index b0216768c1..6d19c99b9c 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs @@ -105,7 +105,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables var strongObject = HitObject.NestedHitObjects.OfType().FirstOrDefault(); if (strongObject != null) { - var vis = CreateStrongObject(strongObject); + var vis = CreateStrongHandler(strongObject); if (vis != null) { AddNested(vis); @@ -121,6 +121,12 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables protected virtual TaikoPiece CreateMainPiece() => new CirclePiece(); - protected virtual DrawableStrongHitObject CreateStrongObject(StrongHitObject hitObject) => null; + /// + /// Creates the handler for this 's . + /// This is only invoked if is true for . + /// + /// The strong hitobject. + /// The strong hitobject handler. + protected virtual DrawableStrongHandler CreateStrongHandler(StrongHitObject hitObject) => null; } } diff --git a/osu.Game.Rulesets.Taiko/Objects/StrongHitObject.cs b/osu.Game.Rulesets.Taiko/Objects/StrongHitObject.cs index 104d662ed8..a9d452cc68 100644 --- a/osu.Game.Rulesets.Taiko/Objects/StrongHitObject.cs +++ b/osu.Game.Rulesets.Taiko/Objects/StrongHitObject.cs @@ -8,6 +8,6 @@ namespace osu.Game.Rulesets.Taiko.Objects { public class StrongHitObject : TaikoHitObject { - protected override Judgement CreateJudgement() => new TaikoStrongHitJudgement(); + protected override Judgement CreateJudgement() => new TaikoStrongJudgement(); } } diff --git a/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs b/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs index 4a045ac86f..5202fe00ad 100644 --- a/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs +++ b/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs @@ -234,9 +234,9 @@ namespace osu.Game.Rulesets.Taiko.UI switch (result.Judgement) { - case TaikoStrongHitJudgement _: + case TaikoStrongJudgement _: if (result.IsHit) - hitExplosionContainer.Children.FirstOrDefault(e => e.JudgedObject == ((DrawableStrongHitObject)judgedObject).MainObject)?.VisualiseSecondHit(); + hitExplosionContainer.Children.FirstOrDefault(e => e.JudgedObject == ((DrawableStrongHandler)judgedObject).MainObject)?.VisualiseSecondHit(); break; default: judgementContainer.Add(new DrawableTaikoJudgement(result, judgedObject)