Fix crash when loading player instance without exiting previous instance

This commit is contained in:
Salman Ahmed 2023-09-19 05:09:01 +03:00
parent 163b6df357
commit 8e992de763
2 changed files with 11 additions and 0 deletions

View File

@ -67,6 +67,11 @@ private void runForRuleset(RulesetInfo ruleset)
private Player loadPlayerFor(RulesetInfo rulesetInfo)
{
// if a player screen is present already, we must exit that before loading another one,
// otherwise it'll crash on SpectatorClient.BeginPlaying being called while client is in "playing" state already.
if (Stack.CurrentScreen is Player)
Stack.Exit();
Ruleset.Value = rulesetInfo;
var ruleset = rulesetInfo.CreateInstance();

View File

@ -12,6 +12,7 @@
using osu.Game.Configuration;
using osu.Game.Rulesets;
using osu.Game.Rulesets.Mods;
using osu.Game.Screens.Play;
namespace osu.Game.Tests.Visual
{
@ -79,6 +80,11 @@ protected void CreateTest([CanBeNull] Action action = null)
protected void LoadPlayer(Mod[] mods)
{
// if a player screen is present already, we must exit that before loading another one,
// otherwise it'll crash on SpectatorClient.BeginPlaying being called while client is in "playing" state already.
if (Stack.CurrentScreen is Player)
Stack.Exit();
var ruleset = CreatePlayerRuleset();
Ruleset.Value = ruleset.RulesetInfo;