Render zone terrain from daemon gravity queries
This commit is contained in:
parent
0b66c928db
commit
95e09dc241
3 changed files with 43 additions and 4 deletions
|
|
@ -1788,6 +1788,11 @@ static void RequireDaemonRenderQueryAuthority(string root)
|
|||
? File.ReadAllText(indirectRendererPath)
|
||||
: throw new InvalidOperationException("Cannot verify daemon render query authority; AetheriaDaemonIndirectRenderer.cs is missing.");
|
||||
|
||||
var zoneRendererPath = Path.Combine(root, "Assets", "Scripts", "Zone Display", "ZoneRenderer.cs");
|
||||
var zoneRenderer = File.Exists(zoneRendererPath)
|
||||
? File.ReadAllText(zoneRendererPath)
|
||||
: throw new InvalidOperationException("Cannot verify daemon render query authority; ZoneRenderer.cs is missing.");
|
||||
|
||||
var canonicalSnapshotPath = Path.Combine(root, "Aetheria.State", "Documents", "AetheriaRuntimeStateDocuments.cs");
|
||||
var canonicalSnapshot = File.Exists(canonicalSnapshotPath)
|
||||
? File.ReadAllText(canonicalSnapshotPath)
|
||||
|
|
@ -1866,6 +1871,29 @@ static void RequireDaemonRenderQueryAuthority(string root)
|
|||
"Unity's daemon indirect renderer must query daemon SoA render groups by camera bounds before lowering draw calls: " +
|
||||
string.Join(", ", missingRendererSymbols));
|
||||
}
|
||||
|
||||
if (zoneRenderer.Contains("Zone.GetHeight(", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"ZoneRenderer must evaluate gravity terrain from daemon render queries instead of the mirrored Unity Zone height evaluator.");
|
||||
}
|
||||
|
||||
var requiredZoneRendererSymbols = new[]
|
||||
{
|
||||
"private AetheriaRuntimeZoneSnapshotCommit _daemonZoneSnapshot;",
|
||||
"public void LoadZone(Zone zone, AetheriaRuntimeZoneSnapshotCommit daemonZone = null)",
|
||||
"_daemonZoneSnapshot = daemonZone;",
|
||||
"AetheriaRuntimeDaemonRenderQueries.EvaluateGravityTerrainHeight("
|
||||
};
|
||||
var missingZoneRendererSymbols = requiredZoneRendererSymbols
|
||||
.Where(symbol => !zoneRenderer.Contains(symbol, StringComparison.Ordinal))
|
||||
.ToArray();
|
||||
if (missingZoneRendererSymbols.Length > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"ZoneRenderer must lower daemon-authored gravity terrain snapshots instead of recomputing render height through Zone: " +
|
||||
string.Join(", ", missingZoneRendererSymbols));
|
||||
}
|
||||
}
|
||||
|
||||
static void RequireTypedZoneConstructionKeys(string root)
|
||||
|
|
|
|||
|
|
@ -2067,7 +2067,7 @@ public class ActionGameManager : MonoBehaviour
|
|||
|
||||
Zone.Log = s => Debug.Log($"Zone: {s}");
|
||||
|
||||
ZoneRenderer.LoadZone(Zone);
|
||||
ZoneRenderer.LoadZone(Zone, daemonZone);
|
||||
|
||||
if (CurrentEntity != null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ public class ZoneRenderer : MonoBehaviour
|
|||
private List<IDisposable> _zoneSubscriptions = new List<IDisposable>();
|
||||
private PlanetObject[] _suns;
|
||||
private bool _showAsteroidUI;
|
||||
private AetheriaRuntimeZoneSnapshotCommit _daemonZoneSnapshot;
|
||||
|
||||
public Dictionary<Wormhole, (GameObject gravity, CompassIcon icon)> WormholeInstances = new Dictionary<Wormhole, (GameObject, CompassIcon)>();
|
||||
private List<ItemPickup> _loot = new List<ItemPickup>();
|
||||
|
|
@ -181,10 +182,11 @@ public class ZoneRenderer : MonoBehaviour
|
|||
_transposer = SceneCamera.GetCinemachineComponent<CinemachineTransposer>();
|
||||
}
|
||||
|
||||
public void LoadZone(Zone zone)
|
||||
public void LoadZone(Zone zone, AetheriaRuntimeZoneSnapshotCommit daemonZone = null)
|
||||
{
|
||||
ClearZone();
|
||||
Zone = zone;
|
||||
_daemonZoneSnapshot = daemonZone;
|
||||
SectorBrushes.localScale = zone.Radius * 2 * Vector3.one;
|
||||
SlimeGravityCamera.orthographicSize = zone.Radius;
|
||||
SlimeRenderer.ZoneRadius = zone.Radius;
|
||||
|
|
@ -470,7 +472,7 @@ public class ZoneRenderer : MonoBehaviour
|
|||
|
||||
foreach (var (key, belt) in Zone.AsteroidBelts)
|
||||
{
|
||||
var height = Zone.GetHeight(belt.OrbitPosition);
|
||||
var height = GetTerrainHeight(belt.OrbitPosition);
|
||||
if(isVisible(new Bounds(
|
||||
new Vector3(belt.OrbitPosition.x,height,belt.OrbitPosition.y),
|
||||
new Vector3(belt.Radius * 2,100,belt.Radius * 2))))
|
||||
|
|
@ -504,7 +506,7 @@ public class ZoneRenderer : MonoBehaviour
|
|||
{
|
||||
var planetInstance = Zone.PlanetInstances[planet.Key];
|
||||
var p = Zone.GetOrbitPosition(planetInstance.OrbitKey);
|
||||
var height = Zone.GetHeight(p);
|
||||
var height = GetTerrainHeight(p);
|
||||
if (-height > maxDepth) maxDepth = -height;
|
||||
planet.Value.transform.position = new Vector3(p.x, 0, p.y);
|
||||
planet.Value.Body.transform.localPosition = new Vector3(0, height + planetInstance.BodyRadius * 2, 0);
|
||||
|
|
@ -562,6 +564,15 @@ public class ZoneRenderer : MonoBehaviour
|
|||
// MinimapTintQuad.transform.position = gravPos - Vector3.up*10;
|
||||
}
|
||||
|
||||
private float GetTerrainHeight(float2 position)
|
||||
{
|
||||
return (float)AetheriaRuntimeDaemonRenderQueries.EvaluateGravityTerrainHeight(
|
||||
_daemonZoneSnapshot,
|
||||
position.x,
|
||||
position.y,
|
||||
Zone?.Time ?? 0);
|
||||
}
|
||||
|
||||
public void DestroyLoot(ItemPickup loot)
|
||||
{
|
||||
_loot.Remove(loot);
|
||||
|
|
|
|||
Loading…
Reference in a new issue