From 0830588cbbbb1fb5a89251021dd692cfe3bcd2c0 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 29 Jun 2026 02:42:08 +0100 Subject: [PATCH] Flatten Aetheria CultMesh reactive access --- Aetheria.State.Verify/Program.cs | 361 ++++++++++-------- Assets/Scripts/Gameplay/ActionBarSlot.cs | 2 +- .../Gameplay/AetheriaDaemonObserver.cs | 6 +- .../AetheriaUnityGameplayBootShell.cs | 4 +- .../AetheriaUnityObservedDockingIndex.cs | 6 +- .../AetheriaUnityObservedTargetQuery.cs | 3 +- .../AetheriaUnityRenderSplatViewportSource.cs | 4 +- .../AetheriaUnityRuntimeClientProvider.cs | 3 +- .../Tests/DaemonRuntimeDocumentTests.cs | 76 ++-- .../StarbridgePlayerSeatDocumentTests.cs | 3 +- Assets/Scripts/UI/HUD/SchematicDisplay.cs | 6 +- .../UI/InputScreen/InputDisplayLayout.cs | 3 +- Assets/Scripts/UI/MainMenu.cs | 9 +- Assets/Scripts/UI/Menu/InventoryMenu.cs | 15 +- Assets/Scripts/UI/Menu/InventoryPanel.cs | 18 +- Assets/Scripts/UI/Menu/MapRenderer.cs | 11 +- Assets/Scripts/UI/Menu/MenuPanel.cs | 2 +- Assets/Scripts/UI/Menu/SectorMap.cs | 3 +- Assets/Scripts/UI/Menu/SectorRenderer.cs | 15 +- Assets/Scripts/UI/Menu/TradeMenu.cs | 9 +- .../Zone Display/VolumeCloudRenderer.cs | 3 +- Assets/Scripts/Zone Display/ZoneRenderer.cs | 8 +- .../Runtime/AetheriaEveSurfacePresenter.cs | 8 +- .../Runtime/AetheriaClient.cs | 6 +- .../Runtime/AetheriaClientState.cs | 117 +----- .../Runtime/AetheriaRuntimeVerseClient.cs | 10 +- 26 files changed, 306 insertions(+), 405 deletions(-) diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index c3389f7ae..7c2f32d15 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -2430,10 +2430,10 @@ static void RequireDaemonRenderQueryAuthority(string root) "var entityIndex = view.EntityIndex[i];", "private AetheriaDaemonObserver ResolveDaemonObserver()", "FindAnyObjectByType()", - ".Viewports", "ResolveObjectsViewport(viewport)", "private AetheriaRuntimeObjectsViewportDocument ResolveObjectsViewport(AetheriaRuntimeXzRect viewport)", - ".Reactive(viewportBounds)", + ".Document(viewportBounds)", + ".Reactive();", "_objectsViewport?.Current", "foreach (var entity in objects?.Objects ?? Array.Empty())", "_observedEntitySnapshotsByDaemonIndex.TryGetValue(entityIndex, out var entity)", @@ -2452,7 +2452,7 @@ static void RequireDaemonRenderQueryAuthority(string root) "beltPose.InstancePoses ?? Array.Empty()", "private void RefreshDaemonContactRows()", ".State", - ".Reactive()", + ".Document().Reactive()", "private void RefreshDaemonCompassMarkers()", "private void RefreshDaemonVisibleEntityInstances()", "PowerPulse(", @@ -2561,9 +2561,9 @@ static void RequireDaemonRenderQueryAuthority(string root) "ResolveCatalog()", "ResolveCurrentEntityHudStatus()", "AetheriaUnityRuntimeClientProvider.ResolveClient(", - "ResolveClient().State.Reactive()", - "ResolveClient().State.Reactive()", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", + "ResolveClient().State.Document().Reactive()", + "ResolveClient().State.Document().Reactive()", "return _currentEntity?.Current?.Hud ?? new AetheriaRuntimeCurrentEntityHudStatus();", "_currentEntity?.Dispose()", "hud.OverrideShutdown", @@ -3213,10 +3213,10 @@ static void RequireEveRuntimeBootstrap(string root) "AetheriaUnityRuntimeClientProvider.ResolveClient(", "CultMeshReactiveDocument", "ResolveReactiveDaemonSurfaceState(", - "client.State.Reactive(AetheriaClientEveSurface.Game)", - "client.State.Reactive(AetheriaClientEveSurface.GameTui)", - "client.State.Reactive(AetheriaClientEveSurface.Editor)", - "client.State.Reactive(AetheriaClientEveSurface.EditorTui)", + "client.State.Document(AetheriaClientEveSurface.Game).Reactive()", + "client.State.Document(AetheriaClientEveSurface.GameTui).Reactive()", + "client.State.Document(AetheriaClientEveSurface.Editor).Reactive()", + "client.State.Document(AetheriaClientEveSurface.EditorTui).Reactive()", "DisposeReactiveSurfaceState()", "AetheriaRuntimeEveSurfaceAdapter.ToEveSurfaceDocument(", "private bool ShouldMountSurface(", @@ -4244,7 +4244,7 @@ static void RequireRuntimeInputScreenUsesEveSurface(string root) "InputDisplayLayout", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -4552,9 +4552,9 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root) "ProjectZoneDetailsSurfaceState(", "AetheriaUnityRuntimeClientProvider.ResolveClient(", ".State", - ".Reactive()", - ".Details", - ".Reactive(zoneIndex)", + ".Document().Reactive()", + ".Document(zoneIndex)", + ".Reactive();", "_zoneDetails?.Current", "AetheriaClient", "AetheriaRuntimeZoneDetailsSurfaceCommands.TryRead(request, out var command)", @@ -4577,7 +4577,7 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root) "SectorRenderer", "AetheriaRuntimeSectorMapDocument", "_sectorMap", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeSectorMapSession", ".ObserveSectorMap()"); RequireReactiveTypedDocumentAccess( @@ -4585,7 +4585,7 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root) "SectorRenderer", "AetheriaRuntimeCurrentZoneDocument", "_currentZone", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeCurrentZoneSession", ".ObserveZone()"); RequireReactiveTypedDocumentAccess( @@ -4593,7 +4593,7 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root) "SectorRenderer", "AetheriaRuntimeZoneDetailsDocument", "_zoneDetails", - ".Reactive(zoneIndex)", + ".Document(zoneIndex).Reactive()", "AetheriaRuntimeZoneDetailsSession", ".ObserveZone(zoneIndex)"); RequireReactiveTypedDocumentAccess( @@ -4601,7 +4601,7 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root) "SectorRenderer", "AetheriaRuntimeCatalogSnapshot", "_catalog", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "AetheriaRuntimeCatalogSession", "ResolveClient().State.ObserveCatalog()"); RequireReactiveTypedDocumentAccess( @@ -4609,7 +4609,7 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root) "SectorRenderer", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -4770,7 +4770,7 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root) "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)", "AetheriaRuntimeCurrentDockingDocument", "CultMeshReactiveDocument _currentDocking", - "_currentDocking ??= ResolveClient().State.Reactive()", + "_currentDocking ??= ResolveClient().State.Document().Reactive()", "docking = _currentDocking.Current", "docking.IsDocked", "AetheriaClient", @@ -5734,10 +5734,10 @@ static void RequireTradeCargoSelectorUseEveSurface(string root) "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)", "AetheriaRuntimeCurrentDockingDocument", "CultMeshReactiveDocument _currentDocking", - "_currentDocking ??= ResolveClient().State.Reactive()", + "_currentDocking ??= ResolveClient().State.Document().Reactive()", "docking = _currentDocking.Current", "CultMeshReactiveDocument _stationRefit", - "_stationRefit = ResolveClient().State.Reactive()", + "_stationRefit = ResolveClient().State.Document().Reactive()", "return _stationRefit?.Current", "SetTargetCargo(", "selection.EntityKey", @@ -7037,12 +7037,12 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) } var clientState = File.ReadAllText(clientStatePath); - if (!clientState.Contains("public CultMeshReactiveDocument Reactive(", StringComparison.Ordinal) || - !clientState.Contains("public CultMeshReactiveDocument Reactive(", StringComparison.Ordinal) || - !clientState.Contains("public CultMeshReactiveDocument Reactive(", StringComparison.Ordinal)) + if (!clientState.Contains("public CultMeshDocumentHandle Document()", StringComparison.Ordinal) || + !clientState.Contains("public CultMeshDocumentHandle Document(int entityOrZoneIndex)", StringComparison.Ordinal) || + clientState.Contains("public CultMeshReactiveDocument Reactive(", StringComparison.Ordinal)) { throw new InvalidOperationException( - "AetheriaClientState must expose direct managed reactive typed access for current entity, station refit, and indexed inventory documents."); + "AetheriaClientState must expose typed document handles for current entity, station refit, and indexed inventory documents while leaving reactivity to CultMesh handles."); } var sources = new Dictionary @@ -7056,16 +7056,22 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) var requiredSymbols = new[] { "ResolveCurrentEntity()", - ".Reactive()", "ResolveStationRefitDocument()", - ".Reactive()", "ResolveInventory(entityIndex)", - ".Reactive(entityIndex)", "_inventory?.Current" }; var missingSymbols = requiredSymbols .Where(symbol => !source.Contains(symbol, StringComparison.Ordinal)) .ToArray(); + var requiredCompactedSymbols = new[] + { + ".Document().Reactive()", + ".Document().Reactive()", + ".Document(entityIndex).Reactive()" + }; + missingSymbols = missingSymbols + .Concat(requiredCompactedSymbols.Where(symbol => !compact.Contains(symbol, StringComparison.Ordinal))) + .ToArray(); if (missingSymbols.Length > 0) { throw new InvalidOperationException( @@ -7104,7 +7110,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) name, "AetheriaRuntimeCurrentEntityDocument", "_currentEntity", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeCurrentEntitySession", ".ObserveEntity()"); RequireReactiveTypedDocumentAccess( @@ -7112,7 +7118,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) name, "AetheriaRuntimeStationRefitDocument", "_stationRefit", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeStationRefitSession", ".ObserveStationRefit()"); RequireReactiveTypedDocumentAccess( @@ -7120,7 +7126,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) name, "AetheriaRuntimeInventoryDocument", "_inventory", - ".Reactive(entityIndex)", + ".Document(entityIndex).Reactive()", "AetheriaRuntimeInventorySession", ".ObserveInventory(entityIndex)"); } @@ -7144,8 +7150,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) { "public CultMeshDocumentHandle StationRefit { get; }", "public CultMeshDocumentHandle CurrentDockingDocument { get; }", - "public CultMeshDocumentHandle Document()", - "public CultMeshReactiveDocument Reactive(" + "public CultMeshDocumentHandle Document()" }; var missingClientSymbols = requiredClientSymbols .Where(symbol => !clientState.Contains(symbol, StringComparison.Ordinal)) @@ -7232,7 +7237,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("_currentDocking ??= ResolveClient().State.Reactive()", StringComparison.Ordinal) || + !menuPanel.Contains("_currentDocking ??= ResolveClient().State.Document().Reactive()", StringComparison.Ordinal) || !menuPanel.Contains("docking = _currentDocking.Current", StringComparison.Ordinal) || menuPanel.Contains("ResolveClient().State.Latest()", StringComparison.Ordinal)) { @@ -7240,7 +7245,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) } if (!tradeMenu.Contains("CultMeshReactiveDocument _currentDocking", StringComparison.Ordinal) || - !tradeMenu.Contains("_currentDocking ??= ResolveClient().State.Reactive()", StringComparison.Ordinal) || + !tradeMenu.Contains("_currentDocking ??= ResolveClient().State.Document().Reactive()", StringComparison.Ordinal) || !tradeMenu.Contains("docking = _currentDocking.Current", StringComparison.Ordinal) || tradeMenu.Contains("ResolveClient().State.Latest()", StringComparison.Ordinal)) { @@ -7261,7 +7266,7 @@ static bool HasManagedDockingSnapshotAccess(string source) { if (source.Contains("AetheriaRuntimeCurrentDockingDocument", StringComparison.Ordinal) && source.Contains("CultMeshReactiveDocument _currentDocking", StringComparison.Ordinal) && - source.Contains("State.Reactive()", StringComparison.Ordinal) && + source.Contains("State.Document().Reactive()", StringComparison.Ordinal) && source.Contains("_currentDocking.Current", StringComparison.Ordinal) && !source.Contains("ResolveClient().State.Latest()", StringComparison.Ordinal)) { @@ -7306,9 +7311,9 @@ static bool HasManagedDockingSnapshotAccess(string source) source.Contains("CultMeshReactiveDocument _currentDocking", StringComparison.Ordinal) && source.Contains("CultMeshReactiveDocument _stationRefit", StringComparison.Ordinal) && source.Contains("AetheriaRuntimeObservedDockingState.TryCreateCurrent(", StringComparison.Ordinal) && - source.Contains("state.Reactive()", StringComparison.Ordinal) && - source.Contains("state.Reactive()", StringComparison.Ordinal) && - source.Contains("state.Reactive()", StringComparison.Ordinal) && + source.Contains("state.Document().Reactive()", StringComparison.Ordinal) && + source.Contains("state.Document().Reactive()", StringComparison.Ordinal) && + source.Contains("state.Document().Reactive()", StringComparison.Ordinal) && !source.Contains("State?.CurrentDocking()", StringComparison.Ordinal) && !source.Contains(".State.CurrentDocking()", StringComparison.Ordinal) && !source.Contains("state.Latest()", StringComparison.Ordinal) && @@ -7333,12 +7338,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) var requiredClientSymbols = new[] { "public CultMeshDocumentHandle Document()", - "public Task> ReactiveAsync(", - "public CultMeshReactiveDocument Reactive(", - "public Task> ReactiveAsync(", - "public CultMeshReactiveDocument Reactive(", - "public CultMeshDocumentHandle Document(int entityOrZoneIndex)", - "public CultMeshReactiveDocument Reactive(" + "public CultMeshDocumentHandle Document(int entityOrZoneIndex)" }; var missingClientSymbols = requiredClientSymbols .Where(symbol => !clientState.Contains(symbol, StringComparison.Ordinal)) @@ -7346,15 +7346,18 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) if (missingClientSymbols.Length > 0) { throw new InvalidOperationException( - "AetheriaClientState must expose generic managed reactive access and document handles for shared Unity documents: " + + "AetheriaClientState must expose typed document handles for shared Unity documents, with reactive sync owned by CultMesh handles: " + string.Join(", ", missingClientSymbols)); } if (clientState.Contains("public Task LatestAsync", StringComparison.Ordinal) || - clientState.Contains("public TDocument Latest", StringComparison.Ordinal)) + clientState.Contains("public TDocument Latest", StringComparison.Ordinal) || + clientState.Contains("public Task> ReactiveAsync", StringComparison.Ordinal) || + clientState.Contains("public CultMeshReactiveDocument Reactive", StringComparison.Ordinal) || + clientState.Contains("public Observable Watch", StringComparison.Ordinal)) { throw new InvalidOperationException( - "AetheriaClientState must not expose generic latest snapshot shortcuts; callers should hold Document() or Reactive() handles."); + "AetheriaClientState must not expose generic latest/reactive/watch shortcuts; callers should hold Document() handles and call CultMesh handle APIs."); } var unityPaths = new[] @@ -7418,7 +7421,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) { "public abstract class ActionBarBinding : IDisposable", "CultMeshReactiveDocument _catalog", - "Client.State.Reactive()", + "Client.State.Document().Reactive()", "_catalog?.Current?.FindItem(item, x => x.ItemKey)", "binding?.Dispose()", "private void OnDestroy()" @@ -7458,9 +7461,9 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "CultMeshReactiveDocument _catalog", "CultMeshReactiveDocument _playerSettings", "CultMeshReactiveDocument _currentEntity", - "ResolveClient().State.Reactive()", - "ResolveClient().State.Reactive()", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", + "ResolveClient().State.Document().Reactive()", + "ResolveClient().State.Document().Reactive()", "_catalog?.Dispose()", "_playerSettings?.Dispose()", "_currentEntity?.Dispose()", @@ -7514,7 +7517,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) var requiredVolumeCloudSymbols = new[] { "CultMeshReactiveDocument _playerSettings", - ".Reactive()", + ".Document().Reactive()", "_playerSettings?.Dispose()", "_playerSettings?.Current" }; @@ -7544,7 +7547,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) var requiredObservedTargetSymbols = new[] { "CultMeshReactiveDocument _zoneContacts", - ".Reactive()", + ".Document().Reactive()", "_zoneContacts?.Dispose()", "_zoneContacts?.Current" }; @@ -7576,8 +7579,6 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) { "CultMeshReactiveDocument _objectsViewport", "CultMeshReactiveDocument _renderSplatsViewport", - ".Reactive(viewport)", - ".Reactive(viewport)", "ClearViewportCaches()", "_objectsViewport?.Dispose()", "_renderSplatsViewport?.Dispose()", @@ -7588,6 +7589,14 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) var missingMapRendererSharedDocumentSymbols = requiredMapRendererSharedDocumentSymbols .Where(symbol => !mapRenderer.Contains(symbol, StringComparison.Ordinal)) .ToArray(); + var compactMapRenderer = CompactSource(mapRenderer); + missingMapRendererSharedDocumentSymbols = missingMapRendererSharedDocumentSymbols + .Concat(new[] + { + ".Document(viewport).Reactive()", + ".Document(viewport).Reactive()" + }.Where(symbol => !compactMapRenderer.Contains(symbol, StringComparison.Ordinal))) + .ToArray(); if (missingMapRendererSharedDocumentSymbols.Length > 0) { throw new InvalidOperationException( @@ -7600,7 +7609,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MapRenderer", "AetheriaRuntimeObjectsViewportDocument", "_objectsViewport", - ".Reactive(viewport)", + ".Document(viewport).Reactive()", "AetheriaRuntimeObjectsViewportSession", ".ObserveObjects(viewport)"); RequireReactiveTypedDocumentAccess( @@ -7608,7 +7617,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MapRenderer", "AetheriaRuntimeRenderSplatsViewportDocument", "_renderSplatsViewport", - ".Reactive(viewport)", + ".Document(viewport).Reactive()", "AetheriaRuntimeRenderSplatsViewportSession", ".ObserveRenderSplats(viewport)"); RequireReactiveTypedDocumentAccess( @@ -7616,7 +7625,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MapRenderer", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -7668,7 +7677,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MainMenu", "AetheriaRuntimeSectorMapDocument", "_sectorMap", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeSectorMapSession", ".ObserveSectorMap()"); RequireReactiveTypedDocumentAccess( @@ -7676,7 +7685,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MainMenu", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); RequireReactiveTypedDocumentAccess( @@ -7684,7 +7693,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MainMenu", "AetheriaRuntimeVerseHostSettingsDocument", "_verseHostSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeVerseHostSettingsSession", ".ObserveVerseHost()"); @@ -7711,7 +7720,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "TradeMenu", "AetheriaRuntimeCatalogSnapshot", "_catalog", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "AetheriaRuntimeCatalogSession", "ResolveClient().State.ObserveCatalog()"); RequireReactiveTypedDocumentAccess( @@ -7719,7 +7728,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "TradeMenu", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -7746,7 +7755,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "InventoryMenu", "AetheriaRuntimeCatalogSnapshot", "_catalog", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "AetheriaRuntimeCatalogSession", "ResolveClient().State.ObserveCatalog()"); RequireReactiveTypedDocumentAccess( @@ -7754,7 +7763,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "InventoryMenu", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -7784,7 +7793,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "InventoryPanel", "AetheriaRuntimeCatalogSnapshot", "_catalog", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "AetheriaRuntimeCatalogSession", "ResolveClient().State.ObserveCatalog()"); RequireReactiveTypedDocumentAccess( @@ -7792,7 +7801,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "InventoryPanel", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -7808,10 +7817,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "CultMeshReactiveDocument _sectorMap", "CultMeshReactiveDocument _currentZone", "CultMeshReactiveDocument _zoneDetails", - ".Reactive()", ".Current", - ".Reactive()", - ".Reactive(zoneIndex)", "_sectorMap?.Dispose()", "_currentZone?.Dispose()", "_zoneDetails?.Dispose()", @@ -7820,6 +7826,15 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) var missingSectorRendererSharedDocumentSymbols = requiredSectorRendererSharedDocumentSymbols .Where(symbol => !sectorRenderer.Contains(symbol, StringComparison.Ordinal)) .ToArray(); + var compactSectorRenderer = CompactSource(sectorRenderer); + missingSectorRendererSharedDocumentSymbols = missingSectorRendererSharedDocumentSymbols + .Concat(new[] + { + ".Document().Reactive()", + ".Document().Reactive()", + ".Document(zoneIndex).Reactive()" + }.Where(symbol => !compactSectorRenderer.Contains(symbol, StringComparison.Ordinal))) + .ToArray(); if (missingSectorRendererSharedDocumentSymbols.Length > 0) { throw new InvalidOperationException( @@ -7832,7 +7847,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "SectorRenderer", "AetheriaRuntimeSectorMapDocument", "_sectorMap", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeSectorMapSession", ".ObserveSectorMap()"); RequireReactiveTypedDocumentAccess( @@ -7840,7 +7855,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "SectorRenderer", "AetheriaRuntimeCurrentZoneDocument", "_currentZone", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeCurrentZoneSession", ".ObserveZone()"); RequireReactiveTypedDocumentAccess( @@ -7848,7 +7863,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "SectorRenderer", "AetheriaRuntimeZoneDetailsDocument", "_zoneDetails", - ".Reactive(zoneIndex)", + ".Document(zoneIndex).Reactive()", "AetheriaRuntimeZoneDetailsSession", ".ObserveZone(zoneIndex)"); RequireReactiveTypedDocumentAccess( @@ -7856,7 +7871,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "SectorRenderer", "AetheriaRuntimeCatalogSnapshot", "_catalog", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "AetheriaRuntimeCatalogSession", "ResolveClient().State.ObserveCatalog()"); RequireReactiveTypedDocumentAccess( @@ -7864,7 +7879,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "SectorRenderer", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -7895,7 +7910,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) var requiredZoneRendererSharedDocumentSymbols = new[] { "CultMeshReactiveDocument _zoneContacts", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "_zoneContacts?.Dispose()", "_zoneContacts?.Current", "private void OnDestroy()" @@ -7915,7 +7930,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "ZoneRenderer", "AetheriaRuntimeZoneContactsDocument", "_zoneContacts", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "AetheriaRuntimeZoneContactsSession", "ResolveClient().State.ObserveZoneContacts()"); RequireReactiveTypedDocumentAccess( @@ -7923,7 +7938,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "ZoneRenderer", "AetheriaRuntimeCatalogSnapshot", "_catalog", - "ResolveClient().State.Reactive()", + "ResolveClient().State.Document().Reactive()", "AetheriaRuntimeCatalogSession", "ResolveClient().State.ObserveCatalog()"); @@ -7960,11 +7975,8 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root) var requiredClientSymbols = new[] { "public CultMeshDocumentHandle Document()", - "public CultMeshReactiveDocument Reactive(", "public CultMeshDocumentHandle Document(AetheriaRuntimeRtsViewportBounds viewport)", - "public CultMeshReactiveDocument Reactive(", - "public CultMeshDocumentHandle Document(int entityOrZoneIndex)", - "public CultMeshReactiveDocument Reactive(" + "public CultMeshDocumentHandle Document(int entityOrZoneIndex)" }; var missingClientSymbols = requiredClientSymbols .Where(symbol => !clientState.Contains(symbol, StringComparison.Ordinal)) @@ -7972,7 +7984,7 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root) if (missingClientSymbols.Length > 0) { throw new InvalidOperationException( - "AetheriaClientState must expose generic managed parameterized access for map, viewport, contacts, and current-entity documents: " + + "AetheriaClientState must expose generic parameterized document handles for map, viewport, contacts, and current-entity documents: " + string.Join(", ", missingClientSymbols)); } @@ -8033,13 +8045,20 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root) var requiredRenderSplatViewportSourceSymbols = new[] { "CultMeshReactiveDocument _renderSplatsViewport", - ".Reactive(viewport)", "_renderSplatsViewport?.Current", "ClearViewportDocument()" }; var missingRenderSplatViewportSourceSymbols = requiredRenderSplatViewportSourceSymbols .Where(symbol => !renderSplatViewportSource.Contains(symbol, StringComparison.Ordinal)) .ToArray(); + if (!CompactSource(renderSplatViewportSource).Contains( + ".Document(viewport).Reactive()", + StringComparison.Ordinal)) + { + missingRenderSplatViewportSourceSymbols = missingRenderSplatViewportSourceSymbols + .Concat(new[] { ".Document(viewport).Reactive()" }) + .ToArray(); + } if (missingRenderSplatViewportSourceSymbols.Length > 0 || renderSplatViewportSource.Contains(".LatestRenderSplats(", StringComparison.Ordinal)) { @@ -8060,7 +8079,7 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root) "AetheriaUnityRenderSplatViewportSource", "AetheriaRuntimeRenderSplatsViewportDocument", "_renderSplatsViewport", - ".Reactive(viewport)", + ".Document(viewport).Reactive()", "AetheriaRuntimeRenderSplatsViewportSession", ".ObserveRenderSplats(viewport)"); @@ -8073,13 +8092,20 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root) var requiredZoneRendererViewportSymbols = new[] { "CultMeshReactiveDocument _objectsViewport", - ".Reactive(viewportBounds)", "_objectsViewport?.Current", "_objectsViewport?.Dispose()" }; var missingZoneRendererViewportSymbols = requiredZoneRendererViewportSymbols .Where(symbol => !zoneRenderer.Contains(symbol, StringComparison.Ordinal)) .ToArray(); + if (!CompactSource(zoneRenderer).Contains( + ".Document(viewportBounds).Reactive()", + StringComparison.Ordinal)) + { + missingZoneRendererViewportSymbols = missingZoneRendererViewportSymbols + .Concat(new[] { ".Document(viewportBounds).Reactive()" }) + .ToArray(); + } if (missingZoneRendererViewportSymbols.Length > 0 || zoneRenderer.Contains(".LatestObjects(", StringComparison.Ordinal)) { @@ -8100,7 +8126,7 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root) "ZoneRenderer", "AetheriaRuntimeObjectsViewportDocument", "_objectsViewport", - ".Reactive(viewportBounds)", + ".Document(viewportBounds).Reactive()", "AetheriaRuntimeObjectsViewportSession", ".ObserveObjects(viewportBounds)"); @@ -8164,18 +8190,11 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root var requiredClientSymbols = new[] { "public CultMeshDocumentHandle Document()", - "public CultMeshReactiveDocument Reactive(", - "public CultMeshReactiveDocument Reactive(", - "public CultMeshReactiveDocument Reactive(", - "public CultMeshReactiveDocument Reactive(", "public enum AetheriaClientEveSurface", "public CultMeshDocumentHandle Document(AetheriaClientEveSurface surface)", - "public CultMeshReactiveDocument Reactive(", "public CultMeshDocumentHandle Document(AetheriaRuntimeRtsViewportBounds viewport)", "public CultMeshDocumentHandle Document(int entityOrZoneIndex)", - "public CultMeshDocumentHandle Document(string seatId)", - "public Task> ReactiveAsync(", - "public CultMeshReactiveDocument Reactive(" + "public CultMeshDocumentHandle Document(string seatId)" }; var missingClientSymbols = requiredClientSymbols .Where(symbol => !clientState.Contains(symbol, StringComparison.Ordinal)) @@ -8183,15 +8202,18 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root if (missingClientSymbols.Length > 0) { throw new InvalidOperationException( - "AetheriaClientState must expose managed document handles and reactive accessors for remaining domain documents: " + + "AetheriaClientState must expose managed document handles for remaining domain documents: " + string.Join(", ", missingClientSymbols)); } if (clientState.Contains("public Task LatestAsync", StringComparison.Ordinal) || - clientState.Contains("public TDocument Latest", StringComparison.Ordinal)) + clientState.Contains("public TDocument Latest", StringComparison.Ordinal) || + clientState.Contains("public Task> ReactiveAsync", StringComparison.Ordinal) || + clientState.Contains("public CultMeshReactiveDocument Reactive", StringComparison.Ordinal) || + clientState.Contains("public Observable Watch", StringComparison.Ordinal)) { throw new InvalidOperationException( - "AetheriaClientState must not reintroduce generic latest snapshot shortcuts; callers should sample explicit document or reactive handles."); + "AetheriaClientState must not reintroduce generic latest/reactive/watch shortcuts; callers should sample explicit document handles or CultMesh reactive documents."); } var forbiddenFixedReactiveWrappers = new[] @@ -8298,7 +8320,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root if (survivingFixedReactiveWrappers.Length > 0) { throw new InvalidOperationException( - "AetheriaClientState must not reintroduce named fixed-document reactive wrappers; use Reactive() for managed typed document access: " + + "AetheriaClientState must not reintroduce named fixed-document reactive wrappers; use Document() handles and CultMesh handle reactivity: " + string.Join(", ", survivingFixedReactiveWrappers)); } @@ -8409,9 +8431,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root var compactClientState = CompactSource(clientState); var requiredStarbridgeParameterizedSymbols = new[] { - "publicCultMeshDocumentHandleDocument(stringseatId)", - "publicTask>ReactiveAsync(stringseatId,", - "publicCultMeshReactiveDocumentReactive(stringseatId," + "publicCultMeshDocumentHandleDocument(stringseatId)" }; var missingStarbridgeParameterizedSymbols = requiredStarbridgeParameterizedSymbols .Where(symbol => !compactClientState.Contains(symbol, StringComparison.Ordinal)) @@ -8573,7 +8593,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root } if (!checkedSources["StarbridgePlayerSeatDocumentTests.cs"].Contains( - ".Reactive(seat.SeatId)", + ".Document(seat.SeatId).Reactive()", StringComparison.Ordinal) || !checkedSources["StarbridgePlayerSeatDocumentTests.cs"].Contains( ".Document(seat.SeatId)", @@ -9137,9 +9157,9 @@ static void RequireClientTargetBootAuthority(string root) "stateBoot.StateFileExists", "AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot.StateFilePath, stateBoot.RuntimeId)", ".State", - ".Reactive()", + ".Document().Reactive()", "runtimeCatalogDocument.Current", - ".Reactive()", + ".Document().Reactive()", "sectorMapDocument.Current", "new ItemManager(", "new AetheriaUnityLoadoutItemFactory(itemManager, runtimeCatalog)", @@ -9197,7 +9217,7 @@ static void RequireClientTargetBootAuthority(string root) "ResolveSectorMap(AetheriaRuntimeStateBootReport stateBoot)", "AetheriaClient", ".State", - ".Reactive()", + ".Document().Reactive()", "ResolveVerseHostSettings(AetheriaRuntimeStateBootReport stateBoot)", "AetheriaState.At(AetheriaUnityRuntimePaths.GameDataDirectory)", ".ClientTarget", @@ -11804,11 +11824,11 @@ static void RequireAetheriaRuntimeVerseClientContract(string root) "AetheriaRuntimeLoadoutTemplatesDocument", "ProjectStarbridgeSummaryAsync", "CultMeshReactiveDocument? managedDaemonFrame = null;", - "managedDaemonFrame = state.Reactive();", - "managedCatalog = state.Reactive();", - "managedLoadoutTemplates = state.Reactive();", - "managedStarbridgeScenario = state.Reactive();", - "managedStarbridgeSession = state.Reactive();", + "managedDaemonFrame = state.Document().Reactive();", + "managedCatalog = state.Document().Reactive();", + "managedLoadoutTemplates = state.Document().Reactive();", + "managedStarbridgeScenario = state.Document().Reactive();", + "managedStarbridgeSession = state.Document().Reactive();", "AetheriaRuntimeDaemonFrameDocument RequireManagedFrame()", "RequireManagedFrame()", "RequireManagedCatalog()", @@ -11973,10 +11993,10 @@ static void RequireAetheriaRuntimeVerseClientContract(string root) "CultMeshReactiveDocument? _eveStateRefHealth", "CultMeshReactiveDocument? _eveStateRefCommandBoundary", "CultMeshReactiveDocument? _eveStateRefCatalog", - "_eveStateRefFrame ??= Reactive()", - "_eveStateRefHealth ??= Reactive()", - "_eveStateRefCommandBoundary ??= Reactive()", - "_eveStateRefCatalog ??= Reactive()", + "_eveStateRefFrame ??= Document().Reactive()", + "_eveStateRefHealth ??= Document().Reactive()", + "_eveStateRefCommandBoundary ??= Document().Reactive()", + "_eveStateRefCatalog ??= Document().Reactive()", "() => _eveStateRefFrame.Current", "() => _eveStateRefHealth.Current", "() => _eveStateRefCommandBoundary.Current", @@ -12750,7 +12770,7 @@ static void RequireMainMenuVerseHostProjection(string root) var requiredMainMenuSymbols = new[] { "ResolveVerseHostSettings(AetheriaRuntimeStateBootReport stateBoot)", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeMainMenuSurfaceBuilder.ProjectRoot(", "AetheriaRuntimeMainMenuSurfaceBuilder.BuildRoot(" }; @@ -12883,7 +12903,7 @@ static void RequireMainMenuContinueRunState(string root) "ResolveSectorMap", "AetheriaClient", ".State", - ".Reactive()", + ".Document().Reactive()", "ContinueGame()", "SceneManager.LoadScene(\"ARPG\")" }; @@ -13218,7 +13238,7 @@ static void RequireMainMenuContinueRunState(string root) "AetheriaRuntimeZoneContactRow", "AetheriaRuntimeZoneTargetRow", ".State", - ".Reactive()", + ".Document().Reactive()", "_zoneContacts?.Current", "_zoneContacts?.Dispose()", "_entityIndex.TryResolveEntityByDaemonIndex(targetEntityIndex, out var targetEntity)" @@ -13268,9 +13288,9 @@ static void RequireMainMenuContinueRunState(string root) "CultMeshReactiveDocument _currentDocking", "CultMeshReactiveDocument _stationRefit", "AetheriaRuntimeObservedDockingState.TryCreateCurrent(", - "state.Reactive()", - "state.Reactive()", - "state.Reactive()", + "state.Document().Reactive()", + "state.Document().Reactive()", + "state.Document().Reactive()", "public bool IsEntityUndocked(Entity entity)", "public bool TryResolveDockingBay(", "out AetheriaRuntimeCurrentDockingDocument docking", @@ -14240,7 +14260,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) "AetheriaRuntimeZoneContactRow", "AetheriaRuntimeZoneTargetRow", ".State", - ".Reactive()", + ".Document().Reactive()", "_zoneContacts?.Current", "_zoneContacts?.Dispose()", "_entityIndex.TryResolveEntityByDaemonIndex(targetEntityIndex, out var targetEntity)" @@ -14375,22 +14395,21 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) "Map and sector UI must read current-zone identity from the daemon-observed run, not Unity's mirrored Zone hierarchy."); } + var compactMapRenderer = CompactSource(mapRenderer); + var compactSectorRenderer = CompactSource(sectorRenderer); + var compactSectorMap = CompactSource(sectorMap); if (!mapRenderer.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) || - !mapRenderer.Contains(".Viewports", StringComparison.Ordinal) || - !mapRenderer.Contains(".Reactive(viewport)", StringComparison.Ordinal) || - !mapRenderer.Contains(".Reactive(viewport)", StringComparison.Ordinal) || - !mapRenderer.Contains(".Reactive()", StringComparison.Ordinal) || + !compactMapRenderer.Contains(".State.Document(viewport).Reactive()", StringComparison.Ordinal) || + !compactMapRenderer.Contains(".State.Document(viewport).Reactive()", StringComparison.Ordinal) || + !compactMapRenderer.Contains(".State.Document().Reactive()", StringComparison.Ordinal) || !sectorRenderer.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) || - !sectorRenderer.Contains(".State", StringComparison.Ordinal) || - !sectorRenderer.Contains(".Reactive()", StringComparison.Ordinal) || - !sectorRenderer.Contains(".Details", StringComparison.Ordinal) || - !sectorRenderer.Contains(".Reactive(zoneIndex)", StringComparison.Ordinal) || + !compactSectorRenderer.Contains(".State.Document().Reactive()", StringComparison.Ordinal) || + !compactSectorRenderer.Contains(".State.Document(zoneIndex).Reactive()", StringComparison.Ordinal) || !sectorRenderer.Contains(".Current", StringComparison.Ordinal) || - !sectorRenderer.Contains("ResolveClient().State.Reactive()", StringComparison.Ordinal) || - !sectorRenderer.Contains(".Reactive()", StringComparison.Ordinal) || + !compactSectorRenderer.Contains("ResolveClient().State.Document().Reactive()", StringComparison.Ordinal) || + !compactSectorRenderer.Contains(".State.Document().Reactive()", StringComparison.Ordinal) || !sectorMap.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) || - !sectorMap.Contains(".State", StringComparison.Ordinal) || - !sectorMap.Contains(".Reactive()", StringComparison.Ordinal) || + !compactSectorMap.Contains(".State.Document().Reactive()", StringComparison.Ordinal) || !sectorRenderer.Contains("AetheriaRuntimeZoneDetailsSurfaceBuilder.ProjectDaemonZone(", StringComparison.Ordinal)) { throw new InvalidOperationException( @@ -14409,7 +14428,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) "SectorMap", "AetheriaRuntimeSectorMapDocument", "_sectorMapDocument", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeSectorMapSession", ".ObserveSectorMap()"); @@ -15047,7 +15066,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) "TryStartDaemonObservedGame", "ResolveSectorMap(stateBoot)", ".State", - ".Reactive()", + ".Document().Reactive()", "sectorMap.FrameId", "SceneManager.LoadScene(\"ARPG\")" }; @@ -15937,9 +15956,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) "AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory)", "AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot.StateFilePath, stateBoot.RuntimeId)", ".State", - ".Reactive()", + ".Document().Reactive()", "runtimeCatalogDocument.Current", - ".Reactive()", + ".Document().Reactive()", "sectorMapDocument.Current", "new ItemManager(", "new AetheriaUnityLoadoutItemFactory(itemManager, runtimeCatalog)", @@ -15982,7 +16001,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) "RuntimeClients[cacheKey] = runtimeClient", "AetheriaClient", ".State", - ".Reactive()", + ".Document().Reactive()", "_playerSettingsDocument.Current", "_playerSettingsDocument?.Dispose()", "OpenAsync(", @@ -16140,9 +16159,10 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) { "public CultMeshDocumentHandle Document()", "public ICultMeshDocumentHandle DocumentBySchema(string schemaVersion)", - "public Observable Watch()", - "public Task> ReactiveAsync(", - "public CultMeshReactiveDocument Reactive(" + "public CultMeshDocumentHandle Document(AetheriaClientEveSurface surface)", + "public CultMeshDocumentHandle Document(AetheriaRuntimeRtsViewportBounds viewport)", + "public CultMeshDocumentHandle Document(int entityOrZoneIndex)", + "public CultMeshDocumentHandle Document(string seatId)" }; var missingManagedStateAccessSymbols = requiredManagedStateAccessSymbols .Where(symbol => !aetheriaClientState.Contains(symbol, StringComparison.Ordinal)) @@ -16150,15 +16170,18 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) if (missingManagedStateAccessSymbols.Length > 0) { throw new InvalidOperationException( - "AetheriaClientState must expose direct managed typed document access instead of AetheriaClient forwarding shortcuts or per-document session wrappers: " + + "AetheriaClientState must expose direct typed document handles instead of AetheriaClient forwarding shortcuts or per-document session wrappers: " + string.Join(", ", missingManagedStateAccessSymbols)); } if (aetheriaClientState.Contains("public Task LatestAsync", StringComparison.Ordinal) || - aetheriaClientState.Contains("public TDocument Latest", StringComparison.Ordinal)) + aetheriaClientState.Contains("public TDocument Latest", StringComparison.Ordinal) || + aetheriaClientState.Contains("public Observable Watch", StringComparison.Ordinal) || + aetheriaClientState.Contains("public Task> ReactiveAsync", StringComparison.Ordinal) || + aetheriaClientState.Contains("public CultMeshReactiveDocument Reactive", StringComparison.Ordinal)) { throw new InvalidOperationException( - "AetheriaClientState still exposes generic latest snapshot shortcuts instead of direct document/reactive handles."); + "AetheriaClientState still exposes generic latest/reactive/watch shortcuts instead of direct CultMesh document handles."); } if (aetheriaClientState.Contains("public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(", StringComparison.Ordinal) || @@ -16173,9 +16196,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) "private CultMeshReactiveDocument? _observedFrame;", "private CultMeshReactiveDocument? _observedSoaView;", "private CultMeshReactiveDocument? _observedZoneRender;", - "_observedFrame ??= State.Reactive();", - "_observedSoaView ??= State.Reactive();", - "_observedZoneRender ??= State.Reactive();", + "_observedFrame ??= State.Document().Reactive();", + "_observedSoaView ??= State.Document().Reactive();", + "_observedZoneRender ??= State.Document().Reactive();", "AetheriaRuntimeObservedDaemonState.TryCreateCurrent(" }; var missingManagedObservedDaemonSymbols = requiredManagedObservedDaemonSymbols @@ -16189,9 +16212,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) } if (!daemonRuntimeDocumentTests.Contains("ManagedStateSamplesCurrentObservedDaemonFromReactiveDocuments()", StringComparison.Ordinal) || - !daemonRuntimeDocumentTests.Contains("using var observedFrame = client.State.Reactive();", StringComparison.Ordinal) || - !daemonRuntimeDocumentTests.Contains("using var observedSoaView = client.State.Reactive();", StringComparison.Ordinal) || - !daemonRuntimeDocumentTests.Contains("using var observedZoneRender = client.State.Reactive();", StringComparison.Ordinal) || + !daemonRuntimeDocumentTests.Contains("using var observedFrame = client.State.Document().Reactive();", StringComparison.Ordinal) || + !daemonRuntimeDocumentTests.Contains("using var observedSoaView = client.State.Document().Reactive();", StringComparison.Ordinal) || + !daemonRuntimeDocumentTests.Contains("using var observedZoneRender = client.State.Document().Reactive();", StringComparison.Ordinal) || !daemonRuntimeDocumentTests.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) || daemonRuntimeDocumentTests.Contains("client.State.CurrentObservedDaemon()", StringComparison.Ordinal)) { @@ -16414,9 +16437,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) !daemonObserver.Contains("CultMeshReactiveDocument _daemonFrame", StringComparison.Ordinal) || !daemonObserver.Contains("CultMeshReactiveDocument _daemonSoaView", StringComparison.Ordinal) || !daemonObserver.Contains("CultMeshReactiveDocument _zoneRender", StringComparison.Ordinal) || - !daemonObserver.Contains("_daemonFrame ??= state.Reactive();", StringComparison.Ordinal) || + !daemonObserver.Contains("_daemonFrame ??= state.Document().Reactive();", StringComparison.Ordinal) || !daemonObserver.Contains("_daemonSoaView ??= TryReactive(state);", StringComparison.Ordinal) || - !daemonObserver.Contains("_zoneRender ??= state.Reactive();", StringComparison.Ordinal) || + !daemonObserver.Contains("_zoneRender ??= state.Document().Reactive();", StringComparison.Ordinal) || !daemonObserver.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) || !daemonObserver.Contains("DisposeObservedDaemonDocuments()", StringComparison.Ordinal)) { @@ -16448,8 +16471,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) if (!mainMenu.Contains("AetheriaClient", StringComparison.Ordinal) || !mainMenu.Contains("ResolveSectorMap(AetheriaRuntimeStateBootReport stateBoot)", StringComparison.Ordinal) || !mainMenu.Contains(".State", StringComparison.Ordinal) || - !mainMenu.Contains(".Reactive()", StringComparison.Ordinal) || - !mainMenu.Contains(".Reactive()", StringComparison.Ordinal)) + !mainMenu.Contains(".Document().Reactive()", StringComparison.Ordinal) || + !mainMenu.Contains(".Document().Reactive()", StringComparison.Ordinal)) { throw new InvalidOperationException( "MainMenu no longer routes sector-map lookup through the shared Aetheria client facade."); @@ -16476,9 +16499,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) var requiredGameplayBootSymbols = new[] { - ".Reactive()", + ".Document().Reactive()", "runtimeCatalogDocument.Current", - ".Reactive()", + ".Document().Reactive()", "sectorMapDocument.Current", "Galaxy.ProjectObservedSectorMap(", "sectorMap.IsTutorial", @@ -17318,8 +17341,8 @@ static void RequireInventoryDoubleClickTransferRequestAuthority(string root) "TryResolveTypedInventoryRows(", "TryValidateTypedCargoSlot(", "TryValidateTypedEquipmentSlot(", - ".Details", - ".Reactive(entityIndex)", + ".Document(entityIndex)", + ".Reactive()", "origin.Cargo.TryGetValue(item, out var originPosition)", "SourceIndex == cargoIndex", "SourceIndex == equipmentIndex", @@ -17866,7 +17889,7 @@ static void RequireInventoryLoadoutSaveRequestAuthority(string root) "CultMeshReactiveDocument _loadoutFrame", "ProjectLoadoutTemplate(targetEntityKey)", "AetheriaRuntimeLoadoutSnapshotProjector.ProjectLoadoutTemplate(", - ".Reactive()", + ".Document().Reactive()", "_loadoutFrame?.Dispose()", ".Ui.SaveLoadoutTemplateAsync(loadout, \"unity-inventory\")" }; @@ -17892,7 +17915,7 @@ static void RequireInventoryLoadoutSaveRequestAuthority(string root) "InventoryPanel", "AetheriaRuntimeDaemonFrameDocument", "_loadoutFrame", - ".Reactive()", + ".Document().Reactive()", "AetheriaRuntimeDaemonFrameSession", ".ObserveDaemonFrame()"); @@ -17925,7 +17948,7 @@ static void RequireInventoryLoadoutSaveRequestAuthority(string root) if (loadoutSnapshotProjector.Contains("ProjectLoadoutTemplateAsync(", StringComparison.Ordinal) || loadoutSnapshotProjector.Contains("AetheriaClientState state", StringComparison.Ordinal) || - loadoutSnapshotProjector.Contains(".Reactive()", StringComparison.Ordinal) || + loadoutSnapshotProjector.Contains(".Document().Reactive()", StringComparison.Ordinal) || loadoutSnapshotProjector.Contains("frame.Current?.Run", StringComparison.Ordinal)) { throw new InvalidOperationException( @@ -18374,16 +18397,24 @@ static void RequireReactiveTypedDocumentAccess( string forbiddenSessionType, string forbiddenObserveAccessor) { + var compactSource = CompactSource(source); + var compactReactiveAccessor = CompactSource(reactiveAccessor); var requiredSymbols = new[] { $"CultMeshReactiveDocument<{documentType}> {fieldName}", - reactiveAccessor, $"{fieldName}?.Current", $"{fieldName}?.Dispose()" }; var missingSymbols = requiredSymbols .Where(symbol => !source.Contains(symbol, StringComparison.Ordinal)) .ToArray(); + if (!string.IsNullOrWhiteSpace(compactReactiveAccessor) && + !compactSource.Contains(compactReactiveAccessor, StringComparison.Ordinal)) + { + missingSymbols = missingSymbols + .Concat(new[] { reactiveAccessor }) + .ToArray(); + } if (missingSymbols.Length > 0) { throw new InvalidOperationException( diff --git a/Assets/Scripts/Gameplay/ActionBarSlot.cs b/Assets/Scripts/Gameplay/ActionBarSlot.cs index 8519e921e..8f8a01494 100644 --- a/Assets/Scripts/Gameplay/ActionBarSlot.cs +++ b/Assets/Scripts/Gameplay/ActionBarSlot.cs @@ -95,7 +95,7 @@ public abstract class ActionBarBinding : IDisposable try { - _catalog ??= Client.State.Reactive(); + _catalog ??= Client.State.Document().Reactive(); return _catalog?.Current?.FindItem(item, x => x.ItemKey); } catch (Exception ex) diff --git a/Assets/Scripts/Gameplay/AetheriaDaemonObserver.cs b/Assets/Scripts/Gameplay/AetheriaDaemonObserver.cs index afe8e6b80..b04a7a7df 100644 --- a/Assets/Scripts/Gameplay/AetheriaDaemonObserver.cs +++ b/Assets/Scripts/Gameplay/AetheriaDaemonObserver.cs @@ -131,9 +131,9 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour return; } - _daemonFrame ??= state.Reactive(); + _daemonFrame ??= state.Document().Reactive(); _daemonSoaView ??= TryReactive(state); - _zoneRender ??= state.Reactive(); + _zoneRender ??= state.Document().Reactive(); } private static CultMeshReactiveDocument TryReactive( @@ -142,7 +142,7 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour { try { - return state.Reactive(); + return state.Document().Reactive(); } catch (System.Collections.Generic.KeyNotFoundException) { diff --git a/Assets/Scripts/Gameplay/AetheriaUnityGameplayBootShell.cs b/Assets/Scripts/Gameplay/AetheriaUnityGameplayBootShell.cs index 327bfab43..c515fff9d 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityGameplayBootShell.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityGameplayBootShell.cs @@ -37,11 +37,11 @@ public sealed class AetheriaUnityGameplayBootShell var aetheria = AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot.StateFilePath, stateBoot.RuntimeId) .State; - using var runtimeCatalogDocument = aetheria.Reactive(); + using var runtimeCatalogDocument = aetheria.Document().Reactive(); var runtimeCatalog = runtimeCatalogDocument.Current; if (runtimeCatalog == null) throw new InvalidOperationException("Aetheria typed runtime catalog is required before gameplay boot."); - using var sectorMapDocument = aetheria.Reactive(); + using var sectorMapDocument = aetheria.Document().Reactive(); var sectorMap = sectorMapDocument.Current; if (sectorMap == null) throw new InvalidOperationException("Aetheria typed sector map is required before gameplay boot."); diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs index d747a5267..97859d2c2 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs @@ -193,9 +193,9 @@ public sealed class AetheriaUnityObservedDockingIndex : IDisposable if (state == null) return; - _currentEntity ??= state.Reactive(); - _currentDocking ??= state.Reactive(); - _stationRefit ??= state.Reactive(); + _currentEntity ??= state.Document().Reactive(); + _currentDocking ??= state.Document().Reactive(); + _stationRefit ??= state.Document().Reactive(); } public void Dispose() diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs b/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs index c9141da4f..830920224 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs @@ -99,8 +99,7 @@ public sealed class AetheriaUnityObservedTargetQuery : IDisposable try { _zoneContacts = _resolveClient() - ?.State - .Reactive(); + ?.State.Document().Reactive(); return _zoneContacts?.Current; } catch diff --git a/Assets/Scripts/Gameplay/AetheriaUnityRenderSplatViewportSource.cs b/Assets/Scripts/Gameplay/AetheriaUnityRenderSplatViewportSource.cs index 50f65fcae..2f56b2f0b 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityRenderSplatViewportSource.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityRenderSplatViewportSource.cs @@ -118,8 +118,8 @@ public sealed class AetheriaUnityRenderSplatViewportSource : MonoBehaviour { var nextRenderSplatsViewport = ResolveClient() .State - .Viewports - .Reactive(viewport); + .Document(viewport) + .Reactive(); ClearViewportDocument(); _viewport = viewport; _renderSplatsViewport = nextRenderSplatsViewport; diff --git a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs index ff0251611..8885d7ef5 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs @@ -95,8 +95,7 @@ public static class AetheriaUnityRuntimeClientProvider try { _playerSettingsDocument ??= ResolveClient(AetheriaUnityRuntimePaths.RuntimeStateFilePath) - .State - .Reactive(); + .State.Document().Reactive(); var stored = _playerSettingsDocument.Current; if (stored == null) diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index 30a957ada..8ba700167 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -197,39 +197,39 @@ public class DaemonRuntimeDocumentTests .GetAwaiter() .GetResult(); using var currentEntityReactive = client.State - .ReactiveAsync() + .Document() + .ReactiveAsync() .GetAwaiter() .GetResult(); - using var zoneRenderReactive = client.State - .Reactive(); + using var zoneRenderReactive = client.State.Document().Reactive(); var observedAuthoritativeFrame = ReadLatest(client.State.Document()); - using var catalogReactive = client.State.Reactive(); - using var daemonFrameReactive = client.State.Reactive(); - using var daemonSoaViewReactive = client.State.Reactive(); + using var catalogReactive = client.State.Document().Reactive(); + using var daemonFrameReactive = client.State.Document().Reactive(); + using var daemonSoaViewReactive = client.State.Document().Reactive(); Assert.IsTrue(AetheriaRuntimeObservedDaemonState.TryCreateCurrent( daemonFrameReactive, daemonSoaViewReactive, zoneRenderReactive, out var observed)); - using var loadoutTemplatesReactive = client.State.Reactive(); - using var sectorMapReactive = client.State.Reactive(); - using var playerSettingsReactive = client.State.Reactive(); - using var verseHostSettingsReactive = client.State.Reactive(); - 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 stationRefitReactive = client.State.Reactive(); - using var zoneDetailsReactive = client.State.Reactive(0); - using var selectedObjectReactive = client.State.Reactive(0); - using var inventoryReactive = client.State.Reactive(0); - using var mapViewportReactive = client.State.Reactive(viewport); - using var objectsViewportReactive = client.State.Reactive(viewport); - using var gravityViewportReactive = client.State.Reactive(viewport); - using var renderSplatsViewportReactive = client.State.Reactive(viewport); - using var playerHudCatalog = client.State.Reactive(); - using var playerHudSettings = client.State.Reactive(); - using var playerHudEntity = client.State.Reactive(); + using var loadoutTemplatesReactive = client.State.Document().Reactive(); + using var sectorMapReactive = client.State.Document().Reactive(); + using var playerSettingsReactive = client.State.Document().Reactive(); + using var verseHostSettingsReactive = client.State.Document().Reactive(); + using var zoneContactsReactive = client.State.Document().Reactive(); + using var currentZoneReactive = client.State.Document().Reactive(); + using var currentEntityDocumentReactive = client.State.Document().Reactive(); + using var currentDockingReactive = client.State.Document().Reactive(); + using var stationRefitReactive = client.State.Document().Reactive(); + using var zoneDetailsReactive = client.State.Document(0).Reactive(); + using var selectedObjectReactive = client.State.Document(0).Reactive(); + using var inventoryReactive = client.State.Document(0).Reactive(); + using var mapViewportReactive = client.State.Document(viewport).Reactive(); + using var objectsViewportReactive = client.State.Document(viewport).Reactive(); + using var gravityViewportReactive = client.State.Document(viewport).Reactive(); + using var renderSplatsViewportReactive = client.State.Document(viewport).Reactive(); + using var playerHudCatalog = client.State.Document().Reactive(); + using var playerHudSettings = client.State.Document().Reactive(); + using var playerHudEntity = client.State.Document().Reactive(); var gameSurface = ReadLatest(client.State.Document(AetheriaClientEveSurface.Game)); var gameTuiSurface = ReadLatest(client.State.Document(AetheriaClientEveSurface.GameTui)); var editorSurface = ReadLatest(client.State.Document(AetheriaClientEveSurface.Editor)); @@ -245,10 +245,10 @@ public class DaemonRuntimeDocumentTests currentDockingReactive, stationRefitReactive, out var observedDocking)); - using var reactiveGameSurface = client.State.Reactive(AetheriaClientEveSurface.Game); - using var reactiveGameTuiSurface = client.State.Reactive(AetheriaClientEveSurface.GameTui); - using var reactiveEditorSurface = client.State.Reactive(AetheriaClientEveSurface.Editor); - using var reactiveEditorTuiSurface = client.State.Reactive(AetheriaClientEveSurface.EditorTui); + using var reactiveGameSurface = client.State.Document(AetheriaClientEveSurface.Game).Reactive(); + using var reactiveGameTuiSurface = client.State.Document(AetheriaClientEveSurface.GameTui).Reactive(); + using var reactiveEditorSurface = client.State.Document(AetheriaClientEveSurface.Editor).Reactive(); + using var reactiveEditorTuiSurface = client.State.Document(AetheriaClientEveSurface.EditorTui).Reactive(); Assert.AreEqual("aetheria.current.entity", client.State.CurrentEntity.DocumentId); Assert.AreSame(client.State.CurrentEntity, client.State.Document()); @@ -2221,9 +2221,9 @@ public class DaemonRuntimeDocumentTests .OpenAsync(statePath, "unity-observer-test", pullOnOpen: true) .GetAwaiter() .GetResult(); - using var observedFrame = client.State.Reactive(); - using var observedSoaView = client.State.Reactive(); - using var observedZoneRender = client.State.Reactive(); + using var observedFrame = client.State.Document().Reactive(); + using var observedSoaView = client.State.Document().Reactive(); + using var observedZoneRender = client.State.Document().Reactive(); Assert.IsTrue(AetheriaRuntimeObservedDaemonState.TryCreateCurrent( observedFrame, observedSoaView, @@ -2279,9 +2279,9 @@ public class DaemonRuntimeDocumentTests .OpenAsync(statePath, "unity-reactive-observer-test", pullOnOpen: true) .GetAwaiter() .GetResult(); - using var observedFrame = client.State.Reactive(); - using var observedSoaView = client.State.Reactive(); - using var observedZoneRender = client.State.Reactive(); + using var observedFrame = client.State.Document().Reactive(); + using var observedSoaView = client.State.Document().Reactive(); + using var observedZoneRender = client.State.Document().Reactive(); var observed = AetheriaRuntimeObservedDaemonState.TryCreateCurrent( observedFrame, observedSoaView, @@ -2326,9 +2326,9 @@ public class DaemonRuntimeDocumentTests .OpenAsync(statePath, "unity-frame-only-observer-test", pullOnOpen: true) .GetAwaiter() .GetResult(); - using var observedFrame = client.State.Reactive(); - using var observedSoaView = client.State.Reactive(); - using var observedZoneRender = client.State.Reactive(); + using var observedFrame = client.State.Document().Reactive(); + using var observedSoaView = client.State.Document().Reactive(); + using var observedZoneRender = client.State.Document().Reactive(); Assert.IsTrue(AetheriaRuntimeObservedDaemonState.TryCreateCurrent( observedFrame, observedSoaView, diff --git a/Assets/Scripts/Tests/StarbridgePlayerSeatDocumentTests.cs b/Assets/Scripts/Tests/StarbridgePlayerSeatDocumentTests.cs index d43bfbb6c..6b84867db 100644 --- a/Assets/Scripts/Tests/StarbridgePlayerSeatDocumentTests.cs +++ b/Assets/Scripts/Tests/StarbridgePlayerSeatDocumentTests.cs @@ -82,8 +82,7 @@ public class StarbridgePlayerSeatDocumentTests var handle = client.Document( AetheriaRuntimeVerseRecordKeys.StarbridgePlayerSeat(seat.SeatId)); using var reactive = handle.Reactive(); - using var aetheriaSeat = client.State - .Reactive(seat.SeatId); + using var aetheriaSeat = client.State.Document(seat.SeatId).Reactive(); Assert.AreEqual("seat-support", handle.Latest().SeatId); Assert.AreEqual( diff --git a/Assets/Scripts/UI/HUD/SchematicDisplay.cs b/Assets/Scripts/UI/HUD/SchematicDisplay.cs index 2805accf0..4277232a5 100644 --- a/Assets/Scripts/UI/HUD/SchematicDisplay.cs +++ b/Assets/Scripts/UI/HUD/SchematicDisplay.cs @@ -326,7 +326,7 @@ public class SchematicDisplay : MonoBehaviour try { - _catalog = ResolveClient().State.Reactive(); + _catalog = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -342,7 +342,7 @@ public class SchematicDisplay : MonoBehaviour { try { - _playerSettings = ResolveClient().State.Reactive(); + _playerSettings = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -359,7 +359,7 @@ public class SchematicDisplay : MonoBehaviour { try { - _currentEntity = ResolveClient().State.Reactive(); + _currentEntity = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs b/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs index 90475e4dc..a540de41a 100644 --- a/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs +++ b/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs @@ -393,8 +393,7 @@ public class InputDisplayLayout : MonoBehaviour try { _playerSettings = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/MainMenu.cs b/Assets/Scripts/UI/MainMenu.cs index 7243d2b37..7d0aa926d 100644 --- a/Assets/Scripts/UI/MainMenu.cs +++ b/Assets/Scripts/UI/MainMenu.cs @@ -151,8 +151,7 @@ public class MainMenu : MonoBehaviour try { _sectorMap ??= ResolveClient(stateBoot) - .State - .Reactive(); + .State.Document().Reactive(); return _sectorMap?.Current; } catch (Exception ex) @@ -170,8 +169,7 @@ public class MainMenu : MonoBehaviour try { _playerSettings ??= ResolveClient(stateBoot) - .State - .Reactive(); + .State.Document().Reactive(); return _playerSettings?.Current; } catch (Exception ex) @@ -189,8 +187,7 @@ public class MainMenu : MonoBehaviour try { _verseHostSettings ??= ResolveClient(stateBoot) - .State - .Reactive(); + .State.Document().Reactive(); return _verseHostSettings?.Current; } catch (Exception ex) diff --git a/Assets/Scripts/UI/Menu/InventoryMenu.cs b/Assets/Scripts/UI/Menu/InventoryMenu.cs index 2d13386cb..391527a31 100644 --- a/Assets/Scripts/UI/Menu/InventoryMenu.cs +++ b/Assets/Scripts/UI/Menu/InventoryMenu.cs @@ -965,8 +965,7 @@ public class InventoryMenu : MonoBehaviour try { _currentEntity = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { @@ -984,8 +983,7 @@ public class InventoryMenu : MonoBehaviour try { _stationRefit = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { @@ -1004,8 +1002,8 @@ public class InventoryMenu : MonoBehaviour { var nextInventory = ResolveClient() .State - .Details - .Reactive(entityIndex); + .Document(entityIndex) + .Reactive(); _inventory?.Dispose(); _inventoryEntityIndex = entityIndex; _inventory = nextInventory; @@ -1077,7 +1075,7 @@ public class InventoryMenu : MonoBehaviour try { - _catalog = ResolveClient().State.Reactive(); + _catalog = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -1095,8 +1093,7 @@ public class InventoryMenu : MonoBehaviour try { _playerSettings = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/Menu/InventoryPanel.cs b/Assets/Scripts/UI/Menu/InventoryPanel.cs index c2347efc4..a13e570d4 100644 --- a/Assets/Scripts/UI/Menu/InventoryPanel.cs +++ b/Assets/Scripts/UI/Menu/InventoryPanel.cs @@ -1504,8 +1504,7 @@ private void Update() try { _currentEntity = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { @@ -1523,8 +1522,7 @@ private void Update() try { _stationRefit = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { @@ -1550,8 +1548,7 @@ private void Update() try { _loadoutFrame = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { @@ -1570,8 +1567,8 @@ private void Update() { var nextInventory = ResolveClient() .State - .Details - .Reactive(entityIndex); + .Document(entityIndex) + .Reactive(); _inventory?.Dispose(); _inventoryEntityIndex = entityIndex; _inventory = nextInventory; @@ -1591,7 +1588,7 @@ private void Update() try { - _catalog = ResolveClient().State.Reactive(); + _catalog = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -1609,8 +1606,7 @@ private void Update() try { _playerSettings = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/Menu/MapRenderer.cs b/Assets/Scripts/UI/Menu/MapRenderer.cs index 253296bb6..af38abf42 100644 --- a/Assets/Scripts/UI/Menu/MapRenderer.cs +++ b/Assets/Scripts/UI/Menu/MapRenderer.cs @@ -131,12 +131,12 @@ public class MapRenderer : MonoBehaviour ClearViewportCaches(); _objectsViewport = client .State - .Viewports - .Reactive(viewport); + .Document(viewport) + .Reactive(); _renderSplatsViewport = client .State - .Viewports - .Reactive(viewport); + .Document(viewport) + .Reactive(); var objectsViewport = _objectsViewport?.Current; var zoneName = string.IsNullOrWhiteSpace(objectsViewport?.ZoneName) @@ -319,8 +319,7 @@ public class MapRenderer : MonoBehaviour try { _playerSettings ??= ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); return _playerSettings?.Current?.ShowAsteroidsInMinimap ?? false; } catch (Exception ex) diff --git a/Assets/Scripts/UI/Menu/MenuPanel.cs b/Assets/Scripts/UI/Menu/MenuPanel.cs index 4684e7a6b..c9e3f25b4 100644 --- a/Assets/Scripts/UI/Menu/MenuPanel.cs +++ b/Assets/Scripts/UI/Menu/MenuPanel.cs @@ -180,7 +180,7 @@ public class MenuPanel : MonoBehaviour docking = null; try { - _currentDocking ??= ResolveClient().State.Reactive(); + _currentDocking ??= ResolveClient().State.Document().Reactive(); docking = _currentDocking.Current; return docking != null; } diff --git a/Assets/Scripts/UI/Menu/SectorMap.cs b/Assets/Scripts/UI/Menu/SectorMap.cs index 3d723222c..115d5090d 100644 --- a/Assets/Scripts/UI/Menu/SectorMap.cs +++ b/Assets/Scripts/UI/Menu/SectorMap.cs @@ -222,8 +222,7 @@ public class SectorMap : MonoBehaviour private void EnsureSectorMapLoaded() { _sectorMapDocument ??= ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); _sectorMap = _sectorMapDocument?.Current; if (_sectorMapLoaded) diff --git a/Assets/Scripts/UI/Menu/SectorRenderer.cs b/Assets/Scripts/UI/Menu/SectorRenderer.cs index 011b338bc..044c7532a 100644 --- a/Assets/Scripts/UI/Menu/SectorRenderer.cs +++ b/Assets/Scripts/UI/Menu/SectorRenderer.cs @@ -175,8 +175,7 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS try { _sectorMap ??= ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); var sectorMap = _sectorMap?.Current; return (sectorMap?.Zones ?? Array.Empty()) .FirstOrDefault(zone => zone.ZoneIndex == zoneIndex); @@ -205,8 +204,8 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS { var nextZoneDetails = ResolveClient() .State - .Details - .Reactive(zoneIndex); + .Document(zoneIndex) + .Reactive(); _zoneDetails?.Dispose(); _zoneDetailsIndex = zoneIndex; _zoneDetails = nextZoneDetails; @@ -232,7 +231,7 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS try { - _catalog = ResolveClient().State.Reactive(); + _catalog = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -250,8 +249,7 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS try { _playerSettings = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { @@ -322,8 +320,7 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS try { _currentZone ??= ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/Menu/TradeMenu.cs b/Assets/Scripts/UI/Menu/TradeMenu.cs index 9a9cb1631..939ec0ca6 100644 --- a/Assets/Scripts/UI/Menu/TradeMenu.cs +++ b/Assets/Scripts/UI/Menu/TradeMenu.cs @@ -518,7 +518,7 @@ public class TradeMenu : MonoBehaviour try { - _stationRefit = ResolveClient().State.Reactive(); + _stationRefit = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -533,7 +533,7 @@ public class TradeMenu : MonoBehaviour docking = null; try { - _currentDocking ??= ResolveClient().State.Reactive(); + _currentDocking ??= ResolveClient().State.Document().Reactive(); docking = _currentDocking.Current; return docking != null; } @@ -627,7 +627,7 @@ public class TradeMenu : MonoBehaviour try { - _catalog = ResolveClient().State.Reactive(); + _catalog = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -645,8 +645,7 @@ public class TradeMenu : MonoBehaviour try { _playerSettings = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/Zone Display/VolumeCloudRenderer.cs b/Assets/Scripts/Zone Display/VolumeCloudRenderer.cs index 2a6bcc8cf..0558b999f 100644 --- a/Assets/Scripts/Zone Display/VolumeCloudRenderer.cs +++ b/Assets/Scripts/Zone Display/VolumeCloudRenderer.cs @@ -102,8 +102,7 @@ public class VolumeCloudRenderer : EffectBase try { _playerSettings = ResolveClient() - .State - .Reactive(); + .State.Document().Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/Zone Display/ZoneRenderer.cs b/Assets/Scripts/Zone Display/ZoneRenderer.cs index e25f75324..fc400a232 100644 --- a/Assets/Scripts/Zone Display/ZoneRenderer.cs +++ b/Assets/Scripts/Zone Display/ZoneRenderer.cs @@ -1208,7 +1208,7 @@ public class ZoneRenderer : MonoBehaviour try { - _catalog = ResolveClient().State.Reactive(); + _catalog = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -1225,7 +1225,7 @@ public class ZoneRenderer : MonoBehaviour try { - _zoneContacts = ResolveClient().State.Reactive(); + _zoneContacts = ResolveClient().State.Document().Reactive(); } catch (Exception ex) { @@ -1245,8 +1245,8 @@ public class ZoneRenderer : MonoBehaviour { var nextObjectsViewport = ResolveClient() .State - .Viewports - .Reactive(viewportBounds); + .Document(viewportBounds) + .Reactive(); _objectsViewport?.Dispose(); _objectsViewportBounds = viewportBounds; _objectsViewport = nextObjectsViewport; diff --git a/Packages/org.gamecult.aetheria.eve-runtime/Runtime/AetheriaEveSurfacePresenter.cs b/Packages/org.gamecult.aetheria.eve-runtime/Runtime/AetheriaEveSurfacePresenter.cs index 904c64ad2..d35bd3f19 100644 --- a/Packages/org.gamecult.aetheria.eve-runtime/Runtime/AetheriaEveSurfacePresenter.cs +++ b/Packages/org.gamecult.aetheria.eve-runtime/Runtime/AetheriaEveSurfacePresenter.cs @@ -169,16 +169,16 @@ namespace GameCult.Aetheria.EveRuntime AetheriaClient client) { if (string.Equals(surfaceId, AetheriaRuntimeDaemonGameSurfaceBuilder.SurfaceId, StringComparison.Ordinal)) - return client.State.Reactive(AetheriaClientEveSurface.Game); + return client.State.Document(AetheriaClientEveSurface.Game).Reactive(); if (string.Equals(surfaceId, AetheriaRuntimeDaemonGameSurfaceBuilder.TuiSurfaceId, StringComparison.Ordinal)) - return client.State.Reactive(AetheriaClientEveSurface.GameTui); + return client.State.Document(AetheriaClientEveSurface.GameTui).Reactive(); if (string.Equals(surfaceId, AetheriaRuntimeDaemonEditorSurfaceBuilder.SurfaceId, StringComparison.Ordinal)) - return client.State.Reactive(AetheriaClientEveSurface.Editor); + return client.State.Document(AetheriaClientEveSurface.Editor).Reactive(); if (string.Equals(surfaceId, AetheriaRuntimeDaemonEditorSurfaceBuilder.TuiSurfaceId, StringComparison.Ordinal)) - return client.State.Reactive(AetheriaClientEveSurface.EditorTui); + return client.State.Document(AetheriaClientEveSurface.EditorTui).Reactive(); return null; } diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClient.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClient.cs index 92b1f67cf..e66949f9c 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClient.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClient.cs @@ -182,9 +182,9 @@ namespace GameCult.Aetheria.State.Verse internal AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon() { ThrowIfDisposed(); - _observedFrame ??= State.Reactive(); - _observedSoaView ??= State.Reactive(); - _observedZoneRender ??= State.Reactive(); + _observedFrame ??= State.Document().Reactive(); + _observedSoaView ??= State.Document().Reactive(); + _observedZoneRender ??= State.Document().Reactive(); return AetheriaRuntimeObservedDaemonState.TryCreateCurrent( _observedFrame, _observedSoaView, diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs index 3fb934455..fb97e5a71 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs @@ -1,9 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using GameCult.Mesh; -using R3; #nullable enable @@ -225,22 +221,6 @@ namespace GameCult.Aetheria.State.Verse return (CultMeshDocumentHandle)(object)document; } - public Task> ReactiveAsync( - AetheriaClientEveSurface surface, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(surface).ReactiveAsync(options); - } - - public CultMeshReactiveDocument Reactive( - AetheriaClientEveSurface surface, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(surface).Reactive(options); - } - public CultMeshDocumentHandle Document(AetheriaRuntimeRtsViewportBounds viewport) where TDocument : class { @@ -259,22 +239,6 @@ namespace GameCult.Aetheria.State.Verse $"Aetheria typed state does not expose a viewport document for {typeof(TDocument).FullName}."); } - public Task> ReactiveAsync( - AetheriaRuntimeRtsViewportBounds viewport, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(viewport).ReactiveAsync(options); - } - - public CultMeshReactiveDocument Reactive( - AetheriaRuntimeRtsViewportBounds viewport, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(viewport).Reactive(options); - } - public CultMeshDocumentHandle Document(int entityOrZoneIndex) where TDocument : class { @@ -289,22 +253,6 @@ namespace GameCult.Aetheria.State.Verse $"Aetheria typed state does not expose an indexed document for {typeof(TDocument).FullName}."); } - public Task> ReactiveAsync( - int entityOrZoneIndex, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(entityOrZoneIndex).ReactiveAsync(options); - } - - public CultMeshReactiveDocument Reactive( - int entityOrZoneIndex, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(entityOrZoneIndex).Reactive(options); - } - public CultMeshDocumentHandle Document(string seatId) where TDocument : class { @@ -317,63 +265,6 @@ namespace GameCult.Aetheria.State.Verse return (CultMeshDocumentHandle)(object)_starbridgePlayerSeat(seatId); } - public Task> ReactiveAsync( - string seatId, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(seatId).ReactiveAsync(options); - } - - public CultMeshReactiveDocument Reactive( - string seatId, - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document(seatId).Reactive(options); - } - - private CultMeshReactiveDocument? TryReactive( - CultMeshReactiveDocumentOptions? options) - where TDocument : class - { - try - { - return Reactive(options); - } - catch (KeyNotFoundException) - { - return null; - } - } - - public Observable Watch() - where TDocument : class - { - return Document().Watch(); - } - - public IDisposable Watch(Action onNext) - where TDocument : class - { - if (onNext == null) throw new ArgumentNullException(nameof(onNext)); - return Document().Watch(onNext); - } - - public Task> ReactiveAsync( - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document().ReactiveAsync(options); - } - - public CultMeshReactiveDocument Reactive( - CultMeshReactiveDocumentOptions? options = null) - where TDocument : class - { - return Document().Reactive(options); - } - public Func CreateEveSurfaceStateRefResolver() { return CreateEveSurfaceCultMeshStateRefResolver().AsFunc(); @@ -381,10 +272,10 @@ namespace GameCult.Aetheria.State.Verse public CultMeshStateRefResolver CreateEveSurfaceCultMeshStateRefResolver() { - _eveStateRefFrame ??= Reactive(); - _eveStateRefHealth ??= Reactive(); - _eveStateRefCommandBoundary ??= Reactive(); - _eveStateRefCatalog ??= Reactive(); + _eveStateRefFrame ??= Document().Reactive(); + _eveStateRefHealth ??= Document().Reactive(); + _eveStateRefCommandBoundary ??= Document().Reactive(); + _eveStateRefCatalog ??= Document().Reactive(); return AetheriaRuntimeStateRefResolver.CreateEveSurfaceCultMeshStateRefResolver( () => _eveStateRefFrame.Current, diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs index bae8288c0..d6ac6396d 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeVerseClient.cs @@ -497,11 +497,11 @@ namespace GameCult.Aetheria.State.Verse seatId => Document( AetheriaRuntimeVerseRecordKeys.StarbridgePlayerSeat(seatId))); - managedDaemonFrame = state.Reactive(); - managedCatalog = state.Reactive(); - managedLoadoutTemplates = state.Reactive(); - managedStarbridgeScenario = state.Reactive(); - managedStarbridgeSession = state.Reactive(); + managedDaemonFrame = state.Document().Reactive(); + managedCatalog = state.Document().Reactive(); + managedLoadoutTemplates = state.Document().Reactive(); + managedStarbridgeScenario = state.Document().Reactive(); + managedStarbridgeSession = state.Document().Reactive(); _managedDaemonFrame = managedDaemonFrame; _managedCatalog = managedCatalog; _managedLoadoutTemplates = managedLoadoutTemplates;