diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 704939e60..868edec8c 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -8117,7 +8117,6 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root "public Task LatestAsync()", "public TDocument Latest()", "public CultMeshReactiveDocument Reactive(", - "public AetheriaRuntimeObservedDaemonState? LatestObservedDaemon()", "public AetheriaRuntimeObservedDockingState? CurrentDocking(", "public CultMeshReactiveDocument Reactive(", "public CultMeshReactiveDocument Reactive(", @@ -8230,6 +8229,21 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root "ReactiveEditorTuiSurface(", "ReactiveEditorTuiSurfaceAsync(" }; + var forbiddenObservedDaemonConvenienceWrappers = new[] + { + "LatestObservedDaemonAsync(", + "LatestObservedDaemon()", + "TryReadDaemonSoaViewAsync(" + }; + var survivingObservedDaemonConvenienceWrappers = forbiddenObservedDaemonConvenienceWrappers + .Where(symbol => clientState.Contains(symbol, StringComparison.Ordinal)) + .ToArray(); + if (survivingObservedDaemonConvenienceWrappers.Length > 0) + { + throw new InvalidOperationException( + "AetheriaClientState still exposes one-shot observed-daemon aggregate wrappers; use CurrentObservedDaemon() or generic typed document reads: " + + string.Join(", ", survivingObservedDaemonConvenienceWrappers)); + } var survivingFixedReactiveWrappers = forbiddenFixedReactiveWrappers .Where(symbol => clientState.Contains(symbol, StringComparison.Ordinal)) .ToArray(); @@ -15941,8 +15955,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) !observedDaemonState.Contains("CultMeshReactiveDocument zoneRender", StringComparison.Ordinal) || !observedDaemonState.Contains("var currentZoneRender = zoneRender?.Current;", StringComparison.Ordinal) || !observedDaemonState.Contains("new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal) || - !aetheriaClientState.Contains("var zoneRender = await LatestAsync().ConfigureAwait(false);", StringComparison.Ordinal) || - !aetheriaClientState.Contains("return new AetheriaRuntimeObservedDaemonState(frame, soaView, zoneRender);", StringComparison.Ordinal)) + !aetheriaClientState.Contains("using var zoneRender = Reactive(options);", StringComparison.Ordinal) || + !aetheriaClientState.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)", StringComparison.Ordinal)) { throw new InvalidOperationException( "Observed zone-render state acquisition must sample managed typed zone-render documents directly."); @@ -16161,6 +16175,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) "state.LatestFrame.ReactiveAsync", "state.LatestSoaView.ReactiveAsync", "public static async Task ReadAsync(", + "LatestObservedDaemonAsync(", + "LatestObservedDaemon()", "public sealed class AetheriaRuntimeReactiveObservedDaemonState", "ReactiveObservedDaemonAsync", "ReactiveObservedDaemon(", diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index 8e34e9940..d9ef3649e 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -205,7 +205,7 @@ public class DaemonRuntimeDocumentTests .GetResult(); using var zoneRenderReactive = client.State .Reactive(); - var observed = client.State.LatestObservedDaemon(); + var observed = client.State.CurrentObservedDaemon(); var observedAuthoritativeFrame = client.State.Latest(); using var catalogReactive = client.State.Reactive(); using var daemonFrameReactive = client.State.Reactive(); @@ -2216,7 +2216,7 @@ public class DaemonRuntimeDocumentTests .OpenAsync(statePath, "unity-observer-test", pullOnOpen: true) .GetAwaiter() .GetResult(); - var observed = client.State.LatestObservedDaemon(); + var observed = client.State.CurrentObservedDaemon(); Assert.IsNotNull(observed); Assert.IsTrue(observed.IsAuthoritative); @@ -2317,7 +2317,7 @@ public class DaemonRuntimeDocumentTests .OpenAsync(statePath, "unity-frame-only-observer-test", pullOnOpen: true) .GetAwaiter() .GetResult(); - var observed = client.State.LatestObservedDaemon(); + var observed = client.State.CurrentObservedDaemon(); Assert.IsNotNull(observed); Assert.IsTrue(observed.IsAuthoritative); diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs index c910ddcc7..f12ed05df 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs @@ -215,19 +215,6 @@ namespace GameCult.Aetheria.State.Verse return Document().LatestAsync().ConfigureAwait(false).GetAwaiter().GetResult(); } - public async Task LatestObservedDaemonAsync() - { - var frame = await LatestAsync().ConfigureAwait(false); - var soaView = await TryReadDaemonSoaViewAsync().ConfigureAwait(false); - var zoneRender = await LatestAsync().ConfigureAwait(false); - return new AetheriaRuntimeObservedDaemonState(frame, soaView, zoneRender); - } - - public AetheriaRuntimeObservedDaemonState? LatestObservedDaemon() - { - return LatestObservedDaemonAsync().ConfigureAwait(false).GetAwaiter().GetResult(); - } - public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon( CultMeshReactiveDocumentOptions? options = null) { @@ -438,21 +425,6 @@ namespace GameCult.Aetheria.State.Verse } } - private async Task TryReadDaemonSoaViewAsync() - { - try - { - var soaView = await LatestAsync().ConfigureAwait(false); - return string.Equals(soaView.Schema, AetheriaRuntimeDaemonSchemas.SoaView, StringComparison.Ordinal) - ? soaView - : null; - } - catch (KeyNotFoundException) - { - return null; - } - } - public Observable Watch() where TDocument : class {