From 7b261aaf47465f2ab88cf9f059b218f4b9ef8044 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 29 Jun 2026 07:14:40 +0100 Subject: [PATCH] Add named current docking document access --- Aetheria.State.Verify/Program.cs | 27 +++++++++---------- .../AetheriaUnityObservedDockingIndex.cs | 2 +- .../AetheriaUnityRuntimeClientProvider.cs | 13 +++++++++ .../Tests/DaemonRuntimeDocumentTests.cs | 2 +- Assets/Scripts/UI/Menu/MenuPanel.cs | 2 +- Assets/Scripts/UI/Menu/TradeMenu.cs | 2 +- .../Runtime/AetheriaClientState.cs | 10 +++++++ 7 files changed, 40 insertions(+), 18 deletions(-) diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 776067e43..c8b0742a9 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -4806,7 +4806,7 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root) "AetheriaRuntimeCurrentDockingDocument", "CultMeshReactiveDocument _currentDocking", "AetheriaUnityRuntimeClientProvider", - ".Reactive(\"unity-runtime-menu-tabs\")", + ".ReactiveCurrentDocking(\"unity-runtime-menu-tabs\")", "docking = _currentDocking.Current", "docking.IsDocked", "GetTabLabel(", @@ -5808,7 +5808,7 @@ static void RequireTradeCargoSelectorUseEveSurface(string root) "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)", "AetheriaRuntimeCurrentDockingDocument", "CultMeshReactiveDocument _currentDocking", - ".Reactive(\"unity-trade\")", + ".ReactiveCurrentDocking(\"unity-trade\")", "docking = _currentDocking.Current", "CultMeshReactiveDocument _stationRefit", ".Reactive(\"unity-trade\")", @@ -7392,7 +7392,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) var tradeMenu = File.ReadAllText(Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "TradeMenu.cs")); var directDockingOffenders = new List(); if (!menuPanel.Contains("CultMeshReactiveDocument _currentDocking", StringComparison.Ordinal) || - !menuPanel.Contains(".Reactive(\"unity-runtime-menu-tabs\")", StringComparison.Ordinal) || + !menuPanel.Contains(".ReactiveCurrentDocking(\"unity-runtime-menu-tabs\")", StringComparison.Ordinal) || !menuPanel.Contains("docking = _currentDocking.Current", StringComparison.Ordinal) || menuPanel.Contains("ResolveClient().State.Latest()", StringComparison.Ordinal)) { @@ -7400,7 +7400,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) } if (!tradeMenu.Contains("CultMeshReactiveDocument _currentDocking", StringComparison.Ordinal) || - !tradeMenu.Contains(".Reactive(\"unity-trade\")", StringComparison.Ordinal) || + !tradeMenu.Contains(".ReactiveCurrentDocking(\"unity-trade\")", StringComparison.Ordinal) || !tradeMenu.Contains("docking = _currentDocking.Current", StringComparison.Ordinal) || tradeMenu.Contains("ResolveClient().State.Latest()", StringComparison.Ordinal)) { @@ -7421,7 +7421,7 @@ static bool HasManagedDockingSnapshotAccess(string source) { if (source.Contains("AetheriaRuntimeCurrentDockingDocument", StringComparison.Ordinal) && source.Contains("CultMeshReactiveDocument _currentDocking", StringComparison.Ordinal) && - source.Contains(".Reactive(", StringComparison.Ordinal) && + source.Contains(".ReactiveCurrentDocking(", StringComparison.Ordinal) && source.Contains("_currentDocking.Current", StringComparison.Ordinal) && !source.Contains("ResolveClient().State.Latest()", StringComparison.Ordinal)) { @@ -7452,12 +7452,10 @@ static bool HasManagedDockingSnapshotAccess(string source) source.Contains("TryReadCurrentDockingDocuments(", StringComparison.Ordinal) && source.Contains("AetheriaUnityRuntimeClientProvider", StringComparison.Ordinal) && source.Contains(".Reactive(\"unity-observed-docking\")", StringComparison.Ordinal) && - source.Contains(".Reactive(\"unity-observed-docking\")", StringComparison.Ordinal) && + source.Contains(".ReactiveCurrentDocking(\"unity-observed-docking\")", StringComparison.Ordinal) && source.Contains(".Reactive(\"unity-observed-docking\")", StringComparison.Ordinal) && source.Contains("_currentDocking?.Current", StringComparison.Ordinal) && source.Contains("_stationRefit?.Current", StringComparison.Ordinal) && - !source.Contains("State?.CurrentDocking()", StringComparison.Ordinal) && - !source.Contains(".State.CurrentDocking()", StringComparison.Ordinal) && !source.Contains("state.Latest()", StringComparison.Ordinal) && !source.Contains("state.Latest()", StringComparison.Ordinal) && !source.Contains("state.Latest()", StringComparison.Ordinal) && @@ -8327,6 +8325,8 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root { "public CultMeshDocumentHandle Document()", "public enum AetheriaClientEveSurface", + "public CultMeshDocumentHandle CurrentDocking()", + "public CultMeshReactiveDocument ReactiveCurrentDocking()", "public static bool TryResolveEveSurface(", "public CultMeshDocumentHandle? EveSurfaceDocument(", "public CultMeshReactiveDocument? ReactiveEveSurface(", @@ -8622,9 +8622,9 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root "AetheriaRuntimeObservedDockingState must not return as a docking aggregate wrapper; callers should own the managed typed docking documents directly."); } - if (!daemonRuntimeDocumentTests.Contains("currentDockingReactive.Current.CurrentEntityKey", StringComparison.Ordinal) || - daemonRuntimeDocumentTests.Contains("AetheriaRuntimeObservedDockingState", StringComparison.Ordinal) || - daemonRuntimeDocumentTests.Contains("client.State.CurrentDocking()", StringComparison.Ordinal)) + if (!daemonRuntimeDocumentTests.Contains("using var currentDockingReactive = client.State.ReactiveCurrentDocking()", StringComparison.Ordinal) || + !daemonRuntimeDocumentTests.Contains("currentDockingReactive.Current.CurrentEntityKey", StringComparison.Ordinal) || + daemonRuntimeDocumentTests.Contains("AetheriaRuntimeObservedDockingState", StringComparison.Ordinal)) { throw new InvalidOperationException( "Daemon runtime document tests must teach direct docking samples from caller-owned managed reactive typed documents."); @@ -13550,7 +13550,7 @@ static void RequireMainMenuContinueRunState(string root) "TryReadCurrentDockingDocuments(", "AetheriaUnityRuntimeClientProvider", ".Reactive(\"unity-observed-docking\")", - ".Reactive(\"unity-observed-docking\")", + ".ReactiveCurrentDocking(\"unity-observed-docking\")", ".Reactive(\"unity-observed-docking\")", "_currentDocking?.Current", "_stationRefit?.Current", @@ -13580,8 +13580,6 @@ static void RequireMainMenuContinueRunState(string root) "state.Reactive()", "AetheriaRuntimeObservedDockingState", "new AetheriaRuntimeObservedDockingState(", - "State?.CurrentDocking()", - ".State.CurrentDocking()", "ReactiveEntity()", "ReactiveDocking()" }; @@ -16341,6 +16339,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) "public static AetheriaUi Ui(string runtimeId = \"\")", "public static AetheriaUi Ui(", "public static CultMeshReactiveDocument Reactive(string runtimeId = \"\")", + "public static CultMeshReactiveDocument ReactiveCurrentDocking(", "public static CultMeshReactiveDocument Reactive(", "AetheriaClientEveSurface surface", "public static CultMeshReactiveDocument ReactiveEveSurface(", diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs index 4d1f0d28e..48c655860 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs @@ -207,7 +207,7 @@ public sealed class AetheriaUnityObservedDockingIndex : IDisposable _currentEntity ??= AetheriaUnityRuntimeClientProvider .Reactive("unity-observed-docking"); _currentDocking ??= AetheriaUnityRuntimeClientProvider - .Reactive("unity-observed-docking"); + .ReactiveCurrentDocking("unity-observed-docking"); _stationRefit ??= AetheriaUnityRuntimeClientProvider .Reactive("unity-observed-docking"); } diff --git a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs index 5db376524..ce3bf4af2 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs @@ -111,6 +111,19 @@ public static class AetheriaUnityRuntimeClientProvider return RuntimeState(runtimeId).Reactive(); } + public static CultMeshReactiveDocument ReactiveCurrentDocking( + string runtimeId = "") + { + return RuntimeState(runtimeId).ReactiveCurrentDocking(); + } + + public static CultMeshReactiveDocument ReactiveCurrentDocking( + AetheriaRuntimeStateBootReport stateBoot, + string runtimeId = "") + { + return RuntimeState(stateBoot, runtimeId).ReactiveCurrentDocking(); + } + public static CultMeshReactiveDocument Reactive( AetheriaRuntimeStateBootReport stateBoot, string runtimeId = "") diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index e97ef71f3..6992d9234 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -218,7 +218,7 @@ public class DaemonRuntimeDocumentTests using var zoneContactsReactive = client.State.Reactive(); using var currentZoneReactive = client.State.Reactive(); using var currentEntityDocumentReactive = client.State.Reactive(); - using var currentDockingReactive = client.State.Reactive(); + using var currentDockingReactive = client.State.ReactiveCurrentDocking(); using var stationRefitReactive = client.State.Reactive(); using var zoneDetailsReactive = client.State.Reactive(0); using var selectedObjectReactive = client.State.Reactive(0); diff --git a/Assets/Scripts/UI/Menu/MenuPanel.cs b/Assets/Scripts/UI/Menu/MenuPanel.cs index 8da020c12..35c6399a3 100644 --- a/Assets/Scripts/UI/Menu/MenuPanel.cs +++ b/Assets/Scripts/UI/Menu/MenuPanel.cs @@ -173,7 +173,7 @@ public class MenuPanel : MonoBehaviour try { _currentDocking ??= AetheriaUnityRuntimeClientProvider - .Reactive("unity-runtime-menu-tabs"); + .ReactiveCurrentDocking("unity-runtime-menu-tabs"); docking = _currentDocking.Current; return docking != null; } diff --git a/Assets/Scripts/UI/Menu/TradeMenu.cs b/Assets/Scripts/UI/Menu/TradeMenu.cs index 9e7e4ea69..9dd799e2c 100644 --- a/Assets/Scripts/UI/Menu/TradeMenu.cs +++ b/Assets/Scripts/UI/Menu/TradeMenu.cs @@ -534,7 +534,7 @@ public class TradeMenu : MonoBehaviour try { _currentDocking ??= AetheriaUnityRuntimeClientProvider - .Reactive("unity-trade"); + .ReactiveCurrentDocking("unity-trade"); docking = _currentDocking.Current; return docking != null; } diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs index 1399ed435..7245fbaa8 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs @@ -193,6 +193,16 @@ namespace GameCult.Aetheria.State.Verse return Document().Reactive(); } + public CultMeshDocumentHandle CurrentDocking() + { + return CurrentDockingDocument; + } + + public CultMeshReactiveDocument ReactiveCurrentDocking() + { + return CurrentDocking().Reactive(); + } + public static bool TryResolveEveSurface( string? surfaceId, out AetheriaClientEveSurface surface)