Move implementation of HitRender.Converter to base class using an abstract Converter property.

This commit is contained in:
Huo Yaoyuan 2016-10-13 21:14:18 +08:00
parent 80d5fa7243
commit 45a9249306
5 changed files with 19 additions and 17 deletions

View File

@ -1,7 +1,6 @@
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>. //Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.Collections.Generic;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Beatmaps.Objects; using osu.Game.Beatmaps.Objects;
using osu.Game.Beatmaps.Objects.Catch; using osu.Game.Beatmaps.Objects.Catch;
@ -11,9 +10,11 @@ namespace osu.Game.GameModes.Play.Catch
{ {
public class CatchHitRenderer : HitRenderer<CatchBaseHit> public class CatchHitRenderer : HitRenderer<CatchBaseHit>
{ {
protected override Playfield CreatePlayfield() => new CatchPlayfield(); private static readonly CatchConverter converter = new CatchConverter();
protected override List<CatchBaseHit> Convert(List<HitObject> objects) => new CatchConverter().Convert(objects); protected override HitObjectConverter<CatchBaseHit> Converter => converter;
protected override Playfield CreatePlayfield() => new CatchPlayfield();
protected override Drawable GetVisualRepresentation(CatchBaseHit h) => new DrawableFruit(h); protected override Drawable GetVisualRepresentation(CatchBaseHit h) => new DrawableFruit(h);
} }

View File

@ -10,6 +10,7 @@ using osu.Framework;
namespace osu.Game.GameModes.Play namespace osu.Game.GameModes.Play
{ {
public abstract class HitRenderer<T> : Container public abstract class HitRenderer<T> : Container
where T : HitObject
{ {
private List<T> objects; private List<T> objects;
@ -27,7 +28,9 @@ namespace osu.Game.GameModes.Play
protected abstract Playfield CreatePlayfield(); protected abstract Playfield CreatePlayfield();
protected abstract List<T> Convert(List<HitObject> objects); protected abstract HitObjectConverter<T> Converter { get; }
protected virtual List<T> Convert(List<HitObject> objects) => Converter.Convert(objects);
public override void Load(BaseGame game) public override void Load(BaseGame game)
{ {

View File

@ -1,12 +1,11 @@
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>. //Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using OpenTK;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Beatmaps.Objects; using osu.Game.Beatmaps.Objects;
using osu.Game.Beatmaps.Objects.Mania; using osu.Game.Beatmaps.Objects.Mania;
using OpenTK;
using osu.Game.Beatmaps.Objects.Mania.Drawable; using osu.Game.Beatmaps.Objects.Mania.Drawable;
using System.Collections.Generic;
namespace osu.Game.GameModes.Play.Mania namespace osu.Game.GameModes.Play.Mania
{ {
@ -17,13 +16,10 @@ namespace osu.Game.GameModes.Play.Mania
public ManiaHitRenderer(int columns = 5) public ManiaHitRenderer(int columns = 5)
{ {
this.columns = columns; this.columns = columns;
Converter = new ManiaConverter(columns);
} }
protected override List<ManiaBaseHit> Convert(List<HitObject> objects) protected override HitObjectConverter<ManiaBaseHit> Converter { get; }
{
ManiaConverter converter = new ManiaConverter(columns);
return converter.Convert(objects);
}
protected override Playfield CreatePlayfield() => new ManiaPlayfield(columns); protected override Playfield CreatePlayfield() => new ManiaPlayfield(columns);

View File

@ -1,7 +1,6 @@
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>. //Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.Collections.Generic;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Beatmaps.Objects; using osu.Game.Beatmaps.Objects;
using osu.Game.Beatmaps.Objects.Osu; using osu.Game.Beatmaps.Objects.Osu;
@ -11,9 +10,11 @@ namespace osu.Game.GameModes.Play.Osu
{ {
public class OsuHitRenderer : HitRenderer<OsuBaseHit> public class OsuHitRenderer : HitRenderer<OsuBaseHit>
{ {
protected override Playfield CreatePlayfield() => new OsuPlayfield(); private static readonly OsuConverter converter = new OsuConverter();
protected override List<OsuBaseHit> Convert(List<HitObject> objects) => new OsuConverter().Convert(objects); protected override HitObjectConverter<OsuBaseHit> Converter => converter;
protected override Playfield CreatePlayfield() => new OsuPlayfield();
protected override Drawable GetVisualRepresentation(OsuBaseHit h) => new DrawableCircle(h); protected override Drawable GetVisualRepresentation(OsuBaseHit h) => new DrawableCircle(h);
} }

View File

@ -1,7 +1,6 @@
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>. //Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.Collections.Generic;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Beatmaps.Objects; using osu.Game.Beatmaps.Objects;
using osu.Game.Beatmaps.Objects.Taiko; using osu.Game.Beatmaps.Objects.Taiko;
@ -11,7 +10,9 @@ namespace osu.Game.GameModes.Play.Taiko
{ {
public class TaikoHitRenderer : HitRenderer<TaikoBaseHit> public class TaikoHitRenderer : HitRenderer<TaikoBaseHit>
{ {
protected override List<TaikoBaseHit> Convert(List<HitObject> objects) => new TaikoConverter().Convert(objects); private static readonly TaikoConverter converter = new TaikoConverter();
protected override HitObjectConverter<TaikoBaseHit> Converter => converter;
protected override Playfield CreatePlayfield() => new TaikoPlayfield(); protected override Playfield CreatePlayfield() => new TaikoPlayfield();