From bf66b84ff8c2463caa28e8147fdfce982757589c Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Wed, 15 Mar 2017 16:07:40 +0900 Subject: [PATCH 01/10] Move a few classes/enums into separate files. --- .../Objects/Drawables/DrawableOsuHitObject.cs | 1 + .../Objects/Drawables/DrawableSliderTick.cs | 1 + osu.Game.Modes.Osu/OsuScoreProcessor.cs | 1 + osu.Game.Modes.Osu/UI/OsuPlayfield.cs | 1 + osu.Game/Modes/Judgements/JudgementInfo.cs | 11 ++++++++ .../Modes/Objects/Drawables/ArmedState.cs | 9 ++++++ .../Objects/Drawables/DrawableHitObject.cs | 28 +------------------ osu.Game/Modes/Objects/Drawables/HitResult.cs | 12 ++++++++ osu.Game/Modes/ScoreProcesssor.cs | 1 + osu.Game/Modes/UI/HitRenderer.cs | 1 + osu.Game/osu.Game.csproj | 3 ++ 11 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 osu.Game/Modes/Judgements/JudgementInfo.cs create mode 100644 osu.Game/Modes/Objects/Drawables/ArmedState.cs create mode 100644 osu.Game/Modes/Objects/Drawables/HitResult.cs diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs index 4b436dd82f..be237a22f4 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.ComponentModel; +using osu.Game.Modes.Judgements; using osu.Game.Modes.Objects.Drawables; namespace osu.Game.Modes.Osu.Objects.Drawables diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs index 7c5fa4a092..acda9da62f 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -9,6 +9,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Transforms; using osu.Game.Beatmaps.Samples; +using osu.Game.Modes.Judgements; using osu.Game.Modes.Objects.Drawables; using OpenTK; using OpenTK.Graphics; diff --git a/osu.Game.Modes.Osu/OsuScoreProcessor.cs b/osu.Game.Modes.Osu/OsuScoreProcessor.cs index 7bc82c3c8b..2377e2f520 100644 --- a/osu.Game.Modes.Osu/OsuScoreProcessor.cs +++ b/osu.Game.Modes.Osu/OsuScoreProcessor.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Modes.Judgements; using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Osu.Objects.Drawables; diff --git a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs index 849d7e74d6..ab19a92212 100644 --- a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs +++ b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs @@ -11,6 +11,7 @@ using osu.Game.Modes.Osu.Objects.Drawables.Connections; using osu.Game.Modes.UI; using System.Linq; using osu.Game.Graphics.Cursor; +using osu.Game.Modes.Judgements; using OpenTK.Graphics; namespace osu.Game.Modes.Osu.UI diff --git a/osu.Game/Modes/Judgements/JudgementInfo.cs b/osu.Game/Modes/Judgements/JudgementInfo.cs new file mode 100644 index 0000000000..cb6710dd32 --- /dev/null +++ b/osu.Game/Modes/Judgements/JudgementInfo.cs @@ -0,0 +1,11 @@ +using osu.Game.Modes.Objects.Drawables; + +namespace osu.Game.Modes.Judgements +{ + public class JudgementInfo + { + public ulong? ComboAtHit; + public HitResult? Result; + public double TimeOffset; + } +} \ No newline at end of file diff --git a/osu.Game/Modes/Objects/Drawables/ArmedState.cs b/osu.Game/Modes/Objects/Drawables/ArmedState.cs new file mode 100644 index 0000000000..dcbe7cc425 --- /dev/null +++ b/osu.Game/Modes/Objects/Drawables/ArmedState.cs @@ -0,0 +1,9 @@ +namespace osu.Game.Modes.Objects.Drawables +{ + public enum ArmedState + { + Idle, + Hit, + Miss + } +} \ No newline at end of file diff --git a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs index 33ff8a0810..a6b787f0de 100644 --- a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs @@ -3,12 +3,12 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using osu.Framework; using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Game.Beatmaps.Samples; +using osu.Game.Modes.Judgements; using OpenTK; using Container = osu.Framework.Graphics.Containers.Container; @@ -16,10 +16,6 @@ namespace osu.Game.Modes.Objects.Drawables { public abstract class DrawableHitObject : Container, IStateful { - public override bool HandleInput => Interactive; - - public bool Interactive = true; - public JudgementInfo Judgement; protected abstract JudgementInfo CreateJudgementInfo(); @@ -152,30 +148,8 @@ namespace osu.Game.Modes.Objects.Drawables } } - public enum ArmedState - { - Idle, - Hit, - Miss - } - public class PositionalJudgementInfo : JudgementInfo { public Vector2 PositionOffset; } - - public class JudgementInfo - { - public ulong? ComboAtHit; - public HitResult? Result; - public double TimeOffset; - } - - public enum HitResult - { - [Description(@"Miss")] - Miss, - [Description(@"Hit")] - Hit, - } } diff --git a/osu.Game/Modes/Objects/Drawables/HitResult.cs b/osu.Game/Modes/Objects/Drawables/HitResult.cs new file mode 100644 index 0000000000..2a66f14bdc --- /dev/null +++ b/osu.Game/Modes/Objects/Drawables/HitResult.cs @@ -0,0 +1,12 @@ +using System.ComponentModel; + +namespace osu.Game.Modes.Objects.Drawables +{ + public enum HitResult + { + [Description(@"Miss")] + Miss, + [Description(@"Hit")] + Hit, + } +} \ No newline at end of file diff --git a/osu.Game/Modes/ScoreProcesssor.cs b/osu.Game/Modes/ScoreProcesssor.cs index 554996c145..0fb9ddba0c 100644 --- a/osu.Game/Modes/ScoreProcesssor.cs +++ b/osu.Game/Modes/ScoreProcesssor.cs @@ -5,6 +5,7 @@ using osu.Framework.Configuration; using osu.Game.Modes.Objects.Drawables; using System; using System.Collections.Generic; +using osu.Game.Modes.Judgements; namespace osu.Game.Modes { diff --git a/osu.Game/Modes/UI/HitRenderer.cs b/osu.Game/Modes/UI/HitRenderer.cs index a40b332095..6b2bd55a7d 100644 --- a/osu.Game/Modes/UI/HitRenderer.cs +++ b/osu.Game/Modes/UI/HitRenderer.cs @@ -12,6 +12,7 @@ using osu.Game.Screens.Play; using System; using System.Collections.Generic; using System.Linq; +using osu.Game.Modes.Judgements; namespace osu.Game.Modes.UI { diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index b377ba6096..d2cf09bde4 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -93,7 +93,10 @@ + + + From 1c87d998a6a2fe3402e9035483961b3e1a353bee Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Wed, 15 Mar 2017 16:29:14 +0900 Subject: [PATCH 02/10] Rename HitObjectType -> TObject. --- .../Objects/Drawables/DrawableHitObject.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs index a6b787f0de..a7f3a1534b 100644 --- a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs @@ -63,14 +63,14 @@ namespace osu.Game.Modes.Objects.Drawables } } - public abstract class DrawableHitObject : DrawableHitObject - where HitObjectType : HitObject + public abstract class DrawableHitObject : DrawableHitObject + where TObject : HitObject { - public event Action, JudgementInfo> OnJudgement; + public event Action, JudgementInfo> OnJudgement; - public HitObjectType HitObject; + public TObject HitObject; - protected DrawableHitObject(HitObjectType hitObject) + protected DrawableHitObject(TObject hitObject) { HitObject = hitObject; } @@ -134,14 +134,14 @@ namespace osu.Game.Modes.Objects.Drawables Sample = audio.Sample.Get($@"Gameplay/{sampleSet.ToString().ToLower()}-hit{type.ToString().ToLower()}"); } - private List> nestedHitObjects; + private List> nestedHitObjects; - protected IEnumerable> NestedHitObjects => nestedHitObjects; + protected IEnumerable> NestedHitObjects => nestedHitObjects; - protected void AddNested(DrawableHitObject h) + protected void AddNested(DrawableHitObject h) { if (nestedHitObjects == null) - nestedHitObjects = new List>(); + nestedHitObjects = new List>(); h.OnJudgement += (d, j) => { OnJudgement?.Invoke(d, j); } ; nestedHitObjects.Add(h); From 36e861837031f2b4636cb252d7d5b1c401d99859 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Wed, 15 Mar 2017 18:55:38 +0900 Subject: [PATCH 03/10] Make DrawableHitObjects have generic JudgementInfos. --- .../Tests/TestCaseHitObjects.cs | 2 +- .../Judgements/CatchJudgementInfo.cs | 13 +++++ osu.Game.Modes.Catch/UI/CatchHitRenderer.cs | 7 +-- osu.Game.Modes.Catch/UI/CatchPlayfield.cs | 3 +- .../osu.Game.Modes.Catch.csproj | 1 + .../Judgements/ManiaJudgementInfo.cs | 13 +++++ osu.Game.Modes.Mania/UI/ManiaHitRenderer.cs | 7 +-- osu.Game.Modes.Mania/UI/ManiaPlayfield.cs | 3 +- .../osu.Game.Modes.Mania.csproj | 1 + .../Objects/Drawables/DrawableOsuHitObject.cs | 4 +- .../Objects/Drawables/DrawableSliderTick.cs | 2 +- osu.Game.Modes.Osu/UI/OsuHitRenderer.cs | 6 +-- osu.Game.Modes.Osu/UI/OsuPlayfield.cs | 14 +++-- .../Judgements/TaikoJudgementInfo.cs | 13 +++++ osu.Game.Modes.Taiko/UI/TaikoHitRenderer.cs | 7 +-- osu.Game.Modes.Taiko/UI/TaikoPlayfield.cs | 3 +- .../osu.Game.Modes.Taiko.csproj | 1 + .../Objects/Drawables/DrawableHitObject.cs | 28 ++++++---- osu.Game/Modes/UI/HitRenderer.cs | 52 ++++++++++++------- osu.Game/Modes/UI/Playfield.cs | 14 +++-- 20 files changed, 132 insertions(+), 62 deletions(-) create mode 100644 osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs create mode 100644 osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs create mode 100644 osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs diff --git a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs index 436f048e10..01c10489d7 100644 --- a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs +++ b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs @@ -123,7 +123,7 @@ namespace osu.Desktop.VisualTests.Tests private int depth; - private void add(DrawableHitObject h) + private void add(DrawableHitObject h) { h.Anchor = Anchor.Centre; h.Depth = depth++; diff --git a/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs b/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs new file mode 100644 index 0000000000..e560091d2d --- /dev/null +++ b/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs @@ -0,0 +1,13 @@ +using osu.Game.Modes.Judgements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace osu.Game.Modes.Catch.Judgements +{ + public class CatchJudgementInfo : JudgementInfo + { + } +} diff --git a/osu.Game.Modes.Catch/UI/CatchHitRenderer.cs b/osu.Game.Modes.Catch/UI/CatchHitRenderer.cs index a8b2d48760..b537ec6e8a 100644 --- a/osu.Game.Modes.Catch/UI/CatchHitRenderer.cs +++ b/osu.Game.Modes.Catch/UI/CatchHitRenderer.cs @@ -3,13 +3,14 @@ using osu.Game.Beatmaps; using osu.Game.Modes.Catch.Beatmaps; +using osu.Game.Modes.Catch.Judgements; using osu.Game.Modes.Catch.Objects; using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.UI; namespace osu.Game.Modes.Catch.UI { - public class CatchHitRenderer : HitRenderer + public class CatchHitRenderer : HitRenderer { public CatchHitRenderer(WorkingBeatmap beatmap) : base(beatmap) @@ -18,8 +19,8 @@ namespace osu.Game.Modes.Catch.UI protected override IBeatmapConverter CreateBeatmapConverter() => new CatchBeatmapConverter(); - protected override Playfield CreatePlayfield() => new CatchPlayfield(); + protected override Playfield CreatePlayfield() => new CatchPlayfield(); - protected override DrawableHitObject GetVisualRepresentation(CatchBaseHit h) => null;// new DrawableFruit(h); + protected override DrawableHitObject GetVisualRepresentation(CatchBaseHit h) => null;// new DrawableFruit(h); } } diff --git a/osu.Game.Modes.Catch/UI/CatchPlayfield.cs b/osu.Game.Modes.Catch/UI/CatchPlayfield.cs index c9c3df8197..eba8734eaf 100644 --- a/osu.Game.Modes.Catch/UI/CatchPlayfield.cs +++ b/osu.Game.Modes.Catch/UI/CatchPlayfield.cs @@ -6,10 +6,11 @@ using osu.Framework.Graphics.Sprites; using osu.Game.Modes.Catch.Objects; using osu.Game.Modes.UI; using OpenTK; +using osu.Game.Modes.Catch.Judgements; namespace osu.Game.Modes.Catch.UI { - public class CatchPlayfield : Playfield + public class CatchPlayfield : Playfield { public CatchPlayfield() { diff --git a/osu.Game.Modes.Catch/osu.Game.Modes.Catch.csproj b/osu.Game.Modes.Catch/osu.Game.Modes.Catch.csproj index 4908bcd0d0..d7c3a9f828 100644 --- a/osu.Game.Modes.Catch/osu.Game.Modes.Catch.csproj +++ b/osu.Game.Modes.Catch/osu.Game.Modes.Catch.csproj @@ -49,6 +49,7 @@ + diff --git a/osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs b/osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs new file mode 100644 index 0000000000..1b587e4ae1 --- /dev/null +++ b/osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs @@ -0,0 +1,13 @@ +using osu.Game.Modes.Judgements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace osu.Game.Modes.Mania.Judgements +{ + public class ManiaJudgementInfo : JudgementInfo + { + } +} diff --git a/osu.Game.Modes.Mania/UI/ManiaHitRenderer.cs b/osu.Game.Modes.Mania/UI/ManiaHitRenderer.cs index d29a088225..52b35d5032 100644 --- a/osu.Game.Modes.Mania/UI/ManiaHitRenderer.cs +++ b/osu.Game.Modes.Mania/UI/ManiaHitRenderer.cs @@ -3,13 +3,14 @@ using osu.Game.Beatmaps; using osu.Game.Modes.Mania.Beatmaps; +using osu.Game.Modes.Mania.Judgements; using osu.Game.Modes.Mania.Objects; using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.UI; namespace osu.Game.Modes.Mania.UI { - public class ManiaHitRenderer : HitRenderer + public class ManiaHitRenderer : HitRenderer { private readonly int columns; @@ -21,9 +22,9 @@ namespace osu.Game.Modes.Mania.UI protected override IBeatmapConverter CreateBeatmapConverter() => new ManiaBeatmapConverter(); - protected override Playfield CreatePlayfield() => new ManiaPlayfield(columns); + protected override Playfield CreatePlayfield() => new ManiaPlayfield(columns); - protected override DrawableHitObject GetVisualRepresentation(ManiaBaseHit h) + protected override DrawableHitObject GetVisualRepresentation(ManiaBaseHit h) { return null; //return new DrawableNote(h) diff --git a/osu.Game.Modes.Mania/UI/ManiaPlayfield.cs b/osu.Game.Modes.Mania/UI/ManiaPlayfield.cs index ab3c231917..3984fce626 100644 --- a/osu.Game.Modes.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Modes.Mania/UI/ManiaPlayfield.cs @@ -7,10 +7,11 @@ using osu.Game.Modes.Mania.Objects; using osu.Game.Modes.UI; using OpenTK; using OpenTK.Graphics; +using osu.Game.Modes.Mania.Judgements; namespace osu.Game.Modes.Mania.UI { - public class ManiaPlayfield : Playfield + public class ManiaPlayfield : Playfield { public ManiaPlayfield(int columns) { diff --git a/osu.Game.Modes.Mania/osu.Game.Modes.Mania.csproj b/osu.Game.Modes.Mania/osu.Game.Modes.Mania.csproj index 48f8d23a07..d1b9e2971f 100644 --- a/osu.Game.Modes.Mania/osu.Game.Modes.Mania.csproj +++ b/osu.Game.Modes.Mania/osu.Game.Modes.Mania.csproj @@ -48,6 +48,7 @@ + diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs index be237a22f4..60f2c130c9 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -7,7 +7,7 @@ using osu.Game.Modes.Objects.Drawables; namespace osu.Game.Modes.Osu.Objects.Drawables { - public class DrawableOsuHitObject : DrawableHitObject + public class DrawableOsuHitObject : DrawableHitObject { public const float TIME_PREEMPT = 600; public const float TIME_FADEIN = 400; @@ -18,7 +18,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables { } - protected override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.Hit300 }; + protected override OsuJudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.Hit300 }; protected override void UpdateState(ArmedState state) { diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs index acda9da62f..7d74463107 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -27,7 +27,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables public override bool RemoveWhenNotAlive => false; - protected override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.SliderTick }; + protected override OsuJudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.SliderTick }; public DrawableSliderTick(SliderTick sliderTick) : base(sliderTick) { diff --git a/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs b/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs index 51433df4af..c5d729e76f 100644 --- a/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs +++ b/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs @@ -11,7 +11,7 @@ using osu.Game.Screens.Play; namespace osu.Game.Modes.Osu.UI { - public class OsuHitRenderer : HitRenderer + public class OsuHitRenderer : HitRenderer { public OsuHitRenderer(WorkingBeatmap beatmap) : base(beatmap) @@ -20,11 +20,11 @@ namespace osu.Game.Modes.Osu.UI protected override IBeatmapConverter CreateBeatmapConverter() => new OsuBeatmapConverter(); - protected override Playfield CreatePlayfield() => new OsuPlayfield(); + protected override Playfield CreatePlayfield() => new OsuPlayfield(); protected override KeyConversionInputManager CreateKeyConversionInputManager() => new OsuKeyConversionInputManager(); - protected override DrawableHitObject GetVisualRepresentation(OsuHitObject h) + protected override DrawableHitObject GetVisualRepresentation(OsuHitObject h) { var circle = h as HitCircle; if (circle != null) diff --git a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs index ab19a92212..4b890b61b3 100644 --- a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs +++ b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs @@ -13,10 +13,11 @@ using System.Linq; using osu.Game.Graphics.Cursor; using osu.Game.Modes.Judgements; using OpenTK.Graphics; +using System; namespace osu.Game.Modes.Osu.UI { - public class OsuPlayfield : Playfield + public class OsuPlayfield : Playfield { private Container approachCircles; private Container judgementLayer; @@ -66,16 +67,13 @@ namespace osu.Game.Modes.Osu.UI AddInternal(new OsuCursorContainer { Colour = Color4.LightYellow }); } - public override void Add(DrawableHitObject h) + public override void Add(DrawableHitObject h) { h.Depth = (float)h.HitObject.StartTime; + IDrawableHitObjectWithProxiedApproach c = h as IDrawableHitObjectWithProxiedApproach; if (c != null) - { approachCircles.Add(c.ProxiedLayer.CreateProxy()); - } - - h.OnJudgement += judgement; base.Add(h); } @@ -87,9 +85,9 @@ namespace osu.Game.Modes.Osu.UI .OrderBy(h => h.StartTime); } - private void judgement(DrawableHitObject h, JudgementInfo j) + public override void OnJudgement(DrawableHitObject judgedObject) { - HitExplosion explosion = new HitExplosion((OsuJudgementInfo)j, h.HitObject); + HitExplosion explosion = new HitExplosion(judgedObject.Judgement, judgedObject.HitObject); judgementLayer.Add(explosion); } diff --git a/osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs b/osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs new file mode 100644 index 0000000000..509b85ad91 --- /dev/null +++ b/osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs @@ -0,0 +1,13 @@ +using osu.Game.Modes.Judgements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace osu.Game.Modes.Taiko.Judgements +{ + public class TaikoJudgementInfo : JudgementInfo + { + } +} diff --git a/osu.Game.Modes.Taiko/UI/TaikoHitRenderer.cs b/osu.Game.Modes.Taiko/UI/TaikoHitRenderer.cs index fb5e38d4dc..fe1e5b5804 100644 --- a/osu.Game.Modes.Taiko/UI/TaikoHitRenderer.cs +++ b/osu.Game.Modes.Taiko/UI/TaikoHitRenderer.cs @@ -4,12 +4,13 @@ using osu.Game.Beatmaps; using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Taiko.Beatmaps; +using osu.Game.Modes.Taiko.Judgements; using osu.Game.Modes.Taiko.Objects; using osu.Game.Modes.UI; namespace osu.Game.Modes.Taiko.UI { - public class TaikoHitRenderer : HitRenderer + public class TaikoHitRenderer : HitRenderer { public TaikoHitRenderer(WorkingBeatmap beatmap) : base(beatmap) @@ -18,8 +19,8 @@ namespace osu.Game.Modes.Taiko.UI protected override IBeatmapConverter CreateBeatmapConverter() => new TaikoBeatmapConverter(); - protected override Playfield CreatePlayfield() => new TaikoPlayfield(); + protected override Playfield CreatePlayfield() => new TaikoPlayfield(); - protected override DrawableHitObject GetVisualRepresentation(TaikoBaseHit h) => null;// new DrawableTaikoHit(h); + protected override DrawableHitObject GetVisualRepresentation(TaikoBaseHit h) => null;// new DrawableTaikoHit(h); } } diff --git a/osu.Game.Modes.Taiko/UI/TaikoPlayfield.cs b/osu.Game.Modes.Taiko/UI/TaikoPlayfield.cs index 2fcfce4fa3..d80aa94fa1 100644 --- a/osu.Game.Modes.Taiko/UI/TaikoPlayfield.cs +++ b/osu.Game.Modes.Taiko/UI/TaikoPlayfield.cs @@ -9,10 +9,11 @@ using osu.Game.Modes.Taiko.Objects; using osu.Game.Modes.UI; using OpenTK; using OpenTK.Graphics; +using osu.Game.Modes.Taiko.Judgements; namespace osu.Game.Modes.Taiko.UI { - public class TaikoPlayfield : Playfield + public class TaikoPlayfield : Playfield { public TaikoPlayfield() { diff --git a/osu.Game.Modes.Taiko/osu.Game.Modes.Taiko.csproj b/osu.Game.Modes.Taiko/osu.Game.Modes.Taiko.csproj index 7d6bcf4853..0a72c663e3 100644 --- a/osu.Game.Modes.Taiko/osu.Game.Modes.Taiko.csproj +++ b/osu.Game.Modes.Taiko/osu.Game.Modes.Taiko.csproj @@ -48,6 +48,7 @@ + diff --git a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs index a7f3a1534b..2963c84493 100644 --- a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs @@ -14,11 +14,16 @@ using Container = osu.Framework.Graphics.Containers.Container; namespace osu.Game.Modes.Objects.Drawables { - public abstract class DrawableHitObject : Container, IStateful + public abstract class DrawableHitObject : Container, IStateful + where TJudgement : JudgementInfo { - public JudgementInfo Judgement; + public override bool HandleInput => Interactive; - protected abstract JudgementInfo CreateJudgementInfo(); + public bool Interactive = true; + + public TJudgement Judgement; + + protected abstract TJudgement CreateJudgementInfo(); protected abstract void UpdateState(ArmedState state); @@ -63,10 +68,11 @@ namespace osu.Game.Modes.Objects.Drawables } } - public abstract class DrawableHitObject : DrawableHitObject + public abstract class DrawableHitObject : DrawableHitObject where TObject : HitObject + where TJudgement : JudgementInfo { - public event Action, JudgementInfo> OnJudgement; + public event Action> OnJudgement; public TObject HitObject; @@ -101,7 +107,7 @@ namespace osu.Game.Modes.Objects.Drawables break; } - OnJudgement?.Invoke(this, Judgement); + OnJudgement?.Invoke(this); return true; } @@ -134,16 +140,16 @@ namespace osu.Game.Modes.Objects.Drawables Sample = audio.Sample.Get($@"Gameplay/{sampleSet.ToString().ToLower()}-hit{type.ToString().ToLower()}"); } - private List> nestedHitObjects; + private List> nestedHitObjects; - protected IEnumerable> NestedHitObjects => nestedHitObjects; + protected IEnumerable> NestedHitObjects => nestedHitObjects; - protected void AddNested(DrawableHitObject h) + protected void AddNested(DrawableHitObject h) { if (nestedHitObjects == null) - nestedHitObjects = new List>(); + nestedHitObjects = new List>(); - h.OnJudgement += (d, j) => { OnJudgement?.Invoke(d, j); } ; + h.OnJudgement += d => OnJudgement?.Invoke(d); nestedHitObjects.Add(h); } } diff --git a/osu.Game/Modes/UI/HitRenderer.cs b/osu.Game/Modes/UI/HitRenderer.cs index 6b2bd55a7d..6d576b63f3 100644 --- a/osu.Game/Modes/UI/HitRenderer.cs +++ b/osu.Game/Modes/UI/HitRenderer.cs @@ -52,13 +52,6 @@ namespace osu.Game.Modes.UI { public Beatmap Beatmap; - protected override Container Content => content; - protected override bool AllObjectsJudged => Playfield.HitObjects.Children.All(h => h.Judgement.Result.HasValue); - - protected Playfield Playfield; - - private Container content; - protected HitRenderer(WorkingBeatmap beatmap) { Beatmap = CreateBeatmapConverter().Convert(beatmap.Beatmap); @@ -66,7 +59,34 @@ namespace osu.Game.Modes.UI applyMods(beatmap.Mods.Value); RelativeSizeAxes = Axes.Both; + } + private void applyMods(IEnumerable mods) + { + if (mods == null) + return; + + foreach (var mod in mods.OfType>()) + mod.Apply(this); + } + + protected abstract IBeatmapConverter CreateBeatmapConverter(); + } + + public abstract class HitRenderer : HitRenderer + where TObject : HitObject + where TJudgement : JudgementInfo + { + protected override Container Content => content; + protected override bool AllObjectsJudged => Playfield.HitObjects.Children.All(h => h.Judgement.Result.HasValue); + + protected Playfield Playfield; + + private Container content; + + protected HitRenderer(WorkingBeatmap beatmap) + : base(beatmap) + { KeyConversionInputManager.Add(Playfield = CreatePlayfield()); InputManager.Add(content = new Container @@ -91,7 +111,7 @@ namespace osu.Game.Modes.UI { foreach (TObject h in Beatmap.HitObjects) { - DrawableHitObject drawableObject = GetVisualRepresentation(h); + var drawableObject = GetVisualRepresentation(h); if (drawableObject == null) continue; @@ -104,19 +124,13 @@ namespace osu.Game.Modes.UI Playfield.PostProcess(); } - private void applyMods(IEnumerable mods) + private void onJudgement(DrawableHitObject j) { - if (mods == null) - return; - - foreach (var mod in mods.OfType>()) - mod.Apply(this); + TriggerOnJudgement(j.Judgement); + Playfield.OnJudgement(j); } - private void onJudgement(DrawableHitObject o, JudgementInfo j) => TriggerOnJudgement(j); - - protected abstract DrawableHitObject GetVisualRepresentation(TObject h); - protected abstract Playfield CreatePlayfield(); - protected abstract IBeatmapConverter CreateBeatmapConverter(); + protected abstract DrawableHitObject GetVisualRepresentation(TObject h); + protected abstract Playfield CreatePlayfield(); } } diff --git a/osu.Game/Modes/UI/Playfield.cs b/osu.Game/Modes/UI/Playfield.cs index 0cc7b0468e..ba12fa4abf 100644 --- a/osu.Game/Modes/UI/Playfield.cs +++ b/osu.Game/Modes/UI/Playfield.cs @@ -6,15 +6,17 @@ using osu.Framework.Graphics.Containers; using osu.Game.Modes.Objects; using osu.Game.Modes.Objects.Drawables; using OpenTK; +using osu.Game.Modes.Judgements; namespace osu.Game.Modes.UI { - public abstract class Playfield : Container - where T : HitObject + public abstract class Playfield : Container + where TObject : HitObject + where TJudgement : JudgementInfo { - public HitObjectContainer> HitObjects; + public HitObjectContainer> HitObjects; - public virtual void Add(DrawableHitObject h) => HitObjects.Add(h); + public virtual void Add(DrawableHitObject h) => HitObjects.Add(h); internal Container ScaledContent; @@ -43,7 +45,7 @@ namespace osu.Game.Modes.UI } }); - Add(HitObjects = new HitObjectContainer> + Add(HitObjects = new HitObjectContainer> { RelativeSizeAxes = Axes.Both, }); @@ -70,5 +72,7 @@ namespace osu.Game.Modes.UI { public override bool Contains(Vector2 screenSpacePos) => true; } + + public virtual void OnJudgement(DrawableHitObject judgedObject) { } } } From a9bc253b8c4230c1ffd8c6941bf52ab6df2c3368 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Wed, 15 Mar 2017 18:58:41 +0900 Subject: [PATCH 04/10] General refactoring (no more casts :D). --- .../Judgements/CatchJudgementInfo.cs | 5 -- .../Judgements/ManiaJudgementInfo.cs | 5 -- .../Objects/Drawables/DrawableHitCircle.cs | 6 +- .../Objects/Drawables/DrawableOsuHitObject.cs | 1 - .../Objects/Drawables/DrawableSlider.cs | 19 ++--- .../Objects/Drawables/DrawableSliderTick.cs | 7 +- .../Objects/Drawables/DrawableSpinner.cs | 18 ++--- osu.Game.Modes.Osu/UI/OsuPlayfield.cs | 2 - .../Judgements/TaikoJudgementInfo.cs | 5 -- osu.Game/Modes/ScoreProcesssor.cs | 1 - osu.Game/Modes/UI/HitRenderer.cs | 74 +++++++++++++++++-- osu.Game/Modes/UI/Playfield.cs | 30 +++++--- 12 files changed, 108 insertions(+), 65 deletions(-) diff --git a/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs b/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs index e560091d2d..eea85b1cb9 100644 --- a/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs +++ b/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs @@ -1,9 +1,4 @@ using osu.Game.Modes.Judgements; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace osu.Game.Modes.Catch.Judgements { diff --git a/osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs b/osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs index 1b587e4ae1..f724979e75 100644 --- a/osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs +++ b/osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs @@ -1,9 +1,4 @@ using osu.Game.Modes.Judgements; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace osu.Game.Modes.Mania.Judgements { diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs index e10fa91e6f..c2717f2d3d 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs @@ -44,7 +44,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables { if (Judgement.Result.HasValue) return false; - ((PositionalJudgementInfo)Judgement).PositionOffset = Vector2.Zero; //todo: set to correct value + Judgement.PositionOffset = Vector2.Zero; //todo: set to correct value UpdateJudgement(true); return true; }, @@ -80,12 +80,10 @@ namespace osu.Game.Modes.Osu.Objects.Drawables double hitOffset = Math.Abs(Judgement.TimeOffset); - OsuJudgementInfo osuJudgement = (OsuJudgementInfo)Judgement; - if (hitOffset < HitObject.HitWindowFor(OsuScoreResult.Hit50)) { Judgement.Result = HitResult.Hit; - osuJudgement.Score = HitObject.ScoreResultForOffset(hitOffset); + Judgement.Score = HitObject.ScoreResultForOffset(hitOffset); } else Judgement.Result = HitResult.Miss; diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs index 60f2c130c9..b9003a3207 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.ComponentModel; -using osu.Game.Modes.Judgements; using osu.Game.Modes.Objects.Drawables; namespace osu.Game.Modes.Osu.Objects.Drawables diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSlider.cs index 94c150bd3e..49aaa893e2 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSlider.cs @@ -125,27 +125,24 @@ namespace osu.Game.Modes.Osu.Objects.Drawables protected override void CheckJudgement(bool userTriggered) { - var j = (OsuJudgementInfo)Judgement; - var sc = (OsuJudgementInfo)initialCircle.Judgement; - if (!userTriggered && Time.Current >= HitObject.EndTime) { var ticksCount = ticks.Children.Count() + 1; var ticksHit = ticks.Children.Count(t => t.Judgement.Result == HitResult.Hit); - if (sc.Result == HitResult.Hit) + if (initialCircle.Judgement.Result == HitResult.Hit) ticksHit++; var hitFraction = (double)ticksHit / ticksCount; - if (hitFraction == 1 && sc.Score == OsuScoreResult.Hit300) - j.Score = OsuScoreResult.Hit300; - else if (hitFraction >= 0.5 && sc.Score >= OsuScoreResult.Hit100) - j.Score = OsuScoreResult.Hit100; + if (hitFraction == 1 && initialCircle.Judgement.Score == OsuScoreResult.Hit300) + Judgement.Score = OsuScoreResult.Hit300; + else if (hitFraction >= 0.5 && initialCircle.Judgement.Score >= OsuScoreResult.Hit100) + Judgement.Score = OsuScoreResult.Hit100; else if (hitFraction > 0) - j.Score = OsuScoreResult.Hit50; + Judgement.Score = OsuScoreResult.Hit50; else - j.Score = OsuScoreResult.Miss; + Judgement.Score = OsuScoreResult.Miss; - j.Result = j.Score != OsuScoreResult.Miss ? HitResult.Hit : HitResult.Miss; + Judgement.Result = Judgement.Score != OsuScoreResult.Miss ? HitResult.Hit : HitResult.Miss; } } diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs index 7d74463107..87d0babef2 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Transforms; using osu.Game.Beatmaps.Samples; -using osu.Game.Modes.Judgements; using osu.Game.Modes.Objects.Drawables; using OpenTK; using OpenTK.Graphics; @@ -72,12 +71,10 @@ namespace osu.Game.Modes.Osu.Objects.Drawables protected override void CheckJudgement(bool userTriggered) { - var j = (OsuJudgementInfo)Judgement; - if (Judgement.TimeOffset >= 0) { - j.Result = Tracking ? HitResult.Hit : HitResult.Miss; - j.Score = Tracking ? OsuScoreResult.SliderTick : OsuScoreResult.Miss; + Judgement.Result = Tracking ? HitResult.Hit : HitResult.Miss; + Judgement.Score = Tracking ? OsuScoreResult.SliderTick : OsuScoreResult.Miss; } } diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSpinner.cs index cfebd11809..530062da93 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSpinner.cs @@ -75,8 +75,6 @@ namespace osu.Game.Modes.Osu.Objects.Drawables { if (Time.Current < HitObject.StartTime) return; - var j = (OsuJudgementInfo)Judgement; - disc.ScaleTo(Interpolation.ValueAt(Math.Sqrt(Progress), scaleToCircle, Vector2.One, 0, 1), 100); if (Progress >= 1) @@ -86,24 +84,24 @@ namespace osu.Game.Modes.Osu.Objects.Drawables { if (Progress >= 1) { - j.Score = OsuScoreResult.Hit300; - j.Result = HitResult.Hit; + Judgement.Score = OsuScoreResult.Hit300; + Judgement.Result = HitResult.Hit; } else if (Progress > .9) { - j.Score = OsuScoreResult.Hit100; - j.Result = HitResult.Hit; + Judgement.Score = OsuScoreResult.Hit100; + Judgement.Result = HitResult.Hit; } else if (Progress > .75) { - j.Score = OsuScoreResult.Hit50; - j.Result = HitResult.Hit; + Judgement.Score = OsuScoreResult.Hit50; + Judgement.Result = HitResult.Hit; } else { - j.Score = OsuScoreResult.Miss; + Judgement.Score = OsuScoreResult.Miss; if (Time.Current >= HitObject.EndTime) - j.Result = HitResult.Miss; + Judgement.Result = HitResult.Miss; } } } diff --git a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs index 4b890b61b3..dd023b1cc1 100644 --- a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs +++ b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs @@ -11,9 +11,7 @@ using osu.Game.Modes.Osu.Objects.Drawables.Connections; using osu.Game.Modes.UI; using System.Linq; using osu.Game.Graphics.Cursor; -using osu.Game.Modes.Judgements; using OpenTK.Graphics; -using System; namespace osu.Game.Modes.Osu.UI { diff --git a/osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs b/osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs index 509b85ad91..499e0a62b8 100644 --- a/osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs +++ b/osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs @@ -1,9 +1,4 @@ using osu.Game.Modes.Judgements; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace osu.Game.Modes.Taiko.Judgements { diff --git a/osu.Game/Modes/ScoreProcesssor.cs b/osu.Game/Modes/ScoreProcesssor.cs index 0fb9ddba0c..c7a882cfab 100644 --- a/osu.Game/Modes/ScoreProcesssor.cs +++ b/osu.Game/Modes/ScoreProcesssor.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Configuration; -using osu.Game.Modes.Objects.Drawables; using System; using System.Collections.Generic; using osu.Game.Modes.Judgements; diff --git a/osu.Game/Modes/UI/HitRenderer.cs b/osu.Game/Modes/UI/HitRenderer.cs index 6d576b63f3..e962ec53bd 100644 --- a/osu.Game/Modes/UI/HitRenderer.cs +++ b/osu.Game/Modes/UI/HitRenderer.cs @@ -16,15 +16,36 @@ using osu.Game.Modes.Judgements; namespace osu.Game.Modes.UI { + /// + /// Base HitRenderer. Doesn't hold objects, should not be derived. + /// public abstract class HitRenderer : Container { + /// + /// The event that's fired when a hit object is judged. + /// public event Action OnJudgement; + + /// + /// The event that's fired when all hit objects have been judged. + /// public event Action OnAllJudged; + /// + /// The input manager for this HitRenderer. + /// internal readonly PlayerInputManager InputManager = new PlayerInputManager(); + /// + /// The key conversion input manager for this HitRenderer. + /// protected readonly KeyConversionInputManager KeyConversionInputManager; + /// + /// Whether all the HitObjects have been judged. + /// + protected abstract bool AllObjectsJudged { get; } + protected HitRenderer() { KeyConversionInputManager = CreateKeyConversionInputManager(); @@ -32,10 +53,9 @@ namespace osu.Game.Modes.UI } /// - /// Whether all the HitObjects have been judged. + /// Triggers a judgement for further processing. /// - protected abstract bool AllObjectsJudged { get; } - + /// The judgement to trigger. protected void TriggerOnJudgement(JudgementInfo j) { OnJudgement?.Invoke(j); @@ -44,12 +64,24 @@ namespace osu.Game.Modes.UI OnAllJudged?.Invoke(); } + /// + /// Creates a key conversion input manager. + /// + /// The input manager. protected virtual KeyConversionInputManager CreateKeyConversionInputManager() => new KeyConversionInputManager(); } + /// + /// HitRenderer that applies conversion to Beatmaps. Does not contain a Playfield + /// and does not load drawable hit objects. + /// + /// The type of HitObject contained by this HitRenderer. public abstract class HitRenderer : HitRenderer where TObject : HitObject { + /// + /// The Beatmap + /// public Beatmap Beatmap; protected HitRenderer(WorkingBeatmap beatmap) @@ -61,6 +93,10 @@ namespace osu.Game.Modes.UI RelativeSizeAxes = Axes.Both; } + /// + /// Applies the active mods to this HitRenderer. + /// + /// private void applyMods(IEnumerable mods) { if (mods == null) @@ -70,9 +106,18 @@ namespace osu.Game.Modes.UI mod.Apply(this); } + /// + /// Creates a converter to convert Beatmap to a specific mode. + /// + /// The Beatmap converter. protected abstract IBeatmapConverter CreateBeatmapConverter(); } + /// + /// A derivable HitRenderer that manages the Playfield and HitObjects. + /// + /// The type of HitObject contained by this HitRenderer. + /// The type of Judgement of DrawableHitObjects contained by this HitRenderer. public abstract class HitRenderer : HitRenderer where TObject : HitObject where TJudgement : JudgementInfo @@ -80,6 +125,9 @@ namespace osu.Game.Modes.UI protected override Container Content => content; protected override bool AllObjectsJudged => Playfield.HitObjects.Children.All(h => h.Judgement.Result.HasValue); + /// + /// The playfield. + /// protected Playfield Playfield; private Container content; @@ -124,13 +172,27 @@ namespace osu.Game.Modes.UI Playfield.PostProcess(); } - private void onJudgement(DrawableHitObject j) + /// + /// Triggered when an object's Judgement is updated. + /// + /// The object that Judgement has been updated for. + private void onJudgement(DrawableHitObject judgedObject) { - TriggerOnJudgement(j.Judgement); - Playfield.OnJudgement(j); + TriggerOnJudgement(judgedObject.Judgement); + Playfield.OnJudgement(judgedObject); } + /// + /// Creates a DrawableHitObject from a HitObject. + /// + /// The HitObject to make drawable. + /// The DrawableHitObject. protected abstract DrawableHitObject GetVisualRepresentation(TObject h); + + /// + /// Creates a Playfield. + /// + /// The Playfield. protected abstract Playfield CreatePlayfield(); } } diff --git a/osu.Game/Modes/UI/Playfield.cs b/osu.Game/Modes/UI/Playfield.cs index ba12fa4abf..288b4bf352 100644 --- a/osu.Game/Modes/UI/Playfield.cs +++ b/osu.Game/Modes/UI/Playfield.cs @@ -14,16 +14,15 @@ namespace osu.Game.Modes.UI where TObject : HitObject where TJudgement : JudgementInfo { + /// + /// The HitObjects contained in this Playfield. + /// public HitObjectContainer> HitObjects; - - public virtual void Add(DrawableHitObject h) => HitObjects.Add(h); + public override bool Contains(Vector2 screenSpacePos) => true; internal Container ScaledContent; - public override bool Contains(Vector2 screenSpacePos) => true; - protected override Container Content => content; - private Container content; /// @@ -51,9 +50,22 @@ namespace osu.Game.Modes.UI }); } - public virtual void PostProcess() - { - } + /// + /// Performs post-processing tasks (if any) after all DrawableHitObjects are loaded into this Playfield. + /// + public virtual void PostProcess() { } + + /// + /// Adds a DrawableHitObject to this Playfield. + /// + /// The DrawableHitObject to add. + public virtual void Add(DrawableHitObject h) => HitObjects.Add(h); + + /// + /// Triggered when an object's Judgement is updated. + /// + /// The object that Judgement has been updated for. + public virtual void OnJudgement(DrawableHitObject judgedObject) { } private class ScaledContainer : Container { @@ -72,7 +84,5 @@ namespace osu.Game.Modes.UI { public override bool Contains(Vector2 screenSpacePos) => true; } - - public virtual void OnJudgement(DrawableHitObject judgedObject) { } } } From e0e0a2726d475898a226dd0f2da0f60c44240526 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Wed, 15 Mar 2017 19:23:42 +0900 Subject: [PATCH 05/10] Move OsuJudgementInfo to its own class, remove PositionalJudgementInfo. --- .../Tests/TestCaseHitObjects.cs | 1 + .../Judgements/OsuJudgementInfo.cs | 47 +++++++++++++++++++ .../Objects/Drawables/DrawableOsuHitObject.cs | 37 +-------------- .../Objects/Drawables/DrawableSliderTick.cs | 1 + .../Objects/Drawables/HitExplosion.cs | 1 + osu.Game.Modes.Osu/OsuScoreProcessor.cs | 2 +- osu.Game.Modes.Osu/UI/OsuHitRenderer.cs | 1 + osu.Game.Modes.Osu/UI/OsuPlayfield.cs | 1 + osu.Game.Modes.Osu/osu.Game.Modes.Osu.csproj | 1 + .../Objects/Drawables/DrawableHitObject.cs | 6 --- 10 files changed, 55 insertions(+), 43 deletions(-) create mode 100644 osu.Game.Modes.Osu/Judgements/OsuJudgementInfo.cs diff --git a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs index 01c10489d7..b5c7ddeb27 100644 --- a/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs +++ b/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs @@ -13,6 +13,7 @@ using osu.Game.Modes.Osu.Objects.Drawables; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.UserInterface; +using osu.Game.Modes.Osu.Judgements; using OpenTK.Graphics; namespace osu.Desktop.VisualTests.Tests diff --git a/osu.Game.Modes.Osu/Judgements/OsuJudgementInfo.cs b/osu.Game.Modes.Osu/Judgements/OsuJudgementInfo.cs new file mode 100644 index 0000000000..9cbb8bfd1c --- /dev/null +++ b/osu.Game.Modes.Osu/Judgements/OsuJudgementInfo.cs @@ -0,0 +1,47 @@ +using OpenTK; +using osu.Game.Modes.Judgements; +using osu.Game.Modes.Osu.Objects.Drawables; + +namespace osu.Game.Modes.Osu.Judgements +{ + public class OsuJudgementInfo : JudgementInfo + { + /// + /// The positional hit offset. + /// + public Vector2 PositionOffset; + + /// + /// The score the user achieved. + /// + public OsuScoreResult Score; + + /// + /// The score which would be achievable on a perfect hit. + /// + public OsuScoreResult MaxScore = OsuScoreResult.Hit300; + + public int ScoreValue => scoreToInt(Score); + + public int MaxScoreValue => scoreToInt(MaxScore); + + private int scoreToInt(OsuScoreResult result) + { + switch (result) + { + default: + return 0; + case OsuScoreResult.Hit50: + return 50; + case OsuScoreResult.Hit100: + return 100; + case OsuScoreResult.Hit300: + return 300; + case OsuScoreResult.SliderTick: + return 10; + } + } + + public ComboResult Combo; + } +} \ No newline at end of file diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs index b9003a3207..5e6249d66f 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using osu.Game.Modes.Objects.Drawables; +using osu.Game.Modes.Osu.Judgements; namespace osu.Game.Modes.Osu.Objects.Drawables { @@ -45,42 +46,6 @@ namespace osu.Game.Modes.Osu.Objects.Drawables } } - public class OsuJudgementInfo : PositionalJudgementInfo - { - /// - /// The score the user achieved. - /// - public OsuScoreResult Score; - - /// - /// The score which would be achievable on a perfect hit. - /// - public OsuScoreResult MaxScore = OsuScoreResult.Hit300; - - public int ScoreValue => scoreToInt(Score); - - public int MaxScoreValue => scoreToInt(MaxScore); - - private int scoreToInt(OsuScoreResult result) - { - switch (result) - { - default: - return 0; - case OsuScoreResult.Hit50: - return 50; - case OsuScoreResult.Hit100: - return 100; - case OsuScoreResult.Hit300: - return 300; - case OsuScoreResult.SliderTick: - return 10; - } - } - - public ComboResult Combo; - } - public enum ComboResult { [Description(@"")] diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs index 87d0babef2..4ef4d18bfc 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -10,6 +10,7 @@ using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Transforms; using osu.Game.Beatmaps.Samples; using osu.Game.Modes.Objects.Drawables; +using osu.Game.Modes.Osu.Judgements; using OpenTK; using OpenTK.Graphics; diff --git a/osu.Game.Modes.Osu/Objects/Drawables/HitExplosion.cs b/osu.Game.Modes.Osu/Objects/Drawables/HitExplosion.cs index 39a7862db6..ab34d49ecf 100644 --- a/osu.Game.Modes.Osu/Objects/Drawables/HitExplosion.cs +++ b/osu.Game.Modes.Osu/Objects/Drawables/HitExplosion.cs @@ -8,6 +8,7 @@ using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Transforms; using osu.Game.Graphics.Sprites; using osu.Game.Modes.Objects.Drawables; +using osu.Game.Modes.Osu.Judgements; using OpenTK; using OpenTK.Graphics; diff --git a/osu.Game.Modes.Osu/OsuScoreProcessor.cs b/osu.Game.Modes.Osu/OsuScoreProcessor.cs index 2377e2f520..425c454dc7 100644 --- a/osu.Game.Modes.Osu/OsuScoreProcessor.cs +++ b/osu.Game.Modes.Osu/OsuScoreProcessor.cs @@ -3,7 +3,7 @@ using osu.Game.Modes.Judgements; using osu.Game.Modes.Objects.Drawables; -using osu.Game.Modes.Osu.Objects.Drawables; +using osu.Game.Modes.Osu.Judgements; namespace osu.Game.Modes.Osu { diff --git a/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs b/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs index c5d729e76f..0169e9a0e6 100644 --- a/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs +++ b/osu.Game.Modes.Osu/UI/OsuHitRenderer.cs @@ -4,6 +4,7 @@ using osu.Game.Beatmaps; using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Osu.Beatmaps; +using osu.Game.Modes.Osu.Judgements; using osu.Game.Modes.Osu.Objects; using osu.Game.Modes.Osu.Objects.Drawables; using osu.Game.Modes.UI; diff --git a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs index dd023b1cc1..7f7ec2d161 100644 --- a/osu.Game.Modes.Osu/UI/OsuPlayfield.cs +++ b/osu.Game.Modes.Osu/UI/OsuPlayfield.cs @@ -11,6 +11,7 @@ using osu.Game.Modes.Osu.Objects.Drawables.Connections; using osu.Game.Modes.UI; using System.Linq; using osu.Game.Graphics.Cursor; +using osu.Game.Modes.Osu.Judgements; using OpenTK.Graphics; namespace osu.Game.Modes.Osu.UI diff --git a/osu.Game.Modes.Osu/osu.Game.Modes.Osu.csproj b/osu.Game.Modes.Osu/osu.Game.Modes.Osu.csproj index f2c6efd8bd..91ca01c4c8 100644 --- a/osu.Game.Modes.Osu/osu.Game.Modes.Osu.csproj +++ b/osu.Game.Modes.Osu/osu.Game.Modes.Osu.csproj @@ -49,6 +49,7 @@ + diff --git a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs index 2963c84493..fd728706cb 100644 --- a/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Modes/Objects/Drawables/DrawableHitObject.cs @@ -9,7 +9,6 @@ using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Game.Beatmaps.Samples; using osu.Game.Modes.Judgements; -using OpenTK; using Container = osu.Framework.Graphics.Containers.Container; namespace osu.Game.Modes.Objects.Drawables @@ -153,9 +152,4 @@ namespace osu.Game.Modes.Objects.Drawables nestedHitObjects.Add(h); } } - - public class PositionalJudgementInfo : JudgementInfo - { - public Vector2 PositionOffset; - } } From 3a8d1d3619e017e10bf4c5c7589fea3b3501df05 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Wed, 15 Mar 2017 21:32:47 +0900 Subject: [PATCH 06/10] Add license headers. --- osu.Game.Modes.Catch/Beatmaps/CatchBeatmapConverter.cs | 1 - osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs | 5 ++++- osu.Game.Modes.Catch/packages.config | 1 - osu.Game.Modes.Mania/Judgements/ManiaJudgementInfo.cs | 5 ++++- osu.Game.Modes.Mania/packages.config | 1 - osu.Game.Modes.Osu/Beatmaps/OsuBeatmapConverter.cs | 1 - osu.Game.Modes.Osu/Judgements/OsuJudgementInfo.cs | 5 ++++- osu.Game.Modes.Osu/packages.config | 1 - osu.Game.Modes.Taiko/Judgements/TaikoJudgementInfo.cs | 5 ++++- osu.Game.Modes.Taiko/packages.config | 1 - osu.Game/Modes/Judgements/JudgementInfo.cs | 5 ++++- osu.Game/Modes/Mods/IApplicableMod.cs | 1 - osu.Game/Modes/Objects/Drawables/ArmedState.cs | 3 +++ osu.Game/Modes/Objects/Drawables/HitResult.cs | 3 +++ osu.Game/Modes/UI/StandardHealthDisplay.cs | 1 - osu.Game/packages.config | 1 - 16 files changed, 26 insertions(+), 14 deletions(-) diff --git a/osu.Game.Modes.Catch/Beatmaps/CatchBeatmapConverter.cs b/osu.Game.Modes.Catch/Beatmaps/CatchBeatmapConverter.cs index 6460751570..9791554f02 100644 --- a/osu.Game.Modes.Catch/Beatmaps/CatchBeatmapConverter.cs +++ b/osu.Game.Modes.Catch/Beatmaps/CatchBeatmapConverter.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - using osu.Game.Beatmaps; using osu.Game.Modes.Catch.Objects; using System.Collections.Generic; diff --git a/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs b/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs index eea85b1cb9..33e84d2f97 100644 --- a/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs +++ b/osu.Game.Modes.Catch/Judgements/CatchJudgementInfo.cs @@ -1,4 +1,7 @@ -using osu.Game.Modes.Judgements; +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Game.Modes.Judgements; namespace osu.Game.Modes.Catch.Judgements { diff --git a/osu.Game.Modes.Catch/packages.config b/osu.Game.Modes.Catch/packages.config index 08fca09c35..4031dd62a8 100644 --- a/osu.Game.Modes.Catch/packages.config +++ b/osu.Game.Modes.Catch/packages.config @@ -1,5 +1,4 @@  -