Render asteroid belts from daemon pose list

This commit is contained in:
Meta Vens 2026-06-21 16:10:38 +01:00
commit 89290e2fee
2 changed files with 8 additions and 15 deletions

View file

@ -1930,7 +1930,8 @@ static void RequireDaemonRenderQueryAuthority(string root)
if (zoneRenderer.Contains("belt.OrbitPosition", StringComparison.Ordinal) ||
zoneRenderer.Contains("belt.Radius", StringComparison.Ordinal) ||
zoneRenderer.Contains("belt.Transforms", StringComparison.Ordinal))
zoneRenderer.Contains("belt.Transforms", StringComparison.Ordinal) ||
zoneRenderer.Contains("foreach (var (key, belt) in Zone.AsteroidBelts)", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"ZoneRenderer frame updates must read asteroid belt and instance poses from daemon render queries instead of mirrored Unity asteroid belts.");
@ -1969,7 +1970,6 @@ static void RequireDaemonRenderQueryAuthority(string root)
"private readonly List<AetheriaRuntimeDaemonBodyPose> _daemonBodyPoses",
"private readonly Dictionary<string, AetheriaRuntimeDaemonBodyPose> _daemonBodyPosesByBodyKey",
"private readonly List<AetheriaRuntimeDaemonAsteroidBeltPose> _daemonAsteroidBeltPoses",
"private readonly Dictionary<string, AetheriaRuntimeDaemonAsteroidBeltPose> _daemonAsteroidBeltPosesByBodyKey",
"private readonly List<AetheriaRuntimeDaemonCompassMarker> _daemonCompassMarkers",
"private readonly Dictionary<int, AetheriaRuntimeDaemonCompassMarker> _daemonCompassMarkersByEntityIndex",
"private readonly List<int> _daemonVisibleEntityIndices",
@ -1990,13 +1990,13 @@ static void RequireDaemonRenderQueryAuthority(string root)
"foreach (var entity in EntityInstances.Keys.ToArray())",
"AetheriaRuntimeDaemonRenderQueries.QueryBodyPoses(_daemonZoneSnapshot, _daemonBodyPoses);",
"AetheriaRuntimeDaemonRenderQueries.QueryAsteroidBeltPoses(_daemonZoneSnapshot, _daemonAsteroidBeltPoses);",
"foreach (var beltPose in _daemonAsteroidBeltPoses)",
"AetheriaRuntimeDaemonRenderQueries.QueryAsteroidInstancePoses(",
"AetheriaRuntimeDaemonRenderQueries.QueryCompassMarkers(",
"AetheriaRuntimeDaemonRenderQueries.QueryVisibleEntityIndices(",
"AetheriaRuntimeDaemonRenderQueries.QueryWormholeExits(",
"_daemonCompassMarkersByEntityIndex.TryGetValue(entityInstance.Entity.DaemonEntityIndex, out var marker)",
"_daemonBodyPosesByBodyKey.TryGetValue(planet.Key, out var pose)",
"_daemonAsteroidBeltPosesByBodyKey.TryGetValue(key, out var beltPose)",
"pose.GravityWaveSpeed"
};
var missingZoneRendererSymbols = requiredZoneRendererSymbols

View file

@ -89,8 +89,6 @@ public class ZoneRenderer : MonoBehaviour
new Dictionary<string, AetheriaRuntimeDaemonBodyPose>(StringComparer.Ordinal);
private readonly List<AetheriaRuntimeDaemonAsteroidBeltPose> _daemonAsteroidBeltPoses =
new List<AetheriaRuntimeDaemonAsteroidBeltPose>();
private readonly Dictionary<string, AetheriaRuntimeDaemonAsteroidBeltPose> _daemonAsteroidBeltPosesByBodyKey =
new Dictionary<string, AetheriaRuntimeDaemonAsteroidBeltPose>(StringComparer.Ordinal);
private readonly List<AetheriaRuntimeDaemonAsteroidInstancePose> _visibleAsteroidInstancePoses =
new List<AetheriaRuntimeDaemonAsteroidInstancePose>();
private readonly List<AetheriaRuntimeDaemonCompassMarker> _daemonCompassMarkers =
@ -479,9 +477,12 @@ public class ZoneRenderer : MonoBehaviour
Plane[] planes = GeometryUtility.CalculateFrustumPlanes(MainCamera);
bool isVisible(Bounds bounds) => GeometryUtility.TestPlanesAABB(planes, bounds);
foreach (var (key, belt) in Zone.AsteroidBelts)
foreach (var beltPose in _daemonAsteroidBeltPoses)
{
if (!_daemonAsteroidBeltPosesByBodyKey.TryGetValue(key, out var beltPose))
var key = beltPose.BodyKey;
if (string.IsNullOrWhiteSpace(key) ||
!_beltMeshes.TryGetValue(key, out var meshes) ||
!_beltMatrices.TryGetValue(key, out var matrices))
continue;
var center = new float2((float)beltPose.CenterX, (float)beltPose.CenterZ);
@ -500,8 +501,6 @@ public class ZoneRenderer : MonoBehaviour
if(beltIsVisible)
{
var meshes = _beltMeshes[key];
var matrices = _beltMatrices[key];
var tx = 0;
for (int i = 0; i < meshes.Length; i++)
{
@ -614,12 +613,6 @@ public class ZoneRenderer : MonoBehaviour
private void RefreshDaemonAsteroidBeltPoses()
{
AetheriaRuntimeDaemonRenderQueries.QueryAsteroidBeltPoses(_daemonZoneSnapshot, _daemonAsteroidBeltPoses);
_daemonAsteroidBeltPosesByBodyKey.Clear();
foreach (var pose in _daemonAsteroidBeltPoses)
{
if (!string.IsNullOrWhiteSpace(pose.BodyKey))
_daemonAsteroidBeltPosesByBodyKey[pose.BodyKey] = pose;
}
}
private void RefreshDaemonCompassMarkers()