Closes#13847.
I think we can probably get some test coverage of this if required, but
needs a bit of thought (basically an error needs to be thrown during the
multiplayer client portion of the join procedure, after `CurrentRoom` is
non-null but before the join completes).
Manual testing on password branch (#13861) is possible since it
currently errors due to missing method on the live/dev servers.
- Create game, which will fail with `MethodNotExists`.
- Note the fields on the settings screen are emptied.
- Fill fields again and press create game (crash).
`DifficultyAdjustSettingsControl` and its inner `SliderControl` were
holding different references to `DifficultyBindable`s from the
difficulty adjust mod, therefore leading to bindings being lost to the
framework-side automatic unbind logic if the mod was toggled off and
back on in rapid succession.
Resolve by adding a shadowed implementation of `GetBoundCopy()` and
using it to isolate the controls from the mod bindable.
This logic was intentionally designed to continue to prompt the user to
update if they haven't, but that seems pretty anti-user. The change will
stop the update prompts from showing more than once per game startup,
unless manually invoked by the user a second time.
Closes https://github.com/ppy/osu/issues/13821.
As long as this isn't a constructor parameter it feels best to
gracefully handle omission. Realistically having it in the ctor is the
best move, but it doesn't feel great in line with the other parameters
passed in via object initalisers.
Fixes issues as seen at
https://github.com/ppy/osu/runs/3023581865?check_suite_focus=true. Song
select may take a few frames to perform initial selection as there is a
bit of internal async logic. This ensures that the beatmap has been
updated before continuing with test execution.
As seen at
https://github.com/ppy/osu/pull/13831/checks?check_run_id=3025050307. I
can't confirm that this will fix the issue but it looks like the only
plausible reason. I have confirmed that the logging is not coming from
the local (first logging is guaranteed to be after `SetupForRun`).