From dfe3d5b02068c725a8ef1b7b9c4c9152eb11c531 Mon Sep 17 00:00:00 2001 From: MhaWay Date: Thu, 21 May 2026 20:11:15 +0200 Subject: [PATCH] Fix bootstrap config window race after map entry --- ...BootstrapConfiguratorWindow.BootstrapFlow.cs | 17 +++++++++++++---- .../Windows/BootstrapConfiguratorWindow.cs | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Source/Client/Windows/BootstrapConfiguratorWindow.BootstrapFlow.cs b/Source/Client/Windows/BootstrapConfiguratorWindow.BootstrapFlow.cs index e17927d2..ea2fd5aa 100644 --- a/Source/Client/Windows/BootstrapConfiguratorWindow.BootstrapFlow.cs +++ b/Source/Client/Windows/BootstrapConfiguratorWindow.BootstrapFlow.cs @@ -16,6 +16,7 @@ public partial class BootstrapConfiguratorWindow { private const string BootstrapSaveName = "MpBootstrapSave"; private const float PostMapEnterSaveDelaySeconds = 1.5f; + private const float PostMapEnterWindowDelaySeconds = 0.1f; private bool hideWindowDuringMapGen; private bool autoAdvanceArmed; @@ -29,6 +30,7 @@ public partial class BootstrapConfiguratorWindow private string saveUploadStatus; private float saveUploadProgress; private float postMapEnterSaveDelayRemaining; + private float postMapEnterWindowDelayRemaining; private float GetGenerateMapStepHeight() { @@ -132,6 +134,7 @@ private void StartVanillaNewColonyFlow() savedReplayPath = null; autoAdvanceArmed = true; AwaitingBootstrapMapInit = true; + postMapEnterWindowDelayRemaining = 0f; saveUploadStatus = "Generating map..."; Find.WindowStack.TryRemove(this); @@ -144,7 +147,7 @@ private void TryArmAwaitingBootstrapMapInit() if (AwaitingBootstrapMapInit) return; - if (Multiplayer.Client != null || bootstrapSaveQueued || saveReady || isUploadingSave || saveUploadAutoStarted) + if (Multiplayer.Client != null || bootstrapSaveQueued || saveReady || isUploadingSave || saveUploadAutoStarted || awaitingControllablePawns || postMapEnterSaveDelayRemaining > 0f) return; if (Current.ProgramState != ProgramState.Playing || Find.Maps == null || Find.Maps.Count == 0) @@ -174,11 +177,10 @@ public void OnBootstrapMapInitialized() retainInstanceOnClose = false; AwaitingBootstrapMapInit = false; postMapEnterSaveDelayRemaining = PostMapEnterSaveDelaySeconds; + postMapEnterWindowDelayRemaining = PostMapEnterWindowDelaySeconds; awaitingControllablePawns = true; bootstrapSaveQueued = false; saveUploadStatus = "Map initialized. Waiting for controllable colonists to spawn..."; - - TryShowBootstrapWindow(); } private void TryShowBootstrapWindow() @@ -189,7 +191,7 @@ private void TryShowBootstrapWindow() if (Find.WindowStack.WindowOfType() != null) return; - if (Find.WindowStack.Windows.OfType().Any()) + if (Find.WindowStack.Windows.Any(window => window is Dialog_MessageBox or Dialog_NodeTree)) return; Find.WindowStack.Add(this); @@ -200,6 +202,13 @@ private void TickPostMapEnterSaveDelayAndMaybeSave() if (hideWindowDuringMapGen || bootstrapSaveQueued || saveReady || isUploadingSave) return; + if (postMapEnterWindowDelayRemaining > 0f || postMapEnterSaveDelayRemaining > 0f || awaitingControllablePawns) + { + postMapEnterWindowDelayRemaining -= Time.deltaTime; + if (postMapEnterWindowDelayRemaining <= 0f) + TryShowBootstrapWindow(); + } + if (postMapEnterSaveDelayRemaining <= 0f && !awaitingControllablePawns) return; diff --git a/Source/Client/Windows/BootstrapConfiguratorWindow.cs b/Source/Client/Windows/BootstrapConfiguratorWindow.cs index 2aaf63c8..f95268df 100644 --- a/Source/Client/Windows/BootstrapConfiguratorWindow.cs +++ b/Source/Client/Windows/BootstrapConfiguratorWindow.cs @@ -145,6 +145,7 @@ internal void ResetTransientUiState(bool resetServerDrivenState = false) isUploadingSave = false; saveUploadAutoStarted = false; postMapEnterSaveDelayRemaining = 0f; + postMapEnterWindowDelayRemaining = 0f; if (resetServerDrivenState) {