Render wormhole exits from daemon queries

This commit is contained in:
Meta Vens 2026-06-21 16:37:31 +01:00
commit 8cb1b28ea2
4 changed files with 11 additions and 27 deletions

View file

@ -1927,7 +1927,9 @@ static void RequireDaemonRenderQueryAuthority(string root)
zoneRenderer.Contains("zone.PlanetInstances.TryGetValue(pose.BodyKey, out var planet)", StringComparison.Ordinal) ||
zoneRenderer.Contains("LoadPlanet(planet)", StringComparison.Ordinal) ||
zoneRenderer.Contains("zone.AsteroidBelts.TryGetValue(body.BodyKey", StringComparison.Ordinal) ||
zoneRenderer.Contains("LoadAsteroidBelt(belt)", StringComparison.Ordinal))
zoneRenderer.Contains("LoadAsteroidBelt(belt)", StringComparison.Ordinal) ||
zoneRenderer.Contains("new Wormhole", StringComparison.Ordinal) ||
zoneRenderer.Contains("zone.Galaxy", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"ZoneRenderer frame updates must read body render state from daemon body poses instead of indexed mirrored Unity planets.");
@ -1988,6 +1990,7 @@ static void RequireDaemonRenderQueryAuthority(string root)
"private readonly HashSet<int> _daemonVisibleEntityIndicesSet",
"private readonly HashSet<int> _visibleDaemonEntityIndices",
"private readonly List<AetheriaRuntimeDaemonWormholeExit> _daemonWormholeExits",
"public Dictionary<int, (GameObject gravity, CompassIcon icon)> WormholeInstances",
"AetheriaRuntimeRunCheckpointCommit daemonRun = null",
"_daemonZoneSnapshot = daemonZone;",
"_daemonRunSnapshot = daemonRun;",
@ -2011,6 +2014,8 @@ static void RequireDaemonRenderQueryAuthority(string root)
"AetheriaRuntimeDaemonRenderQueries.QueryCompassMarkers(",
"AetheriaRuntimeDaemonRenderQueries.QueryVisibleEntityIndices(",
"AetheriaRuntimeDaemonRenderQueries.QueryWormholeExits(",
"AddWormhole(exit)",
"public void AddWormhole(AetheriaRuntimeDaemonWormholeExit exit)",
"private double DaemonSimulationTimeSeconds => _daemonZoneSnapshot?.SimulationTimeSeconds ?? 0;",
"_daemonCompassMarkersByEntityIndex.TryGetValue(entityInstance.Entity.DaemonEntityIndex, out var marker)",
"_daemonBodyPosesByBodyKey.TryGetValue(planet.Key, out var pose)",

View file

@ -1,7 +0,0 @@
using float2 = CultMath.float2;
public class Wormhole
{
public float2 Position;
public GalaxyZone Target;
}

View file

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: b5a943b5358a47a199ad5e7271c14032
timeCreated: 1614907192

View file

@ -101,7 +101,7 @@ public class ZoneRenderer : MonoBehaviour
private readonly List<AetheriaRuntimeDaemonWormholeExit> _daemonWormholeExits =
new List<AetheriaRuntimeDaemonWormholeExit>();
public Dictionary<Wormhole, (GameObject gravity, CompassIcon icon)> WormholeInstances = new Dictionary<Wormhole, (GameObject, CompassIcon)>();
public Dictionary<int, (GameObject gravity, CompassIcon icon)> WormholeInstances = new Dictionary<int, (GameObject, CompassIcon)>();
private List<ItemPickup> _loot = new List<ItemPickup>();
public Zone Zone { get; private set; }
@ -237,27 +237,16 @@ public class ZoneRenderer : MonoBehaviour
Settings.WormholeDistanceRatio,
_daemonWormholeExits);
foreach (var exit in _daemonWormholeExits)
{
var target = zone.Galaxy != null &&
exit.TargetZoneIndex >= 0 &&
exit.TargetZoneIndex < zone.Galaxy.Zones.Length
? zone.Galaxy.Zones[exit.TargetZoneIndex]
: null;
AddWormhole(new Wormhole
{
Target = target,
Position = AetheriaMath.ToCult(new float2((float)exit.PositionX, (float)exit.PositionZ))
});
}
AddWormhole(exit);
}
public void AddWormhole(Wormhole wormhole)
public void AddWormhole(AetheriaRuntimeDaemonWormholeExit exit)
{
var instance = Instantiate(WormholePrefab);
instance.position = new Vector3(wormhole.Position.x, 0, wormhole.Position.y);
instance.position = new Vector3((float)exit.PositionX, 0, (float)exit.PositionZ);
var icon = CompassIconPrototype.Instantiate<CompassIcon>();
icon.Icon.sprite = WormholeIcon;
WormholeInstances.Add(wormhole, (instance.gameObject, icon));
WormholeInstances[exit.TargetZoneIndex] = (instance.gameObject, icon);
}
public void ClearZone()