From 0a21e44f54bed7549b464bcc59dd00153b6b2825 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 21 Jun 2026 17:10:27 +0100 Subject: [PATCH] Project current zone from daemon run --- Aetheria.State.Verify/Program.cs | 18 +++++++++++++++++ Assets/Scripts/Gameplay/ActionGameManager.cs | 21 +++++++++++++------- Assets/Scripts/UI/Menu/MapRenderer.cs | 3 ++- Assets/Scripts/UI/Menu/SectorRenderer.cs | 6 ++++-- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 8f2286cc4..b3c82cb35 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -7932,6 +7932,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) "ApplyLatestAuthoritativeDaemonFrame()", "ResolveDaemonObserver()", "public AetheriaRuntimeZoneSnapshotCommit FindDaemonZoneSnapshot(GalaxyZone zone)", + "public GalaxyZone CurrentDaemonGalaxyZone", "observed.IsAuthoritative", "TryRestoreEntityGraphFromDaemonRun(observed.Run)", "CreateDaemonZoneConstructionBlueprint(daemonZone)", @@ -7962,6 +7963,23 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root) string.Join(", ", missingGameplaySymbols)); } + 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 current-zone UI projection; MapRenderer.cs is missing."); + var sectorRendererPath = Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "SectorRenderer.cs"); + var sectorRenderer = File.Exists(sectorRendererPath) + ? File.ReadAllText(sectorRendererPath) + : throw new InvalidOperationException("Cannot verify daemon current-zone UI projection; SectorRenderer.cs is missing."); + + if (mapRenderer.Contains("GameManager.Zone.GalaxyZone", StringComparison.Ordinal) || + sectorRenderer.Contains("GameManager.Zone.GalaxyZone", StringComparison.Ordinal) || + sectorRenderer.Contains("GameManager.CurrentEntity.Zone.GalaxyZone", StringComparison.Ordinal)) + { + throw new InvalidOperationException( + "Map and sector UI must read current-zone identity from the daemon-observed run, not Unity's mirrored Zone hierarchy."); + } + var requiredDaemonControlValidationSymbols = new[] { "case AetheriaRuntimeDaemonCommandKinds.SetTractorPower:", diff --git a/Assets/Scripts/Gameplay/ActionGameManager.cs b/Assets/Scripts/Gameplay/ActionGameManager.cs index 47dfb8ff0..e3d4a3463 100644 --- a/Assets/Scripts/Gameplay/ActionGameManager.cs +++ b/Assets/Scripts/Gameplay/ActionGameManager.cs @@ -861,6 +861,19 @@ public class ActionGameManager : MonoBehaviour .FirstOrDefault(snapshot => snapshot != null && snapshot.ZoneIndex == zoneIndex); } + public GalaxyZone CurrentDaemonGalaxyZone + { + get + { + var run = ResolveDaemonObserver()?.LastObservedState?.Run; + return run?.CurrentZoneIndex >= 0 && + ObservedGalaxy?.Zones != null && + run.CurrentZoneIndex < ObservedGalaxy.Zones.Length + ? ObservedGalaxy.Zones[run.CurrentZoneIndex] + : null; + } + } + private static int FactionIndex(Faction faction) { return ObservedGalaxy?.Factions == null || faction == null ? -1 : Array.IndexOf(ObservedGalaxy.Factions, faction); @@ -3117,13 +3130,7 @@ public class ActionGameManager : MonoBehaviour private AetheriaRuntimeZoneSnapshotCommit FindCurrentDaemonZoneSnapshot() { - var run = ResolveDaemonObserver()?.LastObservedState?.Run; - var zone = run?.CurrentZoneIndex >= 0 && - ActionGameManager.ObservedGalaxy?.Zones != null && - run.CurrentZoneIndex < ActionGameManager.ObservedGalaxy.Zones.Length - ? ActionGameManager.ObservedGalaxy.Zones[run.CurrentZoneIndex] - : null; - return FindDaemonZoneSnapshot(zone); + return FindDaemonZoneSnapshot(CurrentDaemonGalaxyZone); } public void RequestTowToStation() diff --git a/Assets/Scripts/UI/Menu/MapRenderer.cs b/Assets/Scripts/UI/Menu/MapRenderer.cs index 2038e8318..f93788112 100644 --- a/Assets/Scripts/UI/Menu/MapRenderer.cs +++ b/Assets/Scripts/UI/Menu/MapRenderer.cs @@ -49,7 +49,8 @@ public class MapRenderer : MonoBehaviour GravityCamera.gameObject.SetActive(true); TintCamera.gameObject.SetActive(true); InfluenceCamera.gameObject.SetActive(true); - Title.text = $"Zone: {GameManager.Zone.GalaxyZone.Name}"; + var currentZone = GameManager.CurrentDaemonGalaxyZone; + Title.text = $"Zone: {currentZone?.Name ?? "Unknown"}"; // If hiding minimap asteroids, turn them back on for the map screen if (!ActionGameManager.RuntimePlayerSettings.GraphicsSettings.ShowAsteroidsInMinimap) diff --git a/Assets/Scripts/UI/Menu/SectorRenderer.cs b/Assets/Scripts/UI/Menu/SectorRenderer.cs index 4b53092ca..4af39ba09 100644 --- a/Assets/Scripts/UI/Menu/SectorRenderer.cs +++ b/Assets/Scripts/UI/Menu/SectorRenderer.cs @@ -223,11 +223,13 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS { _init = true; SectorCamera.gameObject.SetActive(true); - _position = GameManager.Zone.GalaxyZone.Position; + var currentZone = GameManager.CurrentDaemonGalaxyZone; + _position = currentZone?.Position ?? float2.zero; _viewSize = .25f; Map.StartReveal(LinkAnimationDuration, IconAnimationDuration); - Map.MarkPlayerLocation(GameManager.CurrentEntity.Zone.GalaxyZone); + if (currentZone != null) + Map.MarkPlayerLocation(currentZone); } private void OnDisable()