mirror of
https://github.com/osukey/osukey.git
synced 2025-05-12 00:57:21 +09:00
Simplify the way multiple subscreens handle their disable states via a custom stack
This commit is contained in:
parent
75eb9ca040
commit
81cadb7875
@ -91,6 +91,22 @@ namespace osu.Game.Screens.Multi.Lounge
|
|||||||
public override void OnEntering(IScreen last)
|
public override void OnEntering(IScreen last)
|
||||||
{
|
{
|
||||||
base.OnEntering(last);
|
base.OnEntering(last);
|
||||||
|
|
||||||
|
onReturning();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnResuming(IScreen last)
|
||||||
|
{
|
||||||
|
base.OnResuming(last);
|
||||||
|
|
||||||
|
if (currentRoom.Value?.RoomID.Value == null)
|
||||||
|
currentRoom.Value = new Room();
|
||||||
|
|
||||||
|
onReturning();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onReturning()
|
||||||
|
{
|
||||||
Filter.Search.HoldFocus = true;
|
Filter.Search.HoldFocus = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,14 +122,6 @@ namespace osu.Game.Screens.Multi.Lounge
|
|||||||
Filter.Search.HoldFocus = false;
|
Filter.Search.HoldFocus = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnResuming(IScreen last)
|
|
||||||
{
|
|
||||||
base.OnResuming(last);
|
|
||||||
|
|
||||||
if (currentRoom.Value?.RoomID.Value == null)
|
|
||||||
currentRoom.Value = new Room();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void joinRequested(Room room)
|
private void joinRequested(Room room)
|
||||||
{
|
{
|
||||||
processingOverlay.Show();
|
processingOverlay.Show();
|
||||||
|
@ -32,6 +32,8 @@ namespace osu.Game.Screens.Multi
|
|||||||
{
|
{
|
||||||
public override bool CursorVisible => (screenStack.CurrentScreen as IMultiplayerSubScreen)?.CursorVisible ?? true;
|
public override bool CursorVisible => (screenStack.CurrentScreen as IMultiplayerSubScreen)?.CursorVisible ?? true;
|
||||||
|
|
||||||
|
// this is required due to PlayerLoader eventually being pushed to the main stack
|
||||||
|
// while leases may be taken out by a subscreen.
|
||||||
public override bool DisallowExternalBeatmapRulesetChanges => true;
|
public override bool DisallowExternalBeatmapRulesetChanges => true;
|
||||||
|
|
||||||
private readonly MultiplayerWaveContainer waves;
|
private readonly MultiplayerWaveContainer waves;
|
||||||
@ -96,7 +98,7 @@ namespace osu.Game.Screens.Multi
|
|||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Padding = new MarginPadding { Top = Header.HEIGHT },
|
Padding = new MarginPadding { Top = Header.HEIGHT },
|
||||||
Child = screenStack = new OsuScreenStack { RelativeSizeAxes = Axes.Both }
|
Child = screenStack = new MultiplayerSubScreenStack { RelativeSizeAxes = Axes.Both }
|
||||||
},
|
},
|
||||||
new Header(screenStack),
|
new Header(screenStack),
|
||||||
createButton = new HeaderButton
|
createButton = new HeaderButton
|
||||||
@ -277,11 +279,7 @@ namespace osu.Game.Screens.Multi
|
|||||||
|
|
||||||
private void updateTrack(ValueChangedEvent<WorkingBeatmap> _ = null)
|
private void updateTrack(ValueChangedEvent<WorkingBeatmap> _ = null)
|
||||||
{
|
{
|
||||||
bool isMatch = screenStack.CurrentScreen is MatchSubScreen;
|
if (screenStack.CurrentScreen is MatchSubScreen)
|
||||||
|
|
||||||
Beatmap.Disabled = isMatch;
|
|
||||||
|
|
||||||
if (isMatch)
|
|
||||||
{
|
{
|
||||||
var track = Beatmap.Value?.Track;
|
var track = Beatmap.Value?.Track;
|
||||||
|
|
||||||
|
24
osu.Game/Screens/Multi/MultiplayerSubScreenStack.cs
Normal file
24
osu.Game/Screens/Multi/MultiplayerSubScreenStack.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Framework.Screens;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Multi
|
||||||
|
{
|
||||||
|
public class MultiplayerSubScreenStack : OsuScreenStack
|
||||||
|
{
|
||||||
|
protected override void ScreenChanged(IScreen prev, IScreen next)
|
||||||
|
{
|
||||||
|
base.ScreenChanged(prev, next);
|
||||||
|
|
||||||
|
// because this is a screen stack within a screen stack, let's manually handle disabled changes to simplify things.
|
||||||
|
var osuScreen = ((OsuScreen)next);
|
||||||
|
|
||||||
|
bool disallowChanges = osuScreen.DisallowExternalBeatmapRulesetChanges;
|
||||||
|
|
||||||
|
osuScreen.Beatmap.Disabled = disallowChanges;
|
||||||
|
osuScreen.Ruleset.Disabled = disallowChanges;
|
||||||
|
osuScreen.Mods.Disabled = disallowChanges;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -26,7 +26,7 @@ namespace osu.Game.Screens
|
|||||||
};
|
};
|
||||||
|
|
||||||
ScreenPushed += screenPushed;
|
ScreenPushed += screenPushed;
|
||||||
ScreenExited += screenExited;
|
ScreenExited += ScreenChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void screenPushed(IScreen prev, IScreen next)
|
private void screenPushed(IScreen prev, IScreen next)
|
||||||
@ -42,10 +42,10 @@ namespace osu.Game.Screens
|
|||||||
// create dependencies synchronously to ensure leases are in a sane state.
|
// create dependencies synchronously to ensure leases are in a sane state.
|
||||||
((OsuScreen)next).CreateLeasedDependencies((prev as OsuScreen)?.Dependencies ?? Dependencies);
|
((OsuScreen)next).CreateLeasedDependencies((prev as OsuScreen)?.Dependencies ?? Dependencies);
|
||||||
|
|
||||||
setParallax(next);
|
ScreenChanged(prev, next);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void screenExited(IScreen prev, IScreen next)
|
protected virtual void ScreenChanged(IScreen prev, IScreen next)
|
||||||
{
|
{
|
||||||
setParallax(next);
|
setParallax(next);
|
||||||
}
|
}
|
||||||
|
@ -65,20 +65,7 @@ namespace osu.Game.Screens.Select
|
|||||||
Mods.Value = CurrentItem.Value.RequiredMods?.ToArray() ?? Array.Empty<Mod>();
|
Mods.Value = CurrentItem.Value.RequiredMods?.ToArray() ?? Array.Empty<Mod>();
|
||||||
}
|
}
|
||||||
|
|
||||||
Beatmap.Disabled = true;
|
|
||||||
Ruleset.Disabled = true;
|
|
||||||
Mods.Disabled = true;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnEntering(IScreen last)
|
|
||||||
{
|
|
||||||
base.OnEntering(last);
|
|
||||||
|
|
||||||
Beatmap.Disabled = false;
|
|
||||||
Ruleset.Disabled = false;
|
|
||||||
Mods.Disabled = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user