From 64a97d2f0a0eac03a73396fce9f2b9dd1166a216 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 28 Jun 2026 15:08:05 +0100 Subject: [PATCH] Read menu docking from managed state --- Aetheria.State.Verify/Program.cs | 22 ++++++++++---- Assets/Scripts/UI/Menu/MenuPanel.cs | 37 +++++------------------- Assets/Scripts/UI/Menu/TradeMenu.cs | 45 +++++++++-------------------- 3 files changed, 37 insertions(+), 67 deletions(-) diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index bc09a1510..63d1ee8eb 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -4724,8 +4724,8 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root) "new AetheriaRuntimeMenuTabProjectionOption(", "ResolveVisibleTabs(", "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)", - "TryResolveObservedDockingIndex(out var dockingIndex)", - "dockingIndex.TryResolveCurrentDocking(out docking)", + "AetheriaRuntimeObservedDockingState", + "ResolveClient().State.CurrentDocking()", "docking.IsDocked", "AetheriaClient", "AetheriaUnityRuntimeClientProvider.ResolveClient(", @@ -4803,7 +4803,7 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root) source.Contains("private AetheriaClientDockingSnapshot ResolveCurrentDocking()", StringComparison.Ordinal)) { throw new InvalidOperationException( - "MenuPanel tab visibility must read typed current-docking state through AetheriaUnityObservedDockingIndex instead of direct docking caches or ActionGameManager observed adapters."); + "MenuPanel tab visibility must read managed typed current-docking state instead of direct docking caches or ActionGameManager observed adapters."); } var requiredProjectionBuilderSymbols = new[] @@ -5670,9 +5670,9 @@ static void RequireTradeCargoSelectorUseEveSurface(string root) "AetheriaRuntimeTradeCargoSelectorCommandKind.Close", "AetheriaRuntimeTradeCargoSelectorCommandKind.Select", "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)", - "TryResolveObservedDockingIndex(out var dockingIndex)", - "dockingIndex.TryResolveCurrentDocking(out docking)", - "dockingIndex.ResolveStationRefit()", + "AetheriaRuntimeObservedDockingState", + "ResolveClient().State.CurrentDocking()", + "docking.Refit", "SetTargetCargo(", "selection.EntityKey", "OwnedQuantity", @@ -7117,6 +7117,16 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) static bool HasManagedDockingSnapshotAccess(string source) { + if (source.Contains("AetheriaRuntimeObservedDockingState", StringComparison.Ordinal) && + source.Contains("ResolveClient().State.CurrentDocking()", StringComparison.Ordinal) && + !source.Contains("AetheriaUnityObservedDockingIndex", StringComparison.Ordinal) && + !source.Contains("TryResolveObservedDockingIndex(out var dockingIndex)", StringComparison.Ordinal) && + !source.Contains("AetheriaClientReactiveDockingState _dockingState", StringComparison.Ordinal) && + !source.Contains(".ReactiveDockingState()", StringComparison.Ordinal)) + { + return true; + } + if (source.Contains("AetheriaUnityObservedDockingIndex", StringComparison.Ordinal) && source.Contains("TryResolveObservedDockingIndex(out var dockingIndex)", StringComparison.Ordinal) && source.Contains("dockingIndex.TryResolveCurrent", StringComparison.Ordinal) && diff --git a/Assets/Scripts/UI/Menu/MenuPanel.cs b/Assets/Scripts/UI/Menu/MenuPanel.cs index c071baa8e..710ea68bd 100644 --- a/Assets/Scripts/UI/Menu/MenuPanel.cs +++ b/Assets/Scripts/UI/Menu/MenuPanel.cs @@ -31,21 +31,12 @@ public class MenuPanel : MonoBehaviour private MenuTabBinding _current; private UIDocument _tabSurfaceDocument; private readonly AetheriaEveUnitySurfaceChrome _tabSurfaceChrome = new AetheriaEveUnitySurfaceChrome(); - private AetheriaUnityObservedEntityIndex _observedEntityIndex; - private AetheriaUnityObservedDockingIndex _observedDockingIndex; private string _clientStatePath = ""; public MenuTab CurrentTab { get; private set; } public void SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex) { - if (!ReferenceEquals(_observedEntityIndex, observedEntityIndex)) - { - _observedDockingIndex?.Dispose(); - _observedDockingIndex = null; - } - - _observedEntityIndex = observedEntityIndex; } public void ShowTab(MenuTab tab) @@ -107,8 +98,6 @@ public class MenuPanel : MonoBehaviour AetheriaEveUnitySurfaceHost.DestroyDocument(_tabSurfaceDocument); _tabSurfaceDocument = null; } - _observedDockingIndex?.Dispose(); - _observedDockingIndex = null; } private void RenderTabSurface() @@ -181,27 +170,19 @@ public class MenuPanel : MonoBehaviour .ToArray(); } - private bool TryResolveCurrentDocking(out AetheriaRuntimeCurrentDockingDocument docking) + private bool TryResolveCurrentDocking(out AetheriaRuntimeObservedDockingState docking) { docking = null; - if (TryResolveObservedDockingIndex(out var dockingIndex) && - dockingIndex.TryResolveCurrentDocking(out docking)) + try { - return true; + docking = ResolveClient().State.CurrentDocking(); + return docking != null; } - - Debug.LogWarning("Failed to read Aetheria current docking for runtime menu tabs."); - return false; - } - - private bool TryResolveObservedDockingIndex(out AetheriaUnityObservedDockingIndex dockingIndex) - { - dockingIndex = null; - if (_observedEntityIndex == null) + catch (Exception ex) + { + Debug.LogWarning($"Failed to read Aetheria current docking for runtime menu tabs: {ex.Message}"); return false; - - dockingIndex = _observedDockingIndex ??= new AetheriaUnityObservedDockingIndex(ResolveClient, _observedEntityIndex); - return true; + } } private AetheriaClient ResolveClient() @@ -210,8 +191,6 @@ public class MenuPanel : MonoBehaviour if (!string.Equals(_clientStatePath, stateBoot.StateFilePath, StringComparison.Ordinal)) { _clientStatePath = stateBoot.StateFilePath; - _observedDockingIndex?.Dispose(); - _observedDockingIndex = null; } return AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot, "unity-runtime-menu-tabs"); diff --git a/Assets/Scripts/UI/Menu/TradeMenu.cs b/Assets/Scripts/UI/Menu/TradeMenu.cs index 11ca7c324..3f62a9f7d 100644 --- a/Assets/Scripts/UI/Menu/TradeMenu.cs +++ b/Assets/Scripts/UI/Menu/TradeMenu.cs @@ -39,8 +39,6 @@ public class TradeMenu : MonoBehaviour private string _clientStatePath = ""; private AetheriaRuntimeCatalogSession _catalog; private AetheriaRuntimePlayerSettingsSession _playerSettings; - private AetheriaUnityObservedEntityIndex _observedEntityIndex; - private AetheriaUnityObservedDockingIndex _observedDockingIndex; private readonly AetheriaEveUnitySurfaceChrome _cargoSelectorSurfaceChrome = PanelChrome(360f, 420f, Align.FlexEnd); private readonly AetheriaEveUnitySurfaceChrome _filterSurfaceChrome = PanelChrome(420f, 520f, Align.FlexStart); private readonly AetheriaEveUnitySurfaceChrome _rowActionSurfaceChrome = PanelChrome(320f, 360f, Align.FlexStart); @@ -57,19 +55,12 @@ public class TradeMenu : MonoBehaviour public void SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex) { - if (!ReferenceEquals(_observedEntityIndex, observedEntityIndex)) - { - _observedDockingIndex?.Dispose(); - _observedDockingIndex = null; - InvalidateStationRefit(); - } - - _observedEntityIndex = observedEntityIndex; + InvalidateStationRefit(); } private void OnEnable() { - if (!TryResolveCurrentDocking(out var docking) || + if (!TryResolveObservedDocking(out var docking) || docking.IsDocked != true || string.IsNullOrWhiteSpace(docking.DockParentEntityKey) || docking.DockingBayIndex < 0) @@ -507,7 +498,7 @@ public class TradeMenu : MonoBehaviour private bool TryResolveCurrentDockingTargetEntityKey(out string targetEntityKey) { targetEntityKey = ""; - if (!TryResolveCurrentDocking(out var docking) || + if (!TryResolveObservedDocking(out var docking) || docking.IsDocked != true || string.IsNullOrWhiteSpace(docking.DockParentEntityKey)) { @@ -523,33 +514,25 @@ public class TradeMenu : MonoBehaviour if (_stationRefit != null) return _stationRefit; - _stationRefit = TryResolveObservedDockingIndex(out var dockingIndex) - ? dockingIndex.ResolveStationRefit() + _stationRefit = TryResolveObservedDocking(out var docking) + ? docking.Refit : null; return _stationRefit; } - private bool TryResolveCurrentDocking(out AetheriaRuntimeCurrentDockingDocument docking) + private bool TryResolveObservedDocking(out AetheriaRuntimeObservedDockingState docking) { docking = null; - if (TryResolveObservedDockingIndex(out var dockingIndex) && - dockingIndex.TryResolveCurrentDocking(out docking)) + try { - return true; + docking = ResolveClient().State.CurrentDocking(); + return docking != null; } - - Debug.LogWarning("Failed to read Aetheria docking state for trade menu."); - return false; - } - - private bool TryResolveObservedDockingIndex(out AetheriaUnityObservedDockingIndex dockingIndex) - { - dockingIndex = null; - if (_observedEntityIndex == null) + catch (Exception ex) + { + Debug.LogWarning($"Failed to read Aetheria docking state for trade menu: {ex.Message}"); return false; - - dockingIndex = _observedDockingIndex ??= new AetheriaUnityObservedDockingIndex(ResolveClient, _observedEntityIndex); - return true; + } } private void InvalidateStationRefit() @@ -619,10 +602,8 @@ public class TradeMenu : MonoBehaviour { _catalog?.Dispose(); _playerSettings?.Dispose(); - _observedDockingIndex?.Dispose(); _catalog = null; _playerSettings = null; - _observedDockingIndex = null; _stationRefit = null; }