Merge branch 'master' into match-subscreen-redesign

This commit is contained in:
Dean Herbert
2020-02-15 15:29:33 +09:00
8 changed files with 133 additions and 62 deletions

View File

@ -181,7 +181,7 @@ namespace osu.Game.Screens.Multi.Match
}
}, true);
SelectedItem.BindValueChanged(selectedItemChanged);
SelectedItem.BindValueChanged(_ => Scheduler.AddOnce(selectedItemChanged));
SelectedItem.Value = playlist.FirstOrDefault();
beatmapManager.ItemAdded += beatmapAdded;
@ -195,14 +195,16 @@ namespace osu.Game.Screens.Multi.Match
return base.OnExiting(next);
}
private void selectedItemChanged(ValueChangedEvent<PlaylistItem> e)
private void selectedItemChanged()
{
updateWorkingBeatmap();
Mods.Value = e.NewValue?.RequiredMods?.ToArray() ?? Array.Empty<Mod>();
var item = SelectedItem.Value;
if (e.NewValue?.Ruleset != null)
Ruleset.Value = e.NewValue.Ruleset.Value;
Mods.Value = item?.RequiredMods?.ToArray() ?? Array.Empty<Mod>();
if (item?.Ruleset != null)
Ruleset.Value = item.Ruleset.Value;
}
private void updateWorkingBeatmap()

View File

@ -67,7 +67,14 @@ namespace osu.Game.Screens.Play
}
private bool readyForPush =>
player.LoadState == LoadState.Ready && (IsHovered || idleTracker.IsIdle.Value) && inputManager?.DraggedDrawable == null;
// don't push unless the player is completely loaded
player.LoadState == LoadState.Ready
// don't push if the user is hovering one of the panes, unless they are idle.
&& (IsHovered || idleTracker.IsIdle.Value)
// don't push if the user is dragging a slider or otherwise.
&& inputManager?.DraggedDrawable == null
// don't push if a focused overlay is visible, like settings.
&& inputManager?.FocusedDrawable == null;
private readonly Func<Player> createPlayer;

View File

@ -42,8 +42,16 @@ namespace osu.Game.Screens.Select
protected override bool OnStart()
{
if (Playlist.Count == 0)
createNewItem();
switch (Playlist.Count)
{
case 0:
createNewItem();
break;
case 1:
populateItemFromCurrent(Playlist.Single());
break;
}
this.Exit();
@ -55,13 +63,20 @@ namespace osu.Game.Screens.Select
PlaylistItem item = new PlaylistItem
{
ID = (Playlist.LastOrDefault()?.ID + 1) ?? 0,
Beatmap = { Value = Beatmap.Value.BeatmapInfo },
Ruleset = { Value = Ruleset.Value }
};
item.RequiredMods.AddRange(Mods.Value);
populateItemFromCurrent(item);
Playlist.Add(item);
}
private void populateItemFromCurrent(PlaylistItem item)
{
item.Beatmap.Value = Beatmap.Value.BeatmapInfo;
item.Ruleset.Value = Ruleset.Value;
item.RequiredMods.Clear();
item.RequiredMods.AddRange(Mods.Value);
}
}
}