Welded bindables.

This commit is contained in:
Dean Herbert
2017-02-26 22:08:21 +09:00
parent c5ad79e3e2
commit c227eb1be5
31 changed files with 94 additions and 128 deletions

View File

@ -24,43 +24,20 @@ namespace osu.Game.Screens
protected new OsuGameBase Game => base.Game as OsuGameBase;
private bool boundToBeatmap;
private Bindable<WorkingBeatmap> beatmap;
private readonly Bindable<WorkingBeatmap> beatmap = new Bindable<WorkingBeatmap>();
public WorkingBeatmap Beatmap
{
get
{
bindBeatmap();
return beatmap.Value;
}
set
{
bindBeatmap();
beatmap.Value = value;
}
}
private void bindBeatmap()
{
if (beatmap == null)
beatmap = new Bindable<WorkingBeatmap>();
if (!boundToBeatmap)
{
beatmap.ValueChanged += beatmap_ValueChanged;
boundToBeatmap = true;
}
}
protected override void Dispose(bool isDisposing)
{
if (boundToBeatmap)
beatmap.ValueChanged -= beatmap_ValueChanged;
base.Dispose(isDisposing);
}
private void beatmap_ValueChanged(object sender, EventArgs e)
{
OnBeatmapChanged(beatmap.Value);
@ -69,19 +46,8 @@ namespace osu.Game.Screens
[BackgroundDependencyLoader(permitNulls: true)]
private void load(OsuGameBase game)
{
if (beatmap == null)
beatmap = game?.Beatmap;
}
public override bool Push(Screen screen)
{
OsuScreen nextOsu = screen as OsuScreen;
if (nextOsu != null)
{
nextOsu.beatmap = beatmap;
}
return base.Push(screen);
beatmap.Weld(game?.Beatmap);
beatmap.ValueChanged += beatmap_ValueChanged;
}
protected virtual void OnBeatmapChanged(WorkingBeatmap beatmap)