Use generics everywhere.

This commit is contained in:
Dean Herbert
2017-03-06 13:59:11 +09:00
parent 20fcb8848b
commit faf07ab51a
16 changed files with 101 additions and 84 deletions

View File

@ -20,7 +20,7 @@ namespace osu.Game.Modes.UI
public event Action OnAllJudged;
public InputManager InputManager;
public abstract bool AllObjectsJudged { get; }
protected void TriggerOnJudgement(JudgementInfo j)
{
@ -28,18 +28,20 @@ namespace osu.Game.Modes.UI
if (AllObjectsJudged)
OnAllJudged?.Invoke();
}
protected Playfield Playfield;
public bool AllObjectsJudged => Playfield.HitObjects.Children.First()?.Judgement.Result != null; //reverse depth sort means First() instead of Last().
public IEnumerable<DrawableHitObject> DrawableObjects => Playfield.HitObjects.Children;
}
public abstract class HitRenderer<T> : HitRenderer
where T : HitObject
public abstract class HitRenderer<TObject> : HitRenderer
where TObject : HitObject
{
private List<T> objects;
private List<TObject> objects;
public InputManager InputManager;
protected Playfield<TObject> Playfield;
public override bool AllObjectsJudged => Playfield.HitObjects.Children.First()?.Judgement.Result != null; //reverse depth sort means First() instead of Last().
public IEnumerable<DrawableHitObject> DrawableObjects => Playfield.HitObjects.Children;
public Beatmap Beatmap
{
@ -51,11 +53,11 @@ namespace osu.Game.Modes.UI
}
}
protected abstract Playfield CreatePlayfield();
protected abstract Playfield<TObject> CreatePlayfield();
protected abstract HitObjectConverter<T> Converter { get; }
protected abstract HitObjectConverter<TObject> Converter { get; }
protected virtual List<T> Convert(Beatmap beatmap) => Converter.Convert(beatmap);
protected virtual List<TObject> Convert(Beatmap beatmap) => Converter.Convert(beatmap);
public HitRenderer()
{
@ -76,9 +78,9 @@ namespace osu.Game.Modes.UI
private void loadObjects()
{
if (objects == null) return;
foreach (T h in objects)
foreach (TObject h in objects)
{
var drawableObject = GetVisualRepresentation(h);
DrawableHitObject<TObject> drawableObject = GetVisualRepresentation(h);
if (drawableObject == null) continue;
@ -89,8 +91,8 @@ namespace osu.Game.Modes.UI
Playfield.PostProcess();
}
private void onJudgement(DrawableHitObject o, JudgementInfo j) => TriggerOnJudgement(j);
private void onJudgement(DrawableHitObject<TObject> o, JudgementInfo j) => TriggerOnJudgement(j);
protected abstract DrawableHitObject GetVisualRepresentation(T h);
protected abstract DrawableHitObject<TObject> GetVisualRepresentation(TObject h);
}
}