From f4e682422dfb4482fdb372f228a7ecbe5d4cd58b Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 29 Jun 2026 11:56:02 +0100 Subject: [PATCH] Delete observed docking bridge --- Aetheria.State.Verify/Program.cs | 99 +-------- .../AetheriaUnityObservedDockingIndex.cs | 197 ------------------ .../AetheriaUnityObservedDockingIndex.cs.meta | 2 - .../Tests/DaemonRuntimeDocumentTests.cs | 6 - 4 files changed, 11 insertions(+), 293 deletions(-) delete mode 100644 Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs delete mode 100644 Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs.meta diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index b407b60ab..dbe10f07f 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -7365,8 +7365,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "InventoryPanel.cs"), Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "LocalMenu.cs"), Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "MenuPanel.cs"), - Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "TradeMenu.cs"), - Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaUnityObservedDockingIndex.cs") + Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "TradeMenu.cs") }; var missingPaths = menuPaths.Where(path => !File.Exists(path)).ToArray(); @@ -7429,7 +7428,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) if (directDockingOffenders.Count > 0) { throw new InvalidOperationException( - "Unity menu docking reads must use current typed state or the Unity observed docking bridge when entity objects are required; do not own duplicate reactive docking/refit documents: " + + "Unity menu docking reads must use current typed state directly and adapt Unity objects at the caller edge; do not own duplicate reactive docking/refit documents: " + string.Join(", ", directDockingOffenders)); } @@ -7449,31 +7448,7 @@ static bool HasManagedDockingSnapshotAccess(string source) return true; } - if (source.Contains("AetheriaUnityObservedDockingIndex", StringComparison.Ordinal) && - source.Contains("TryResolveObservedDockingIndex(out var dockingIndex)", StringComparison.Ordinal) && - source.Contains("dockingIndex.TryResolveCurrent", StringComparison.Ordinal) && - !source.Contains("AetheriaClientReactiveDockingState _reactiveDockingState", StringComparison.Ordinal)) - { - return true; - } - - return source.Contains("public sealed class AetheriaUnityObservedDockingIndex", StringComparison.Ordinal) && - source.Contains("TryReadDockingSnapshots(", StringComparison.Ordinal) && - source.Contains("AetheriaUnityRuntimeClientProvider.RuntimeState()", StringComparison.Ordinal) && - source.Contains("state.CurrentDockingState()", StringComparison.Ordinal) && - source.Contains("state.CurrentStationRefit()", StringComparison.Ordinal) && - source.Contains("state.CurrentEntityState()", StringComparison.Ordinal) && - !source.Contains("CultMeshReactiveDocument", StringComparison.Ordinal) && - !source.Contains("CultMeshReactiveDocument", StringComparison.Ordinal) && - !source.Contains("CultMeshReactiveDocument", StringComparison.Ordinal) && - !source.Contains(".ReactiveCurrentEntity(\"unity-observed-docking\")", StringComparison.Ordinal) && - !source.Contains(".ReactiveCurrentDocking(\"unity-observed-docking\")", StringComparison.Ordinal) && - !source.Contains(".ReactiveStationRefit(\"unity-observed-docking\")", StringComparison.Ordinal) && - !source.Contains("state.Latest()", StringComparison.Ordinal) && - !source.Contains("state.Latest()", StringComparison.Ordinal) && - !source.Contains("state.Latest()", StringComparison.Ordinal) && - !source.Contains("AetheriaClientReactiveDockingState _dockingState", StringComparison.Ordinal) && - !source.Contains(".ReactiveDockingState()", StringComparison.Ordinal); + return false; } static void RequireUnitySharedDocumentAccessorErgonomics(string root) @@ -13240,10 +13215,12 @@ static void RequireMainMenuContinueRunState(string root) var packageStore = File.Exists(packageStorePath) ? File.ReadAllText(packageStorePath) : throw new InvalidOperationException("Cannot verify Continue entity payload readback; package runtime store is missing."); - var observedDockingIndexPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaUnityObservedDockingIndex.cs"); - var observedDockingIndex = File.Exists(observedDockingIndexPath) - ? File.ReadAllText(observedDockingIndexPath) - : throw new InvalidOperationException("Cannot verify Continue entity identity; AetheriaUnityObservedDockingIndex.cs is missing."); + var deletedObservedDockingIndexPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaUnityObservedDockingIndex.cs"); + if (File.Exists(deletedObservedDockingIndexPath)) + { + throw new InvalidOperationException( + "AetheriaUnityObservedDockingIndex is dead state-access chaff; read current typed docking/refit documents directly and adapt Unity objects at the caller edge."); + } var currentEntityPresentationPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaUnityCurrentEntityPresentation.cs"); var currentEntityPresentation = File.Exists(currentEntityPresentationPath) ? File.ReadAllText(currentEntityPresentationPath) @@ -13695,59 +13672,6 @@ static void RequireMainMenuContinueRunState(string root) string.Join(", ", managerTargetQueryHits)); } - var requiredObservedDockingSymbols = new[] - { - "public sealed class AetheriaUnityObservedDockingIndex", - "TryReadDockingSnapshots(", - "AetheriaUnityRuntimeClientProvider.RuntimeState()", - "state.CurrentDockingState()", - "state.CurrentStationRefit()", - "state.CurrentEntityState()", - "public bool IsEntityUndocked(Entity entity)", - "public bool TryResolveDockingBay(", - "out AetheriaRuntimeCurrentDockingDocument docking", - "_observedEntityIndex.TryResolveEntityByRecordKey(docking.DockParentEntityKey", - "docking.DockingBayIndex" - }; - var missingObservedDockingSymbols = requiredObservedDockingSymbols - .Where(symbol => !observedDockingIndex.Contains(symbol, StringComparison.Ordinal)) - .ToArray(); - if (missingObservedDockingSymbols.Length > 0) - { - throw new InvalidOperationException( - "Observed docking relationship queries must live in AetheriaUnityObservedDockingIndex instead of ActionGameManager: " + - string.Join(", ", missingObservedDockingSymbols)); - } - - var forbiddenObservedDockingSymbols = new[] - { - "CultMeshReactiveDocument", - "CultMeshReactiveDocument", - "CultMeshReactiveDocument", - ".ReactiveCurrentEntity(\"unity-observed-docking\")", - ".ReactiveCurrentDocking(\"unity-observed-docking\")", - ".ReactiveStationRefit(\"unity-observed-docking\")", - "state.Latest()", - "state.Latest()", - "state.Latest()", - "state.Reactive()", - "state.Reactive()", - "state.Reactive()", - "AetheriaRuntimeObservedDockingState", - "new AetheriaRuntimeObservedDockingState(", - "ReactiveEntity()", - "ReactiveDocking()" - }; - var observedDockingHits = forbiddenObservedDockingSymbols - .Where(symbol => observedDockingIndex.Contains(symbol, StringComparison.Ordinal)) - .ToArray(); - if (observedDockingHits.Length > 0) - { - throw new InvalidOperationException( - "Observed docking state composition must sample native current typed documents in AetheriaUnityObservedDockingIndex: " + - string.Join(", ", observedDockingHits)); - } - var requiredCurrentEntityBinderSymbols = new[] { "public sealed class AetheriaUnityCurrentEntityBinder", @@ -13902,7 +13826,7 @@ static void RequireMainMenuContinueRunState(string root) if (managerDockingScanHits.Length > 0) { throw new InvalidOperationException( - "ActionGameManager still scans daemon docking relationships instead of delegating to AetheriaUnityObservedDockingIndex: " + + "ActionGameManager still scans daemon docking relationships instead of reading current typed docking state at the caller edge: " + string.Join(", ", managerDockingScanHits)); } @@ -16598,8 +16522,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) var missingProviderClientAccess = providerOwnedClientAccessSources .Where(pair => - !pair.Value.Contains("AetheriaUnityRuntimeClientProvider", StringComparison.Ordinal) && - !pair.Value.Contains("AetheriaUnityObservedDockingIndex", StringComparison.Ordinal)) + !pair.Value.Contains("AetheriaUnityRuntimeClientProvider", StringComparison.Ordinal)) .Select(pair => pair.Key) .ToArray(); if (missingProviderClientAccess.Length > 0) diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs deleted file mode 100644 index e54d73548..000000000 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs +++ /dev/null @@ -1,197 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -using System; -using System.Linq; -using GameCult.Aetheria.State.Verse; - -public sealed class AetheriaUnityObservedDockingIndex -{ - private readonly AetheriaUnityObservedEntityIndex _observedEntityIndex; - - public AetheriaUnityObservedDockingIndex(AetheriaUnityObservedEntityIndex observedEntityIndex) - { - _observedEntityIndex = observedEntityIndex ?? throw new ArgumentNullException(nameof(observedEntityIndex)); - } - - public int ResolveEntityZoneIndex(Entity entity) - { - return TryResolveCurrentDocking(entity, out var docking) - ? docking.ZoneIndex - : -1; - } - - public bool IsEntityUndocked(Entity entity) - { - return TryResolveCurrentDocking(entity, out var docking) && - !docking.IsDocked; - } - - public bool TryResolveCurrentEntity(out Entity entity) - { - entity = null; - return TryResolveCurrentEntityKey(out var currentEntityKey) && - _observedEntityIndex.TryResolveEntityByRecordKey(currentEntityKey, out entity); - } - - public bool TryResolveCurrentEntityKey(out string currentEntityKey) - { - currentEntityKey = ""; - if (TryReadDockingSnapshots(out var currentEntity, out var docking, out _)) - currentEntityKey = CurrentEntityKey(currentEntity, docking); - return !string.IsNullOrWhiteSpace(currentEntityKey); - } - - public bool TryReadCurrentEntity(out AetheriaRuntimeCurrentEntityDocument currentEntity) - { - currentEntity = null; - if (!TryReadDockingSnapshots(out var document, out _, out _)) - return false; - - currentEntity = document; - return currentEntity != null; - } - - public AetheriaRuntimeStationRefitDocument StationRefitSnapshot() - { - return TryReadDockingSnapshots(out _, out _, out var refit) - ? refit - : null; - } - - public bool TryResolveCurrentDockingBayRow(out AetheriaRuntimeStationDockingBayRow dockingBay) - { - dockingBay = null; - if (!TryReadDockingSnapshots(out _, out _, out var refit) || - !refit.IsDocked || - refit.DockingBayIndex < 0) - return false; - - dockingBay = (refit.DockingBays ?? Array.Empty()) - .FirstOrDefault(row => row != null && row.DockingBayIndex == refit.DockingBayIndex); - return dockingBay != null; - } - - public bool TryResolveCurrentDockingBay(out EquippedDockingBay dockingBay) - { - dockingBay = null; - var refit = StationRefitSnapshot(); - if (!TryResolveCurrentDockingBayRow(out _) || - string.IsNullOrWhiteSpace(refit?.DockParentEntityKey) || - refit.DockingBayIndex < 0 || - !_observedEntityIndex.TryResolveDockingBayByRecordKey( - refit.DockParentEntityKey, - refit.DockingBayIndex, - out dockingBay)) - { - return false; - } - - return dockingBay != null; - } - - public bool TryResolveCurrentDocking(out AetheriaRuntimeCurrentDockingDocument docking) - { - docking = null; - if (!TryReadDockingSnapshots(out _, out var currentDocking, out _)) - return false; - - docking = currentDocking; - return docking != null; - } - - public bool TryResolveDockingBay( - Entity child, - out Entity dockParent, - out EquippedDockingBay dockingBay) - { - return TryResolveDockingBay(child, out dockParent, out dockingBay, out _); - } - - public bool TryResolveDockingBay( - Entity child, - out Entity dockParent, - out EquippedDockingBay dockingBay, - out AetheriaRuntimeCurrentDockingDocument docking) - { - dockParent = null; - dockingBay = null; - docking = null; - if (!TryResolveCurrentDocking(child, out docking) || !docking.IsDocked) - return false; - - if (!_observedEntityIndex.TryResolveEntityByRecordKey(docking.DockParentEntityKey, out var parent) || - !(parent is OrbitalEntity)) - { - return false; - } - - if (parent.DockingBays == null || - docking.DockingBayIndex < 0 || - docking.DockingBayIndex >= parent.DockingBays.Count) - { - return false; - } - - dockParent = parent; - dockingBay = parent.DockingBays[docking.DockingBayIndex]; - return dockingBay != null; - } - - private bool TryResolveCurrentDocking( - Entity entity, - out AetheriaRuntimeCurrentDockingDocument docking) - { - TryResolveCurrentDocking(out docking); - if (entity == null || - docking == null || - docking.CurrentEntityIndex != entity.DaemonEntityIndex) - { - return false; - } - - if (_observedEntityIndex.TryResolveEntityRecordKey(entity, out var entityKey) && - !string.IsNullOrWhiteSpace(docking.CurrentEntityKey) && - !string.Equals(docking.CurrentEntityKey, entityKey, StringComparison.Ordinal)) - { - return false; - } - - return true; - } - - private bool TryReadDockingSnapshots( - out AetheriaRuntimeCurrentEntityDocument entity, - out AetheriaRuntimeCurrentDockingDocument docking, - out AetheriaRuntimeStationRefitDocument refit) - { - entity = null; - docking = null; - refit = null; - try - { - var state = AetheriaUnityRuntimeClientProvider.RuntimeState(); - docking = state.CurrentDockingState(); - refit = state.CurrentStationRefit(); - if (docking == null || refit == null) - return false; - - entity = state.CurrentEntityState(); - return true; - } - catch - { - return false; - } - } - - private static string CurrentEntityKey( - AetheriaRuntimeCurrentEntityDocument entity, - AetheriaRuntimeCurrentDockingDocument docking) - { - return !string.IsNullOrWhiteSpace(entity?.EntityKey) - ? entity.EntityKey - : docking?.CurrentEntityKey ?? ""; - } -} diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs.meta b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs.meta deleted file mode 100644 index 86472f1f1..000000000 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 3131bc989a39393489b141a3d040e186 \ No newline at end of file diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index 429cfbfba..ba4ed3ef9 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -334,12 +334,6 @@ public class DaemonRuntimeDocumentTests Assert.AreEqual(currentEntity.EntityKey, currentEntityByType.EntityKey); Assert.AreEqual(currentEntity.EntityKey, currentEntityFromClientType.EntityKey); Assert.AreEqual(currentEntity.EntityKey, currentDocking.CurrentEntityKey); - Assert.IsNotNull(observedDocking); - Assert.AreEqual(currentEntity.EntityKey, observedDocking.CurrentEntityKey); - Assert.AreEqual(currentEntity.EntityIndex, observedDocking.CurrentEntityIndex); - Assert.AreEqual(currentDocking.CurrentEntityKey, observedDocking.Docking.CurrentEntityKey); - Assert.AreEqual(stationRefit.DockParentEntityKey, observedDocking.Refit.DockParentEntityKey); - Assert.IsFalse(observedDocking.TryResolveCurrentDockingBayRow(out _)); Assert.AreEqual(currentEntity.EntityKey, currentDockingReactive.Current.CurrentEntityKey); Assert.AreEqual("", stationRefit.DockParentEntityKey); Assert.AreEqual("", stationRefitReactive.Current.DockParentEntityKey);