diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 6dd61abb6..3c711d1d2 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -4669,7 +4669,7 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root) ".Latest()", "ResolveCurrentDocking()?.IsDocked == true", "AetheriaClient", - "OpenLocalAsync(", + "AetheriaUnityRuntimeClientProvider.ResolveClient(", "GetTabLabel(", "ToRuntimeTabKey(", "AetheriaRuntimeMenuTabsSurfaceBuilder.NormalizeTabKey(tab.ToString())", @@ -11427,7 +11427,7 @@ 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."); } - if (!mapRenderer.Contains("private AetheriaClient _client", StringComparison.Ordinal) || + if (!mapRenderer.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) || !mapRenderer.Contains(".Viewports", StringComparison.Ordinal) || !mapRenderer.Contains(".Objects(viewport)", StringComparison.Ordinal) || !mapRenderer.Contains(".RenderSplats(viewport)", StringComparison.Ordinal) || @@ -11443,7 +11443,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) !sectorRenderer.Contains(".Latest()", StringComparison.Ordinal) || !sectorRenderer.Contains(".Settings", StringComparison.Ordinal) || !sectorRenderer.Contains(".Player", StringComparison.Ordinal) || - !sectorMap.Contains("private AetheriaClient _client", StringComparison.Ordinal) || + !sectorMap.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) || !sectorMap.Contains(".Aetheria()", StringComparison.Ordinal) || !sectorMap.Contains(".SectorMap", StringComparison.Ordinal) || !sectorMap.Contains(".LatestAsync()", StringComparison.Ordinal) || @@ -12840,6 +12840,22 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) var renderSplatViewportSource = File.Exists(renderSplatViewportSourcePath) ? File.ReadAllText(renderSplatViewportSourcePath) : throw new InvalidOperationException("Cannot verify daemon state acquisition; AetheriaUnityRenderSplatViewportSource.cs is missing."); + var menuPanelPath = Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "MenuPanel.cs"); + var menuPanel = File.Exists(menuPanelPath) + ? File.ReadAllText(menuPanelPath) + : throw new InvalidOperationException("Cannot verify daemon state acquisition; MenuPanel.cs is missing."); + var mapRendererPath = Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "MapRenderer.cs"); + var mapRenderer = File.Exists(mapRendererPath) + ? File.ReadAllText(mapRendererPath) + : throw new InvalidOperationException("Cannot verify daemon state acquisition; MapRenderer.cs is missing."); + var sectorMapPath = Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "SectorMap.cs"); + var sectorMap = File.Exists(sectorMapPath) + ? File.ReadAllText(sectorMapPath) + : throw new InvalidOperationException("Cannot verify daemon state acquisition; SectorMap.cs is missing."); + var localMenuPath = Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "LocalMenu.cs"); + var localMenu = File.Exists(localMenuPath) + ? File.ReadAllText(localMenuPath) + : throw new InvalidOperationException("Cannot verify daemon state acquisition; LocalMenu.cs is missing."); var gameplayBootShellPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaUnityGameplayBootShell.cs"); var gameplayBootShell = File.Exists(gameplayBootShellPath) ? File.ReadAllText(gameplayBootShellPath) @@ -12939,7 +12955,11 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) ["Packages/org.gamecult.aetheria.eve-runtime/Runtime/AetheriaEveSurfacePresenter.cs"] = eveSurfacePresenter, ["Assets/Scripts/Zone Display/ZoneRenderer.cs"] = zoneRenderer, ["Assets/Scripts/Zone Display/VolumeCloudRenderer.cs"] = volumeCloudRenderer, - ["Assets/Scripts/Gameplay/AetheriaUnityRenderSplatViewportSource.cs"] = renderSplatViewportSource + ["Assets/Scripts/Gameplay/AetheriaUnityRenderSplatViewportSource.cs"] = renderSplatViewportSource, + ["Assets/Scripts/UI/Menu/MenuPanel.cs"] = menuPanel, + ["Assets/Scripts/UI/Menu/MapRenderer.cs"] = mapRenderer, + ["Assets/Scripts/UI/Menu/SectorMap.cs"] = sectorMap, + ["Assets/Scripts/UI/Menu/LocalMenu.cs"] = localMenu }; var directClientOpenHits = providerOwnedClientAccessSources .Where(pair => diff --git a/Assets/Scripts/UI/Menu/LocalMenu.cs b/Assets/Scripts/UI/Menu/LocalMenu.cs index ad564b18a..5f885817f 100644 --- a/Assets/Scripts/UI/Menu/LocalMenu.cs +++ b/Assets/Scripts/UI/Menu/LocalMenu.cs @@ -2,7 +2,6 @@ using System; using System.Collections; using System.Collections.Generic; using System.Globalization; -using System.IO; using System.Linq; using GameCult.Aetheria.EveRuntime; using GameCult.Aetheria.State.Verse; @@ -13,7 +12,6 @@ using UniRx; using UniRx.Triggers; using UnityEngine; using UnityEngine.UIElements; -using Path = System.IO.Path; public class LocalMenu : MonoBehaviour { @@ -28,8 +26,6 @@ public class LocalMenu : MonoBehaviour private readonly List _activeChoices = new List(); private UIDocument _surfaceDocument; private readonly AetheriaEveUnitySurfaceChrome _surfaceChrome = new AetheriaEveUnitySurfaceChrome(); - private AetheriaClient _client; - private string _clientStatePath = ""; private AetheriaUnityObservedFacadeIndex _observedFacadeIndex; public void SetObservedFacadeIndex(AetheriaUnityObservedFacadeIndex observedFacadeIndex) @@ -248,23 +244,9 @@ public class LocalMenu : MonoBehaviour private AetheriaClient ResolveClient() { - var gameDataDirectory = new DirectoryInfo(Path.Combine(Application.dataPath, "..", "GameData")); - var stateBoot = AetheriaRuntimeStateBoot.Inspect(gameDataDirectory); - - if (_client != null && string.Equals(_clientStatePath, stateBoot.StateFilePath, StringComparison.Ordinal)) - return _client; - - DisposeClient(); - _client = AetheriaClient - .OpenLocalAsync( - gameDataDirectory, - "unity-runtime-local-story", - "local", - pullOnOpen: true) - .GetAwaiter() - .GetResult(); - _clientStatePath = stateBoot.StateFilePath; - return _client; + return AetheriaUnityRuntimeClientProvider.ResolveClient( + AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory), + "unity-runtime-local-story"); } private void HideStorySurface() @@ -275,13 +257,6 @@ public class LocalMenu : MonoBehaviour AetheriaEveUnitySurfaceHost.Hide(_surfaceDocument); } - private void DisposeClient() - { - _client?.Dispose(); - _client = null; - _clientStatePath = ""; - } - private void OnDisable() { HideStorySurface(); @@ -289,7 +264,6 @@ public class LocalMenu : MonoBehaviour private void OnDestroy() { - DisposeClient(); if (_surfaceDocument != null) { AetheriaEveUnitySurfaceHost.DestroyDocument(_surfaceDocument); diff --git a/Assets/Scripts/UI/Menu/MapRenderer.cs b/Assets/Scripts/UI/Menu/MapRenderer.cs index 59ab0bb6e..fc111b51e 100644 --- a/Assets/Scripts/UI/Menu/MapRenderer.cs +++ b/Assets/Scripts/UI/Menu/MapRenderer.cs @@ -5,7 +5,6 @@ using System; using System.Collections; using System.Collections.Generic; -using System.IO; using System.Linq; using GameCult.Aetheria.State.Verse; using TMPro; @@ -40,8 +39,6 @@ public class MapRenderer : MonoBehaviour private RenderTexture _mapTexture; private int2 _size; private bool _init; - private AetheriaClient _client; - private string _clientStatePath = ""; private AetheriaRuntimeObjectsViewportDocument _objectsViewport; private AetheriaRuntimeRenderSplatsViewportDocument _renderSplatsViewport; private float _nextViewportRefreshTime; @@ -91,11 +88,6 @@ public class MapRenderer : MonoBehaviour ZoneRenderer.ShowAsteroidUI = false; } - private void OnDestroy() - { - DisposeClient(); - } - void ReleaseTextures() { _mapTexture.Release(); @@ -341,28 +333,8 @@ public class MapRenderer : MonoBehaviour private AetheriaClient ResolveClient() { - var gameDataDirectory = new DirectoryInfo(Path.Combine(Application.dataPath, "..", "GameData")); - var stateBoot = AetheriaRuntimeStateBoot.Inspect(gameDataDirectory); - if (_client != null && string.Equals(_clientStatePath, stateBoot.StateFilePath, StringComparison.Ordinal)) - return _client; - - DisposeClient(); - _client = AetheriaClient - .OpenLocalAsync( - gameDataDirectory, - "unity-map-renderer", - "local", - pullOnOpen: true) - .GetAwaiter() - .GetResult(); - _clientStatePath = stateBoot.StateFilePath; - return _client; - } - - private void DisposeClient() - { - _client?.Dispose(); - _client = null; - _clientStatePath = ""; + return AetheriaUnityRuntimeClientProvider.ResolveClient( + AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory), + "unity-map-renderer"); } } diff --git a/Assets/Scripts/UI/Menu/MenuPanel.cs b/Assets/Scripts/UI/Menu/MenuPanel.cs index d935a3ca2..f10080271 100644 --- a/Assets/Scripts/UI/Menu/MenuPanel.cs +++ b/Assets/Scripts/UI/Menu/MenuPanel.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using GameCult.Aetheria.EveRuntime; using GameCult.Aetheria.State.Verse; @@ -32,8 +31,6 @@ public class MenuPanel : MonoBehaviour private MenuTabBinding _current; private UIDocument _tabSurfaceDocument; private readonly AetheriaEveUnitySurfaceChrome _tabSurfaceChrome = new AetheriaEveUnitySurfaceChrome(); - private AetheriaClient _client; - private string _clientStatePath = ""; public MenuTab CurrentTab { get; private set; } @@ -91,7 +88,6 @@ public class MenuPanel : MonoBehaviour private void OnDestroy() { - DisposeClient(); if (_tabSurfaceDocument != null) { AetheriaEveUnitySurfaceHost.DestroyDocument(_tabSurfaceDocument); @@ -187,30 +183,9 @@ public class MenuPanel : MonoBehaviour private AetheriaClient ResolveClient() { - var gameDataDirectory = new DirectoryInfo(Path.Combine(Application.dataPath, "..", "GameData")); - var stateBoot = AetheriaRuntimeStateBoot.Inspect(gameDataDirectory); - - if (_client != null && string.Equals(_clientStatePath, stateBoot.StateFilePath, StringComparison.Ordinal)) - return _client; - - DisposeClient(); - _client = AetheriaClient - .OpenLocalAsync( - gameDataDirectory, - "unity-runtime-menu-tabs", - "local", - pullOnOpen: true) - .GetAwaiter() - .GetResult(); - _clientStatePath = stateBoot.StateFilePath; - return _client; - } - - private void DisposeClient() - { - _client?.Dispose(); - _client = null; - _clientStatePath = ""; + return AetheriaUnityRuntimeClientProvider.ResolveClient( + AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory), + "unity-runtime-menu-tabs"); } private static string GetTabLabel(MenuTabBinding tabBinding) diff --git a/Assets/Scripts/UI/Menu/SectorMap.cs b/Assets/Scripts/UI/Menu/SectorMap.cs index d6a35781f..65db5f45b 100644 --- a/Assets/Scripts/UI/Menu/SectorMap.cs +++ b/Assets/Scripts/UI/Menu/SectorMap.cs @@ -1,7 +1,6 @@ using System; using System.Collections; using System.Collections.Generic; -using System.IO; using System.Linq; using GameCult.Aetheria.State.Verse; using TMPro; @@ -54,8 +53,6 @@ public class SectorMap : MonoBehaviour private readonly Dictionary _zonesByIndex = new Dictionary(); private AetheriaRuntimeSectorMapDocument _sectorMap; - private AetheriaClient _client; - private string _clientStatePath = ""; private bool _sectorMapLoaded; public bool TryMarkPlayerLocation(int zoneIndex) @@ -258,7 +255,7 @@ public class SectorMap : MonoBehaviour private void OnDestroy() { - DisposeClient(); + _sectorMapLoaded = false; } private void AddFactionMaterials(int factionIndex) @@ -501,30 +498,9 @@ public class SectorMap : MonoBehaviour private AetheriaClient ResolveClient() { - var gameDataDirectory = new DirectoryInfo(Path.Combine(Application.dataPath, "..", "GameData")); - var stateBoot = AetheriaRuntimeStateBoot.Inspect(gameDataDirectory); - if (_client != null && string.Equals(_clientStatePath, stateBoot.StateFilePath, StringComparison.Ordinal)) - return _client; - - DisposeClient(); - _client = AetheriaClient - .OpenLocalAsync( - gameDataDirectory, - "unity-sector-map", - "local", - pullOnOpen: true) - .GetAwaiter() - .GetResult(); - _clientStatePath = stateBoot.StateFilePath; - return _client; - } - - private void DisposeClient() - { - _client?.Dispose(); - _client = null; - _clientStatePath = ""; - _sectorMapLoaded = false; + return AetheriaUnityRuntimeClientProvider.ResolveClient( + AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory), + "unity-sector-map"); } private static float2 Position(AetheriaRuntimeSectorMapZone zone)