mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 15:03:13 +08:00
Fix beatmap + ruleset being changeable
This commit is contained in:
parent
5f0069eb83
commit
de0fc2a0de
@ -32,6 +32,9 @@ namespace osu.Game.Screens.Multi.Match
|
||||
|
||||
protected override Drawable TransitionContent => participants;
|
||||
|
||||
public override bool AllowBeatmapRulesetChange => allowBeatmapRulesetChange;
|
||||
private bool allowBeatmapRulesetChange;
|
||||
|
||||
public override string Title => room.Name.Value;
|
||||
|
||||
public override string ShortTitle => "room";
|
||||
@ -140,10 +143,19 @@ namespace osu.Game.Screens.Multi.Match
|
||||
info.Beatmap.Value = item.Beatmap;
|
||||
info.Mods.Value = item.RequiredMods;
|
||||
|
||||
allowBeatmapRulesetChange = true;
|
||||
|
||||
// Todo: item.Beatmap can be null here...
|
||||
var localBeatmap = beatmapManager.QueryBeatmap(b => b.OnlineBeatmapID == item.BeatmapID) ?? item.Beatmap;
|
||||
Beatmap.Value = beatmapManager.GetWorkingBeatmap(localBeatmap);
|
||||
Beatmap.Value.Mods.Value = item.RequiredMods.ToArray();
|
||||
|
||||
Schedule(() =>
|
||||
{
|
||||
Beatmap.Value = beatmapManager.GetWorkingBeatmap(localBeatmap);
|
||||
Beatmap.Value.Mods.Value = item.RequiredMods.ToArray();
|
||||
Ruleset.Value = item.Ruleset;
|
||||
|
||||
allowBeatmapRulesetChange = false;
|
||||
});
|
||||
}
|
||||
|
||||
private void onStart()
|
||||
|
@ -19,6 +19,10 @@ namespace osu.Game.Screens.Multi
|
||||
{
|
||||
private readonly MultiplayerWaveContainer waves;
|
||||
|
||||
public override bool AllowBeatmapRulesetChange => currentScreen?.AllowBeatmapRulesetChange ?? base.AllowBeatmapRulesetChange;
|
||||
|
||||
private OsuScreen currentScreen;
|
||||
|
||||
public Multiplayer()
|
||||
{
|
||||
Child = waves = new MultiplayerWaveContainer
|
||||
@ -58,6 +62,8 @@ namespace osu.Game.Screens.Multi
|
||||
new Header(loungeScreen)
|
||||
});
|
||||
|
||||
screenAdded(loungeScreen);
|
||||
|
||||
loungeScreen.Exited += s => Exit();
|
||||
}
|
||||
|
||||
@ -96,6 +102,19 @@ namespace osu.Game.Screens.Multi
|
||||
base.LogoExiting(logo);
|
||||
}
|
||||
|
||||
private void screenAdded(Screen newScreen)
|
||||
{
|
||||
currentScreen = (OsuScreen)newScreen;
|
||||
|
||||
newScreen.ModePushed += screenAdded;
|
||||
newScreen.Exited += screenRemoved;
|
||||
}
|
||||
|
||||
private void screenRemoved(Screen newScreen)
|
||||
{
|
||||
currentScreen = (OsuScreen)newScreen;
|
||||
}
|
||||
|
||||
private class MultiplayerWaveContainer : WaveContainer
|
||||
{
|
||||
protected override bool StartHidden => true;
|
||||
|
Loading…
Reference in New Issue
Block a user