mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 18:32:55 +08:00
Fix starting gameplay too early after import
This commit is contained in:
parent
6057037e35
commit
25b274c323
@ -391,9 +391,9 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("set user ready", () => client.ChangeState(MultiplayerUserState.Ready));
|
pressReadyButton();
|
||||||
AddStep("delete beatmap", () => beatmaps.Delete(importedSet));
|
|
||||||
|
|
||||||
|
AddStep("delete beatmap", () => beatmaps.Delete(importedSet));
|
||||||
AddUntilStep("user state is idle", () => client.LocalUser?.State == MultiplayerUserState.Idle);
|
AddUntilStep("user state is idle", () => client.LocalUser?.State == MultiplayerUserState.Idle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -413,6 +413,8 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
pressReadyButton();
|
||||||
|
|
||||||
AddStep("Enter song select", () =>
|
AddStep("Enter song select", () =>
|
||||||
{
|
{
|
||||||
var currentSubScreen = ((Screens.OnlinePlay.Multiplayer.Multiplayer)multiplayerScreenStack.CurrentScreen).CurrentSubScreen;
|
var currentSubScreen = ((Screens.OnlinePlay.Multiplayer.Multiplayer)multiplayerScreenStack.CurrentScreen).CurrentSubScreen;
|
||||||
@ -592,19 +594,8 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
AddUntilStep("wait for ready button to be enabled", () => readyButton.ChildrenOfType<OsuButton>().Single().Enabled.Value);
|
pressReadyButton();
|
||||||
|
pressReadyButton();
|
||||||
AddStep("click ready button", () =>
|
|
||||||
{
|
|
||||||
InputManager.MoveMouseTo(readyButton);
|
|
||||||
InputManager.Click(MouseButton.Left);
|
|
||||||
});
|
|
||||||
|
|
||||||
AddUntilStep("wait for player to be ready", () => client.Room?.Users[0].State == MultiplayerUserState.Ready);
|
|
||||||
AddUntilStep("wait for ready button to be enabled", () => readyButton.ChildrenOfType<OsuButton>().Single().Enabled.Value);
|
|
||||||
|
|
||||||
AddStep("click start button", () => InputManager.Click(MouseButton.Left));
|
|
||||||
|
|
||||||
AddUntilStep("wait for player", () => multiplayerScreenStack.CurrentScreen is Player);
|
AddUntilStep("wait for player", () => multiplayerScreenStack.CurrentScreen is Player);
|
||||||
|
|
||||||
// Gameplay runs in real-time, so we need to incrementally check if gameplay has finished in order to not time out.
|
// Gameplay runs in real-time, so we need to incrementally check if gameplay has finished in order to not time out.
|
||||||
@ -665,7 +656,24 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private MultiplayerReadyButton readyButton => this.ChildrenOfType<MultiplayerReadyButton>().Single();
|
private ReadyButton readyButton => this.ChildrenOfType<ReadyButton>().Single();
|
||||||
|
|
||||||
|
private void pressReadyButton()
|
||||||
|
{
|
||||||
|
AddUntilStep("wait for ready button to be enabled", () => readyButton.Enabled.Value);
|
||||||
|
|
||||||
|
MultiplayerUserState lastState = MultiplayerUserState.Idle;
|
||||||
|
|
||||||
|
AddStep("click ready button", () =>
|
||||||
|
{
|
||||||
|
lastState = client.LocalUser?.State ?? MultiplayerUserState.Idle;
|
||||||
|
|
||||||
|
InputManager.MoveMouseTo(readyButton);
|
||||||
|
InputManager.Click(MouseButton.Left);
|
||||||
|
});
|
||||||
|
|
||||||
|
AddUntilStep("wait for state change", () => client.LocalUser?.State != lastState);
|
||||||
|
}
|
||||||
|
|
||||||
private void createRoom(Func<Room> room)
|
private void createRoom(Func<Room> room)
|
||||||
{
|
{
|
||||||
|
@ -302,7 +302,7 @@ namespace osu.Game.Screens.OnlinePlay.Match
|
|||||||
public override void OnResuming(IScreen last)
|
public override void OnResuming(IScreen last)
|
||||||
{
|
{
|
||||||
base.OnResuming(last);
|
base.OnResuming(last);
|
||||||
updateWorkingBeatmap();
|
UpdateWorkingBeatmap();
|
||||||
beginHandlingTrack();
|
beginHandlingTrack();
|
||||||
Scheduler.AddOnce(UpdateMods);
|
Scheduler.AddOnce(UpdateMods);
|
||||||
}
|
}
|
||||||
@ -345,7 +345,7 @@ namespace osu.Game.Screens.OnlinePlay.Match
|
|||||||
|
|
||||||
private void selectedItemChanged()
|
private void selectedItemChanged()
|
||||||
{
|
{
|
||||||
updateWorkingBeatmap();
|
UpdateWorkingBeatmap();
|
||||||
|
|
||||||
var selected = SelectedItem.Value;
|
var selected = SelectedItem.Value;
|
||||||
|
|
||||||
@ -374,9 +374,9 @@ namespace osu.Game.Screens.OnlinePlay.Match
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void beatmapUpdated(BeatmapSetInfo set) => Schedule(updateWorkingBeatmap);
|
private void beatmapUpdated(BeatmapSetInfo set) => Schedule(UpdateWorkingBeatmap);
|
||||||
|
|
||||||
private void updateWorkingBeatmap()
|
protected virtual void UpdateWorkingBeatmap()
|
||||||
{
|
{
|
||||||
var beatmap = SelectedItem.Value?.Beatmap.Value;
|
var beatmap = SelectedItem.Value?.Beatmap.Value;
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ using osu.Framework.Screens;
|
|||||||
using osu.Framework.Threading;
|
using osu.Framework.Threading;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Configuration;
|
using osu.Game.Configuration;
|
||||||
|
using osu.Game.Extensions;
|
||||||
using osu.Game.Online;
|
using osu.Game.Online;
|
||||||
using osu.Game.Online.Multiplayer;
|
using osu.Game.Online.Multiplayer;
|
||||||
using osu.Game.Online.Rooms;
|
using osu.Game.Online.Rooms;
|
||||||
@ -326,9 +327,23 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
|
|||||||
if (client.LocalUser?.State == MultiplayerUserState.Ready)
|
if (client.LocalUser?.State == MultiplayerUserState.Ready)
|
||||||
client.ChangeState(MultiplayerUserState.Idle);
|
client.ChangeState(MultiplayerUserState.Idle);
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
|
|
||||||
|
protected override void UpdateWorkingBeatmap()
|
||||||
|
{
|
||||||
|
var lastBeatmap = Beatmap.Value;
|
||||||
|
|
||||||
|
base.UpdateWorkingBeatmap();
|
||||||
|
|
||||||
|
if (Beatmap.Value.BeatmapInfo.MatchesOnlineID(lastBeatmap.BeatmapInfo))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!Beatmap.Value.BeatmapInfo.MatchesOnlineID(SelectedItem.Value?.Beatmap.Value))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (client.LocalUser?.State == MultiplayerUserState.Spectating
|
||||||
|
&& (client.Room?.State == MultiplayerRoomState.WaitingForLoad || client.Room?.State == MultiplayerRoomState.Playing))
|
||||||
{
|
{
|
||||||
if (client.LocalUser?.State == MultiplayerUserState.Spectating && (client.Room?.State == MultiplayerRoomState.WaitingForLoad || client.Room?.State == MultiplayerRoomState.Playing))
|
|
||||||
onLoadRequested();
|
onLoadRequested();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user