fix map rotation during server bootstrap bootstrap#933
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adjusts the client join → standalone bootstrap transition so that any active “connecting” dialogs are closed without triggering their normal PostClose side effects (which would otherwise stop multiplayer or reopen the server browser).
Changes:
- Added a
suppressPostCloseActionsflag toBaseConnectingWindowto optionally bypassPostCloseteardown behavior. - When switching into
ClientBootstrap, enumerates and removes anyBaseConnectingWindowinstances while suppressing theirPostCloseactions, then opensBootstrapConfiguratorWindow.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| Source/Client/Windows/ConnectingWindow.cs | Adds a suppression flag to prevent PostClose from stopping multiplayer / reopening server browser during controlled shutdown. |
| Source/Client/Networking/State/ClientJoiningState.cs | Removes active connecting windows (with suppression enabled) before entering bootstrap state and showing the bootstrap configurator UI. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if (suppressPostCloseActions) | ||
| return; | ||
|
|
||
| Multiplayer.StopMultiplayer(); |
There was a problem hiding this comment.
Now I'm a bit confused how does this work when joining a non-bootstrap game. When loading the world, and Find.WindowStack is switched out, is the PostClose method not called?
There was a problem hiding this comment.
It’s exactly why the problem only exists in the bootstrap path.
In a normal non-bootstrap join, the client proceeds into the regular loading flow and then switches over to the loaded game UI. In that process, the old connecting window is not being explicitly closed as part of the same window stack lifecycle, so its close callback is not what makes it disappear. It effectively vanishes together with the old UI state during the transition into the loaded game.
There was a problem hiding this comment.
Bootstrap behaves differently because there is no immediate transition into the loaded game UI. We stay on the same window stack and open the bootstrap flow on top of it. That means the old connecting window can remain alive and continue blocking camera motion, which is why the globe gets stuck only there.
There was a problem hiding this comment.
I don't know if is possible to move all in a dedicated window stack or something like this to fix it in another way but i think too much work for a simple bootstrap config
Summary
Close any active connecting windows when the join flow switches into standalone bootstrap mode, and suppress their normal PostClose side effects so the bootstrap transition does not stop multiplayer or reopen the server browser.
This fixes the blocked world map rotation during standalone server bootstrap. The root cause was a stale connecting window remaining in the window stack and continuing to prevent camera motion, which left the globe stuck during starting-site selection.
Testing