diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 7f6b2ec9b..316a6963b 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -4224,9 +4224,10 @@ static void RequireRuntimeInputScreenUsesEveSurface(string root) "AetheriaRuntimeInputSettingsCommandBody", "AetheriaRuntimeEveCommandKind.SetBindingOverride", "AetheriaRuntimeEveCommandKind.SetActionBarEnabled", - "AetheriaClient", - "AetheriaUnityRuntimeClientProvider.ResolveClient(", - ".State", + "RuntimeClient(", + "RequireLocalStateBoot()", + "AetheriaUnityRuntimeClientProvider", + ".Reactive(", "action.ApplyBindingOverride", "new InputAction(\"Aetheria Input Capture\")", "AetheriaRuntimeInputSettingsSurfaceBuilder.IsSupportedCapturePath(", @@ -4250,7 +4251,7 @@ static void RequireRuntimeInputScreenUsesEveSurface(string root) "InputDisplayLayout", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Reactive(", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); @@ -7680,7 +7681,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) var requiredObservedTargetSymbols = new[] { "CultMeshReactiveDocument _zoneContacts", - ".Reactive()", + ".Reactive(\"unity-observed-target-query\")", "_zoneContacts?.Dispose()", "_zoneContacts?.Current" }; @@ -7810,7 +7811,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MainMenu", "AetheriaRuntimeSectorMapDocument", "_sectorMap", - ".Reactive()", + ".Reactive(", "AetheriaRuntimeSectorMapSession", ".ObserveSectorMap()"); RequireReactiveTypedDocumentAccess( @@ -7818,7 +7819,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MainMenu", "AetheriaRuntimePlayerSettingsDocument", "_playerSettings", - ".Reactive()", + ".Reactive(", "AetheriaRuntimePlayerSettingsSession", ".ObservePlayer()"); RequireReactiveTypedDocumentAccess( @@ -7826,7 +7827,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root) "MainMenu", "AetheriaRuntimeVerseHostSettingsDocument", "_verseHostSettings", - ".Reactive()", + ".Reactive(", "AetheriaRuntimeVerseHostSettingsSession", ".ObserveVerseHost()"); @@ -9340,9 +9341,9 @@ static void RequireClientTargetBootAuthority(string root) { "CurrentStateBoot()", "ResolveSectorMap(AetheriaRuntimeStateBootReport stateBoot)", - "AetheriaClient", - ".State", - ".Reactive()", + "AetheriaUnityRuntimeClientProvider", + ".Reactive(", + "PrepareDocumentAccess(stateBoot)", "ResolveVerseHostSettings(AetheriaRuntimeStateBootReport stateBoot)", "AetheriaState.At(AetheriaUnityRuntimePaths.GameDataDirectory)", ".ClientTarget", @@ -12975,7 +12976,7 @@ static void RequireMainMenuVerseHostDocumentAccess(string root) var requiredMainMenuSymbols = new[] { "ResolveVerseHostSettings(AetheriaRuntimeStateBootReport stateBoot)", - ".Reactive()", + ".Reactive(", "AetheriaRuntimeClientTargetSurfaceBuilder.Build(", "AetheriaRuntimeMainMenuSurfaceBuilder.BuildRoot(" }; @@ -13148,9 +13149,9 @@ static void RequireMainMenuContinueRunState(string root) var requiredMenuSymbols = new[] { "ResolveSectorMap", - "AetheriaClient", - ".State", - ".Reactive()", + "AetheriaUnityRuntimeClientProvider", + ".Reactive(", + "PrepareDocumentAccess(stateBoot)", "ContinueGame()", "SceneManager.LoadScene(\"ARPG\")" }; @@ -13484,8 +13485,7 @@ static void RequireMainMenuContinueRunState(string root) "private bool TryQueryEntityTarget(", "AetheriaRuntimeZoneContactRow", "AetheriaRuntimeZoneTargetRow", - ".State", - ".Reactive()", + ".Reactive(\"unity-observed-target-query\")", "_zoneContacts?.Current", "_zoneContacts?.Dispose()", "_entityIndex.TryResolveEntityByDaemonIndex(targetEntityIndex, out var targetEntity)" @@ -14536,8 +14536,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) "private bool TryQueryEntityTarget(", "AetheriaRuntimeZoneContactRow", "AetheriaRuntimeZoneTargetRow", - ".State", - ".Reactive()", + ".Reactive(\"unity-observed-target-query\")", "_zoneContacts?.Current", "_zoneContacts?.Dispose()", "_entityIndex.TryResolveEntityByDaemonIndex(targetEntityIndex, out var targetEntity)" @@ -15342,8 +15341,9 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) { "TryStartDaemonObservedGame", "ResolveSectorMap(stateBoot)", - ".State", - ".Reactive()", + "AetheriaUnityRuntimeClientProvider", + "PrepareDocumentAccess(stateBoot)", + ".Reactive(", "sectorMap.FrameId", "SceneManager.LoadScene(\"ARPG\")" }; @@ -16765,20 +16765,20 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) "AetheriaDaemonObserver still reads observed daemon state through the AetheriaClient compatibility helper."); } - if (!mainMenu.Contains("AetheriaClient", StringComparison.Ordinal) || + if (!mainMenu.Contains("AetheriaUnityRuntimeClientProvider", 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("PrepareDocumentAccess(stateBoot)", StringComparison.Ordinal) || + !mainMenu.Contains(".Reactive(", StringComparison.Ordinal) || + !mainMenu.Contains(".Reactive(", StringComparison.Ordinal)) { throw new InvalidOperationException( - "MainMenu no longer routes sector-map lookup through the shared Aetheria client facade."); + "MainMenu must read menu state through provider-native managed typed documents."); } if (mainMenu.Contains("AetheriaRuntimeStateReader.TryReadDaemonFrame", StringComparison.Ordinal)) { throw new InvalidOperationException( - "MainMenu still reads daemon frames through the runtime file reader instead of the shared Aetheria client facade."); + "MainMenu still reads daemon frames through the runtime file reader instead of managed typed documents."); } if (mainMenu.Contains("OpenRuntimeCatalog(", StringComparison.Ordinal)) diff --git a/Assets/Scripts/Gameplay/ActionGameManager.cs b/Assets/Scripts/Gameplay/ActionGameManager.cs index eff4bb62b..fbfb49267 100644 --- a/Assets/Scripts/Gameplay/ActionGameManager.cs +++ b/Assets/Scripts/Gameplay/ActionGameManager.cs @@ -89,9 +89,7 @@ public class ActionGameManager : MonoBehaviour () => _viewDirection, () => CurrentEntity); private AetheriaUnityObservedTargetQuery ObservedTargetQuery => - _observedTargetQuery ??= new AetheriaUnityObservedTargetQuery( - () => ResolveDaemonObserver()?.Client, - _observedEntityIndex); + _observedTargetQuery ??= new AetheriaUnityObservedTargetQuery(_observedEntityIndex); private AetheriaUnityObservedFrameApplier ObservedFrameApplier => _observedFrameApplier ??= new AetheriaUnityObservedFrameApplier( ResolveDaemonObserver, diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs b/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs index efe4c0024..25f165e88 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityObservedTargetQuery.cs @@ -9,15 +9,11 @@ using GameCult.Mesh; public sealed class AetheriaUnityObservedTargetQuery : IDisposable { - private readonly Func _resolveClient; private readonly AetheriaUnityObservedEntityIndex _entityIndex; private CultMeshReactiveDocument _zoneContacts; - public AetheriaUnityObservedTargetQuery( - Func resolveClient, - AetheriaUnityObservedEntityIndex entityIndex) + public AetheriaUnityObservedTargetQuery(AetheriaUnityObservedEntityIndex entityIndex) { - _resolveClient = resolveClient ?? (() => null); _entityIndex = entityIndex ?? throw new ArgumentNullException(nameof(entityIndex)); } @@ -98,8 +94,8 @@ public sealed class AetheriaUnityObservedTargetQuery : IDisposable try { - _zoneContacts = _resolveClient() - ?.State.Reactive(); + _zoneContacts = AetheriaUnityRuntimeClientProvider + .Reactive("unity-observed-target-query"); return _zoneContacts?.Current; } catch diff --git a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs index a2839ed2e..03e1eb06f 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs @@ -62,22 +62,51 @@ public static class AetheriaUnityRuntimeClientProvider return ResolveClient(AetheriaUnityRuntimePaths.RuntimeStateFilePath, runtimeId); } + public static AetheriaClient RuntimeClient( + AetheriaRuntimeStateBootReport stateBoot, + string runtimeId = "") + { + return ResolveClient(stateBoot, runtimeId); + } + public static AetheriaClientState RuntimeState(string runtimeId = "") { return RuntimeClient(runtimeId).State; } + public static AetheriaClientState RuntimeState( + AetheriaRuntimeStateBootReport stateBoot, + string runtimeId = "") + { + return RuntimeClient(stateBoot, runtimeId).State; + } + public static AetheriaControl Control(string runtimeId = "") { return RuntimeClient(runtimeId).Control; } + public static AetheriaControl Control( + AetheriaRuntimeStateBootReport stateBoot, + string runtimeId = "") + { + return RuntimeClient(stateBoot, runtimeId).Control; + } + public static CultMeshReactiveDocument Reactive(string runtimeId = "") where TDocument : class { return RuntimeState(runtimeId).Reactive(); } + public static CultMeshReactiveDocument Reactive( + AetheriaRuntimeStateBootReport stateBoot, + string runtimeId = "") + where TDocument : class + { + return RuntimeState(stateBoot, runtimeId).Reactive(); + } + public static CultMeshReactiveDocument Reactive( AetheriaRuntimeRtsViewportBounds viewport, string runtimeId = "") @@ -86,6 +115,15 @@ public static class AetheriaUnityRuntimeClientProvider return RuntimeState(runtimeId).Reactive(viewport); } + public static CultMeshReactiveDocument Reactive( + AetheriaRuntimeStateBootReport stateBoot, + AetheriaRuntimeRtsViewportBounds viewport, + string runtimeId = "") + where TDocument : class + { + return RuntimeState(stateBoot, runtimeId).Reactive(viewport); + } + public static CultMeshReactiveDocument Reactive( int index, string runtimeId = "") @@ -94,6 +132,15 @@ public static class AetheriaUnityRuntimeClientProvider return RuntimeState(runtimeId).Reactive(index); } + public static CultMeshReactiveDocument Reactive( + AetheriaRuntimeStateBootReport stateBoot, + int index, + string runtimeId = "") + where TDocument : class + { + return RuntimeState(stateBoot, runtimeId).Reactive(index); + } + public static AetheriaClient CurrentClientForStateFile(string stateFilePath) { foreach (var pair in RuntimeClients) diff --git a/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs b/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs index 0f7da7a57..f0c869420 100644 --- a/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs +++ b/Assets/Scripts/UI/InputScreen/InputDisplayLayout.cs @@ -343,7 +343,8 @@ public class InputDisplayLayout : MonoBehaviour { try { - var submitted = ResolveClient() + var submitted = AetheriaUnityRuntimeClientProvider + .RuntimeClient(RequireLocalStateBoot(), "unity-input-screen") .Ui.InputSettingsAsync(command, body, "unity-input-screen") .GetAwaiter() .GetResult(); @@ -356,7 +357,7 @@ public class InputDisplayLayout : MonoBehaviour } } - private AetheriaClient ResolveClient() + private AetheriaRuntimeStateBootReport RequireLocalStateBoot() { var stateBoot = AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory); if (!stateBoot.SupportsLocalStateFileRead || !stateBoot.StateFileExists) @@ -371,7 +372,7 @@ public class InputDisplayLayout : MonoBehaviour ClearClientCaches(); } - return AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot, "unity-input-screen"); + return stateBoot; } private void ClearClientCaches() @@ -387,8 +388,10 @@ public class InputDisplayLayout : MonoBehaviour try { - _playerSettings = ResolveClient() - .State.Reactive(); + _playerSettings = AetheriaUnityRuntimeClientProvider + .Reactive( + RequireLocalStateBoot(), + "unity-input-screen"); } catch (Exception ex) { diff --git a/Assets/Scripts/UI/MainMenu.cs b/Assets/Scripts/UI/MainMenu.cs index 2f0c230c0..86e2c14da 100644 --- a/Assets/Scripts/UI/MainMenu.cs +++ b/Assets/Scripts/UI/MainMenu.cs @@ -149,8 +149,9 @@ public class MainMenu : MonoBehaviour try { - _sectorMap ??= ResolveClient(stateBoot) - .State.Reactive(); + PrepareDocumentAccess(stateBoot); + _sectorMap ??= AetheriaUnityRuntimeClientProvider + .Reactive(stateBoot, "unity-main-menu"); return _sectorMap?.Current; } catch (Exception ex) @@ -167,8 +168,9 @@ public class MainMenu : MonoBehaviour try { - _playerSettings ??= ResolveClient(stateBoot) - .State.Reactive(); + PrepareDocumentAccess(stateBoot); + _playerSettings ??= AetheriaUnityRuntimeClientProvider + .Reactive(stateBoot, "unity-main-menu"); return _playerSettings?.Current; } catch (Exception ex) @@ -185,8 +187,9 @@ public class MainMenu : MonoBehaviour try { - _verseHostSettings ??= ResolveClient(stateBoot) - .State.Reactive(); + PrepareDocumentAccess(stateBoot); + _verseHostSettings ??= AetheriaUnityRuntimeClientProvider + .Reactive(stateBoot, "unity-main-menu"); return _verseHostSettings?.Current; } catch (Exception ex) @@ -424,7 +427,8 @@ public class MainMenu : MonoBehaviour try { - var submitted = ResolveClient(stateBoot) + var submitted = AetheriaUnityRuntimeClientProvider + .RuntimeClient(stateBoot, "unity-main-menu") .Ui.SurfaceCommandAsync(request, "unity-main-menu") .GetAwaiter() .GetResult(); @@ -451,7 +455,7 @@ public class MainMenu : MonoBehaviour return true; } - private AetheriaClient ResolveClient(AetheriaRuntimeStateBootReport stateBoot) + private void PrepareDocumentAccess(AetheriaRuntimeStateBootReport stateBoot) { var statePath = stateBoot.StateFilePath; if (!string.Equals(_clientStatePath, statePath, StringComparison.Ordinal)) @@ -459,8 +463,6 @@ public class MainMenu : MonoBehaviour _clientStatePath = statePath; ClearClientCaches(); } - - return AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot, "unity-main-menu"); } private void ClearClientCaches()