From 1335802aff3b051d7cb4c3fc9ae99badcd08034a Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 28 Jun 2026 09:10:04 +0100 Subject: [PATCH] Use reactive player settings in map renderer --- Aetheria.State.Verify/Program.cs | 28 +++++++++++++++++++++++- Assets/Scripts/UI/Menu/MapRenderer.cs | 31 ++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 3b9a24962..f547a5f0d 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -7107,6 +7107,32 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) string.Join(", ", missingSchematicDisplaySymbols)); } + var mapRenderer = File.ReadAllText(Path.Combine( + root, + "Assets", + "Scripts", + "UI", + "Menu", + "MapRenderer.cs")); + var requiredMapRendererSharedDocumentSymbols = new[] + { + "CultMeshReactiveDocument _playerSettings", + ".Settings", + ".ReactivePlayer()", + "_playerSettings?.Dispose()", + "_playerSettings?.Current", + "private void OnDestroy()" + }; + var missingMapRendererSharedDocumentSymbols = requiredMapRendererSharedDocumentSymbols + .Where(symbol => !mapRenderer.Contains(symbol, StringComparison.Ordinal)) + .ToArray(); + if (missingMapRendererSharedDocumentSymbols.Length > 0) + { + throw new InvalidOperationException( + "MapRenderer should bind player settings through the managed reactive Aetheria settings document: " + + string.Join(", ", missingMapRendererSharedDocumentSymbols)); + } + var tradeMenu = File.ReadAllText(Path.Combine( root, "Assets", @@ -12819,7 +12845,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) !mapRenderer.Contains(".LatestObjects(viewport)", StringComparison.Ordinal) || !mapRenderer.Contains(".LatestRenderSplats(viewport)", StringComparison.Ordinal) || !mapRenderer.Contains(".Settings", StringComparison.Ordinal) || - !mapRenderer.Contains(".LatestPlayer()", StringComparison.Ordinal) || + !mapRenderer.Contains(".ReactivePlayer()", StringComparison.Ordinal) || !sectorRenderer.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) || !sectorRenderer.Contains(".Aetheria()", StringComparison.Ordinal) || !sectorRenderer.Contains(".LatestSectorMap()", StringComparison.Ordinal) || diff --git a/Assets/Scripts/UI/Menu/MapRenderer.cs b/Assets/Scripts/UI/Menu/MapRenderer.cs index ab621dacc..674cef012 100644 --- a/Assets/Scripts/UI/Menu/MapRenderer.cs +++ b/Assets/Scripts/UI/Menu/MapRenderer.cs @@ -6,6 +6,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; +using GameCult.Mesh; using GameCult.Aetheria.State.Verse; using TMPro; using UnityEngine; @@ -43,6 +44,8 @@ public class MapRenderer : MonoBehaviour private AetheriaRuntimeRenderSplatsViewportDocument _renderSplatsViewport; private float _nextViewportRefreshTime; private readonly List _rtsIconPool = new List(); + private string _clientStatePath = ""; + private CultMeshReactiveDocument _playerSettings; void Start() { @@ -311,23 +314,41 @@ public class MapRenderer : MonoBehaviour { try { - return ResolveClient() + _playerSettings ??= ResolveClient() .Aetheria() .Settings - .LatestPlayer() - ?.ShowAsteroidsInMinimap ?? false; + .ReactivePlayer(); + return _playerSettings?.Current?.ShowAsteroidsInMinimap ?? false; } catch (Exception ex) { - Debug.LogWarning($"Failed to read Aetheria map graphics settings from local Verse state: {ex.Message}"); + Debug.LogWarning($"Failed to bind Aetheria map graphics settings from local Verse state: {ex.Message}"); return false; } } private AetheriaClient ResolveClient() { + var stateBoot = AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory); + if (!string.Equals(_clientStatePath, stateBoot.StateFilePath, StringComparison.Ordinal)) + { + _clientStatePath = stateBoot.StateFilePath; + ClearClientCaches(); + } + return AetheriaUnityRuntimeClientProvider.ResolveClient( - AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory), + stateBoot, "unity-map-renderer"); } + + private void ClearClientCaches() + { + _playerSettings?.Dispose(); + _playerSettings = null; + } + + private void OnDestroy() + { + ClearClientCaches(); + } }