diff --git a/Assets/Scripts/UI/MainMenu.cs b/Assets/Scripts/UI/MainMenu.cs index faf545c73..e6ae44c99 100644 --- a/Assets/Scripts/UI/MainMenu.cs +++ b/Assets/Scripts/UI/MainMenu.cs @@ -164,6 +164,10 @@ public class MainMenu : MonoBehaviour .SectorMap .Latest(); } + catch (KeyNotFoundException ex) when (IsMissingDaemonFrame(ex)) + { + return null; + } catch (Exception ex) { Debug.LogError($"Failed to bind typed Aetheria sector-map state for the main menu: {ex}"); @@ -209,6 +213,11 @@ public class MainMenu : MonoBehaviour } } + private static bool IsMissingDaemonFrame(KeyNotFoundException ex) + { + return ex?.Message?.Contains("daemon:aetheria.frame.latest.v1", StringComparison.Ordinal) == true; + } + private void ContinueGame() { if (!TryStartDaemonObservedGame("Continuing Daemon Run")) diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs index db97193b4..5e8276fcd 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs @@ -521,13 +521,11 @@ namespace GameCult.Aetheria.State.Verse seatId => Document( AetheriaRuntimeVerseRecordKeys.StarbridgePlayerSeat(seatId))); - managedDaemonFrame = state.DaemonFrame.Reactive(); managedCatalog = state.Catalog.Reactive(); managedLoadoutTemplates = state.LoadoutTemplates.Reactive(); managedPlayerSettings = state.PlayerSettings.Reactive(); managedStarbridgeScenario = state.StarbridgeScenario.Reactive(); managedStarbridgeSession = state.StarbridgeSession.Reactive(); - _managedDaemonFrame = managedDaemonFrame; _managedCatalog = managedCatalog; _managedLoadoutTemplates = managedLoadoutTemplates; _managedPlayerSettings = managedPlayerSettings; @@ -567,6 +565,8 @@ namespace GameCult.Aetheria.State.Verse AetheriaRuntimeDaemonFrameDocument RequireManagedFrame() { + managedDaemonFrame ??= latestFrameDocument.Reactive(); + _managedDaemonFrame = managedDaemonFrame; return managedDaemonFrame?.Current ?? throw new InvalidOperationException("Aetheria Verse client has no daemon frame yet."); }