From 3048b5205836a2b4d7a4262567cc5b795f0b752b Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 29 Jun 2026 00:08:58 +0100 Subject: [PATCH] Use generic current state documents --- Aetheria.State.Verify/Program.cs | 87 ++++++++++++------- .../AetheriaUnityObservedDockingIndex.cs | 4 +- .../Tests/DaemonRuntimeDocumentTests.cs | 12 +-- Assets/Scripts/UI/HUD/SchematicDisplay.cs | 2 +- Assets/Scripts/UI/Menu/InventoryMenu.cs | 3 +- Assets/Scripts/UI/Menu/InventoryPanel.cs | 3 +- Assets/Scripts/UI/Menu/MenuPanel.cs | 2 +- Assets/Scripts/UI/Menu/SectorRenderer.cs | 3 +- Assets/Scripts/UI/Menu/TradeMenu.cs | 2 +- .../Runtime/AetheriaClientState.cs | 70 +-------------- 10 files changed, 73 insertions(+), 115 deletions(-) diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 959697a80..2c3d4c4b9 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -2564,7 +2564,7 @@ static void RequireDaemonRenderQueryAuthority(string root) "AetheriaUnityRuntimeClientProvider.ResolveClient(", "ResolveClient().State.Reactive()", "ResolveClient().State.Reactive()", - "ResolveClient().State.Current.ReactiveEntity()", + "ResolveClient().State.Reactive()", "return _currentEntity?.Current?.Hud ?? new AetheriaRuntimeCurrentEntityHudStatus();", "_currentEntity?.Dispose()", "hud.OverrideShutdown", @@ -4585,7 +4585,7 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root) "SectorRenderer", "AetheriaRuntimeCurrentZoneDocument", "_currentZone", - ".ReactiveZone()", + ".Reactive()", "AetheriaRuntimeCurrentZoneSession", ".ObserveZone()"); RequireReactiveTypedDocumentAccess( @@ -4769,7 +4769,7 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root) "ResolveVisibleTabs(", "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)", "AetheriaRuntimeCurrentDockingDocument", - "ResolveClient().State.Current.LatestDocking()", + "ResolveClient().State.Latest()", "docking.IsDocked", "AetheriaClient", "AetheriaUnityRuntimeClientProvider.ResolveClient(", @@ -5731,7 +5731,7 @@ static void RequireTradeCargoSelectorUseEveSurface(string root) "AetheriaRuntimeTradeCargoSelectorCommandKind.Select", "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)", "AetheriaRuntimeCurrentDockingDocument", - "ResolveClient().State.Current.LatestDocking()", + "ResolveClient().State.Latest()", "ResolveClient().State.LatestStationRefit()", "SetTargetCargo(", "selection.EntityKey", @@ -7024,7 +7024,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) } var clientState = File.ReadAllText(clientStatePath); - if (!clientState.Contains("public CultMeshReactiveDocument ReactiveEntity(", StringComparison.Ordinal) || + if (!clientState.Contains("public CultMeshReactiveDocument Reactive(", StringComparison.Ordinal) || !clientState.Contains("public CultMeshReactiveDocument Reactive(", StringComparison.Ordinal) || !clientState.Contains("public CultMeshReactiveDocument Reactive(", StringComparison.Ordinal)) { @@ -7043,7 +7043,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) var requiredSymbols = new[] { "ResolveCurrentEntity()", - ".ReactiveEntity()", + ".Reactive()", "ResolveStationRefitDocument()", ".Reactive()", "ResolveInventory(entityIndex)", @@ -7091,7 +7091,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root) name, "AetheriaRuntimeCurrentEntityDocument", "_currentEntity", - ".ReactiveEntity()", + ".Reactive()", "AetheriaRuntimeCurrentEntitySession", ".ObserveEntity()"); RequireReactiveTypedDocumentAccess( @@ -7132,8 +7132,8 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) "public AetheriaClientCurrentState Current { get; }", "public CultMeshDocumentHandle StationRefit { get; }", "public CultMeshDocumentHandle Docking { get; }", - "public AetheriaRuntimeCurrentDockingDocument LatestDocking()", - "public CultMeshReactiveDocument ReactiveDocking(", + "public TDocument Latest()", + "public CultMeshReactiveDocument Reactive(", "public CultMeshReactiveDocument Reactive(" }; var missingClientSymbols = requiredClientSymbols @@ -7215,7 +7215,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) static bool HasManagedDockingSnapshotAccess(string source) { if (source.Contains("AetheriaRuntimeCurrentDockingDocument", StringComparison.Ordinal) && - source.Contains("ResolveClient().State.Current.LatestDocking()", StringComparison.Ordinal) && + source.Contains("ResolveClient().State.Latest()", StringComparison.Ordinal) && !source.Contains("ResolveClient().State.CurrentDocking()", StringComparison.Ordinal) && !source.Contains("AetheriaClientReactiveDockingState _dockingState", StringComparison.Ordinal) && !source.Contains(".ReactiveDockingState()", StringComparison.Ordinal)) @@ -7225,8 +7225,8 @@ static bool HasManagedDockingSnapshotAccess(string source) if (source.Contains("AetheriaRuntimeObservedDockingState", StringComparison.Ordinal) && source.Contains("var state = _resolveClient()?.State;", StringComparison.Ordinal) && - source.Contains("state.Current.LatestEntity()", StringComparison.Ordinal) && - source.Contains("state.Current.LatestDocking()", StringComparison.Ordinal) && + source.Contains("state.Latest()", StringComparison.Ordinal) && + source.Contains("state.Latest()", StringComparison.Ordinal) && source.Contains("state.LatestStationRefit()", StringComparison.Ordinal) && !source.Contains("State?.CurrentDocking()", StringComparison.Ordinal) && !source.Contains(".State.CurrentDocking()", StringComparison.Ordinal) && @@ -7249,8 +7249,8 @@ static bool HasManagedDockingSnapshotAccess(string source) return source.Contains("public sealed class AetheriaUnityObservedDockingIndex", StringComparison.Ordinal) && source.Contains("AetheriaRuntimeObservedDockingState", StringComparison.Ordinal) && source.Contains("var state = _resolveClient()?.State;", StringComparison.Ordinal) && - source.Contains("state.Current.LatestEntity()", StringComparison.Ordinal) && - source.Contains("state.Current.LatestDocking()", StringComparison.Ordinal) && + source.Contains("state.Latest()", StringComparison.Ordinal) && + source.Contains("state.Latest()", StringComparison.Ordinal) && source.Contains("state.LatestStationRefit()", StringComparison.Ordinal) && !source.Contains("State?.CurrentDocking()", StringComparison.Ordinal) && !source.Contains(".State.CurrentDocking()", StringComparison.Ordinal) && @@ -7283,12 +7283,10 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "public AetheriaRuntimePlayerSettingsDocument LatestPlayer()", "public Task LatestVerseHostAsync()", "public AetheriaRuntimeVerseHostSettingsDocument LatestVerseHost()", - "public Task> ReactiveZoneAsync(", - "public CultMeshReactiveDocument ReactiveZone(", - "public Task> ReactiveEntityAsync(", - "public CultMeshReactiveDocument ReactiveEntity(", - "public Task> ReactiveDockingAsync(", - "public CultMeshReactiveDocument ReactiveDocking(", + "public Task LatestAsync()", + "public TDocument Latest()", + "public Task> ReactiveAsync(", + "public CultMeshReactiveDocument Reactive(", "public CultMeshDocumentHandle Document(int entityOrZoneIndex)", "public CultMeshReactiveDocument Reactive(" }; @@ -7405,7 +7403,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "CultMeshReactiveDocument _currentEntity", "ResolveClient().State.Reactive()", "ResolveClient().State.Reactive()", - "ResolveClient().State.Current.ReactiveEntity()", + "ResolveClient().State.Reactive()", "_catalog?.Dispose()", "_playerSettings?.Dispose()", "_currentEntity?.Dispose()", @@ -7755,7 +7753,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "CultMeshReactiveDocument _zoneDetails", ".Reactive()", ".Current", - ".ReactiveZone()", + ".Reactive()", ".Reactive(zoneIndex)", "_sectorMap?.Dispose()", "_currentZone?.Dispose()", @@ -7785,7 +7783,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "SectorRenderer", "AetheriaRuntimeCurrentZoneDocument", "_currentZone", - ".ReactiveZone()", + ".Reactive()", "AetheriaRuntimeCurrentZoneSession", ".ObserveZone()"); RequireReactiveTypedDocumentAccess( @@ -7906,9 +7904,8 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root) { "public AetheriaRuntimeSectorMapDocument LatestSectorMap()", "public AetheriaRuntimeZoneContactsDocument LatestZoneContacts()", - "public AetheriaRuntimeCurrentZoneDocument LatestZone()", - "public CultMeshReactiveDocument ReactiveZone(", - "public AetheriaRuntimeCurrentEntityDocument LatestEntity()", + "public TDocument Latest()", + "public CultMeshReactiveDocument Reactive(", "public CultMeshDocumentHandle Document(AetheriaRuntimeRtsViewportBounds viewport)", "public TDocument Latest(AetheriaRuntimeRtsViewportBounds viewport)", "public CultMeshReactiveDocument Reactive(", @@ -8267,6 +8264,36 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root string.Join(", ", survivingDetailConvenienceWrappers)); } + var currentState = clientState.Split( + "public sealed class AetheriaClientCurrentState", + StringSplitOptions.None).Last().Split( + "public sealed class AetheriaClientSettingsState", + StringSplitOptions.None)[0]; + var forbiddenCurrentConvenienceWrappers = new[] + { + "LatestZone(", + "LatestZoneAsync(", + "ReactiveZone(", + "ReactiveZoneAsync(", + "LatestEntity(", + "LatestEntityAsync(", + "ReactiveEntity(", + "ReactiveEntityAsync(", + "LatestDocking(", + "LatestDockingAsync(", + "ReactiveDocking(", + "ReactiveDockingAsync(" + }; + var survivingCurrentConvenienceWrappers = forbiddenCurrentConvenienceWrappers + .Where(symbol => currentState.Contains(symbol, StringComparison.Ordinal)) + .ToArray(); + if (survivingCurrentConvenienceWrappers.Length > 0) + { + throw new InvalidOperationException( + "AetheriaClientCurrentState must use top-level generic document access instead of named latest/reactive wrappers: " + + string.Join(", ", survivingCurrentConvenienceWrappers)); + } + var observedDaemonState = File.ReadAllText(observedDaemonStatePath); if (!observedDaemonState.Contains("public static bool TryCreateCurrent(", StringComparison.Ordinal) || !observedDaemonState.Contains("new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal)) @@ -12909,8 +12936,8 @@ static void RequireMainMenuContinueRunState(string root) "public sealed class AetheriaUnityObservedDockingIndex", "AetheriaRuntimeObservedDockingState", "var state = _resolveClient()?.State;", - "state.Current.LatestEntity()", - "state.Current.LatestDocking()", + "state.Latest()", + "state.Latest()", "state.LatestStationRefit()", "public bool IsEntityUndocked(Entity entity)", "public bool TryResolveDockingBay(", @@ -12935,8 +12962,8 @@ static void RequireMainMenuContinueRunState(string root) "CultMeshReactiveDocument _stationRefit", "State?.CurrentDocking()", ".State.CurrentDocking()", - "state.ReactiveEntity()", - "state.ReactiveDocking()", + "ReactiveEntity()", + "ReactiveDocking()", "state.Reactive()" }; var observedDockingHits = forbiddenObservedDockingSymbols diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs index fd71db566..229f6d389 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs @@ -171,8 +171,8 @@ public sealed class AetheriaUnityObservedDockingIndex : IDisposable if (state == null) return false; - var currentEntity = state.Current.LatestEntity(); - var currentDocking = state.Current.LatestDocking(); + var currentEntity = state.Latest(); + var currentDocking = state.Latest(); var stationRefit = state.LatestStationRefit(); if (currentDocking == null || stationRefit == null) return false; diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index 55d2d41bb..3786b11e4 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -164,7 +164,7 @@ public class DaemonRuntimeDocumentTests .GetAwaiter() .GetResult(); - var currentEntity = client.State.Current.LatestEntity(); + var currentEntity = client.State.Latest(); var latestFrame = client.State.LatestDaemonFrame(); var catalog = client.State.LatestCatalog(); var playerSettings = client.State.Settings.LatestPlayer(); @@ -213,9 +213,9 @@ public class DaemonRuntimeDocumentTests using var playerSettingsReactive = client.State.Reactive(); using var verseHostSettingsReactive = client.State.Reactive(); using var zoneContactsReactive = client.State.Reactive(); - using var currentZoneReactive = client.State.Current.ReactiveZone(); - using var currentEntityDocumentReactive = client.State.Current.ReactiveEntity(); - using var currentDockingReactive = client.State.Current.ReactiveDocking(); + 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.Details.Reactive(0); using var selectedObjectReactive = client.State.Details.Reactive(0); @@ -226,7 +226,7 @@ public class DaemonRuntimeDocumentTests using var renderSplatsViewportReactive = client.State.Viewports.Reactive(viewport); using var playerHudCatalog = client.State.Reactive(); using var playerHudSettings = client.State.Reactive(); - using var playerHudEntity = client.State.Current.ReactiveEntity(); + using var playerHudEntity = client.State.Reactive(); var gameSurface = client.State.LatestGameSurface(); var gameTuiSurface = client.State.LatestGameTuiSurface(); var editorSurface = client.State.LatestEditorSurface(); @@ -404,7 +404,7 @@ public class DaemonRuntimeDocumentTests .GetResult(); var aetheria = verse.Aetheria(); - var currentEntity = aetheria.Current.LatestEntity(); + var currentEntity = aetheria.Latest(); var latestFrameDocument = verse.Document( AetheriaRuntimeVerseRecordKeys.DaemonFrameLatest); using var latestFrameReactive = latestFrameDocument.Reactive(); diff --git a/Assets/Scripts/UI/HUD/SchematicDisplay.cs b/Assets/Scripts/UI/HUD/SchematicDisplay.cs index 2cc574ada..2805accf0 100644 --- a/Assets/Scripts/UI/HUD/SchematicDisplay.cs +++ b/Assets/Scripts/UI/HUD/SchematicDisplay.cs @@ -359,7 +359,7 @@ public class SchematicDisplay : MonoBehaviour { try { - _currentEntity = ResolveClient().State.Current.ReactiveEntity(); + _currentEntity = ResolveClient().State.Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/Menu/InventoryMenu.cs b/Assets/Scripts/UI/Menu/InventoryMenu.cs index ee0b07991..2d13386cb 100644 --- a/Assets/Scripts/UI/Menu/InventoryMenu.cs +++ b/Assets/Scripts/UI/Menu/InventoryMenu.cs @@ -966,8 +966,7 @@ public class InventoryMenu : MonoBehaviour { _currentEntity = ResolveClient() .State - .Current - .ReactiveEntity(); + .Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/Menu/InventoryPanel.cs b/Assets/Scripts/UI/Menu/InventoryPanel.cs index c65114b89..c2347efc4 100644 --- a/Assets/Scripts/UI/Menu/InventoryPanel.cs +++ b/Assets/Scripts/UI/Menu/InventoryPanel.cs @@ -1505,8 +1505,7 @@ private void Update() { _currentEntity = ResolveClient() .State - .Current - .ReactiveEntity(); + .Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/Menu/MenuPanel.cs b/Assets/Scripts/UI/Menu/MenuPanel.cs index ac292ce22..059ab57b3 100644 --- a/Assets/Scripts/UI/Menu/MenuPanel.cs +++ b/Assets/Scripts/UI/Menu/MenuPanel.cs @@ -175,7 +175,7 @@ public class MenuPanel : MonoBehaviour docking = null; try { - docking = ResolveClient().State.Current.LatestDocking(); + docking = ResolveClient().State.Latest(); return docking != null; } catch (Exception ex) diff --git a/Assets/Scripts/UI/Menu/SectorRenderer.cs b/Assets/Scripts/UI/Menu/SectorRenderer.cs index 780a21aeb..011b338bc 100644 --- a/Assets/Scripts/UI/Menu/SectorRenderer.cs +++ b/Assets/Scripts/UI/Menu/SectorRenderer.cs @@ -323,8 +323,7 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS { _currentZone ??= ResolveClient() .State - .Current - .ReactiveZone(); + .Reactive(); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/Menu/TradeMenu.cs b/Assets/Scripts/UI/Menu/TradeMenu.cs index e686383e4..d56ccae46 100644 --- a/Assets/Scripts/UI/Menu/TradeMenu.cs +++ b/Assets/Scripts/UI/Menu/TradeMenu.cs @@ -537,7 +537,7 @@ public class TradeMenu : MonoBehaviour docking = null; try { - docking = ResolveClient().State.Current.LatestDocking(); + docking = ResolveClient().State.Latest(); return docking != null; } catch (Exception ex) diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs index 1519c4ee3..dd433a7d6 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs @@ -234,8 +234,8 @@ namespace GameCult.Aetheria.State.Verse public AetheriaRuntimeObservedDockingState? CurrentDocking( CultMeshReactiveDocumentOptions? options = null) { - using var entity = Current.ReactiveEntity(options); - using var docking = Current.ReactiveDocking(options); + using var entity = Reactive(options); + using var docking = Reactive(options); using var refit = Reactive(options); return AetheriaRuntimeObservedDockingState.TryCreateCurrent(entity, docking, refit, out var current) ? current @@ -715,72 +715,6 @@ namespace GameCult.Aetheria.State.Verse public CultMeshDocumentHandle Docking { get; } - public Task LatestZoneAsync() - { - return Zone.LatestAsync(); - } - - public AetheriaRuntimeCurrentZoneDocument LatestZone() - { - return LatestZoneAsync().ConfigureAwait(false).GetAwaiter().GetResult(); - } - - public Task> ReactiveZoneAsync( - CultMeshReactiveDocumentOptions? options = null) - { - return Zone.ReactiveAsync(options); - } - - public CultMeshReactiveDocument ReactiveZone( - CultMeshReactiveDocumentOptions? options = null) - { - return Zone.Reactive(options); - } - - public Task LatestEntityAsync() - { - return Entity.LatestAsync(); - } - - public AetheriaRuntimeCurrentEntityDocument LatestEntity() - { - return LatestEntityAsync().ConfigureAwait(false).GetAwaiter().GetResult(); - } - - public Task> ReactiveEntityAsync( - CultMeshReactiveDocumentOptions? options = null) - { - return Entity.ReactiveAsync(options); - } - - public CultMeshReactiveDocument ReactiveEntity( - CultMeshReactiveDocumentOptions? options = null) - { - return Entity.Reactive(options); - } - - public Task LatestDockingAsync() - { - return Docking.LatestAsync(); - } - - public AetheriaRuntimeCurrentDockingDocument LatestDocking() - { - return LatestDockingAsync().ConfigureAwait(false).GetAwaiter().GetResult(); - } - - public Task> ReactiveDockingAsync( - CultMeshReactiveDocumentOptions? options = null) - { - return Docking.ReactiveAsync(options); - } - - public CultMeshReactiveDocument ReactiveDocking( - CultMeshReactiveDocumentOptions? options = null) - { - return Docking.Reactive(options); - } - } public sealed class AetheriaClientSettingsState