Use reactive documents for viewport rendering
This commit is contained in:
parent
5a8f8f4565
commit
25744df4a1
4 changed files with 65 additions and 30 deletions
|
|
@ -2434,7 +2434,7 @@ static void RequireDaemonRenderQueryAuthority(string root)
|
|||
".Viewports",
|
||||
"ResolveObjectsViewport(viewport)",
|
||||
"private AetheriaRuntimeObjectsViewportDocument ResolveObjectsViewport(AetheriaRuntimeXzRect viewport)",
|
||||
".ObserveObjects(viewportBounds)",
|
||||
".ReactiveObjects(viewportBounds)",
|
||||
"_objectsViewport?.Current",
|
||||
"foreach (var entity in objects?.Objects ?? Array.Empty<AetheriaRuntimeRtsViewportObject>())",
|
||||
"_observedEntitySnapshotsByDaemonIndex.TryGetValue(entityIndex, out var entity)",
|
||||
|
|
@ -7550,10 +7550,10 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
|
|||
"MapRenderer.cs"));
|
||||
var requiredMapRendererSharedDocumentSymbols = new[]
|
||||
{
|
||||
"AetheriaRuntimeObjectsViewportSession _objectsViewport",
|
||||
"AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport",
|
||||
".ObserveObjects(viewport)",
|
||||
".ObserveRenderSplats(viewport)",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> _objectsViewport",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport",
|
||||
".ReactiveObjects(viewport)",
|
||||
".ReactiveRenderSplats(viewport)",
|
||||
".Settings",
|
||||
"ClearViewportCaches()",
|
||||
"_objectsViewport?.Dispose()",
|
||||
|
|
@ -7572,6 +7572,22 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
|
|||
string.Join(", ", missingMapRendererSharedDocumentSymbols));
|
||||
}
|
||||
|
||||
RequireReactiveTypedDocumentAccess(
|
||||
mapRenderer,
|
||||
"MapRenderer",
|
||||
"AetheriaRuntimeObjectsViewportDocument",
|
||||
"_objectsViewport",
|
||||
".ReactiveObjects(viewport)",
|
||||
"AetheriaRuntimeObjectsViewportSession",
|
||||
".ObserveObjects(viewport)");
|
||||
RequireReactiveTypedDocumentAccess(
|
||||
mapRenderer,
|
||||
"MapRenderer",
|
||||
"AetheriaRuntimeRenderSplatsViewportDocument",
|
||||
"_renderSplatsViewport",
|
||||
".ReactiveRenderSplats(viewport)",
|
||||
"AetheriaRuntimeRenderSplatsViewportSession",
|
||||
".ObserveRenderSplats(viewport)");
|
||||
RequireReactiveTypedDocumentAccess(
|
||||
mapRenderer,
|
||||
"MapRenderer",
|
||||
|
|
@ -7583,10 +7599,10 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
|
|||
|
||||
var forbiddenMapRendererSharedDocumentSymbols = new[]
|
||||
{
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> _objectsViewport",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport",
|
||||
".ReactiveObjects(viewport)",
|
||||
".ReactiveRenderSplats(viewport)"
|
||||
"AetheriaRuntimeObjectsViewportSession _objectsViewport",
|
||||
"AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport",
|
||||
".ObserveObjects(viewport)",
|
||||
".ObserveRenderSplats(viewport)"
|
||||
};
|
||||
var mapRendererRawDocumentHits = forbiddenMapRendererSharedDocumentSymbols
|
||||
.Where(symbol => mapRenderer.Contains(symbol, StringComparison.Ordinal))
|
||||
|
|
@ -7594,7 +7610,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
|
|||
if (mapRendererRawDocumentHits.Length > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"MapRenderer still owns raw viewport/settings CultMesh documents instead of managed sessions: " +
|
||||
"MapRenderer still routes viewport documents through session wrappers instead of managed reactive typed documents: " +
|
||||
string.Join(", ", mapRendererRawDocumentHits));
|
||||
}
|
||||
|
||||
|
|
@ -8001,8 +8017,8 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root)
|
|||
"AetheriaUnityRenderSplatViewportSource.cs"));
|
||||
var requiredRenderSplatViewportSourceSymbols = new[]
|
||||
{
|
||||
"AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport",
|
||||
".ObserveRenderSplats(viewport)",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport",
|
||||
".ReactiveRenderSplats(viewport)",
|
||||
"_renderSplatsViewport?.Current",
|
||||
"ClearViewportDocument()"
|
||||
};
|
||||
|
|
@ -8017,13 +8033,22 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root)
|
|||
string.Join(", ", missingRenderSplatViewportSourceSymbols));
|
||||
}
|
||||
|
||||
if (renderSplatViewportSource.Contains("CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport", StringComparison.Ordinal) ||
|
||||
renderSplatViewportSource.Contains(".ReactiveRenderSplats(viewport)", StringComparison.Ordinal))
|
||||
if (renderSplatViewportSource.Contains("AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport", StringComparison.Ordinal) ||
|
||||
renderSplatViewportSource.Contains(".ObserveRenderSplats(viewport)", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"AetheriaUnityRenderSplatViewportSource still owns a raw render-splats CultMesh document instead of AetheriaRuntimeRenderSplatsViewportSession.");
|
||||
"AetheriaUnityRenderSplatViewportSource still routes render-splats viewports through a session wrapper instead of a managed reactive typed document.");
|
||||
}
|
||||
|
||||
RequireReactiveTypedDocumentAccess(
|
||||
renderSplatViewportSource,
|
||||
"AetheriaUnityRenderSplatViewportSource",
|
||||
"AetheriaRuntimeRenderSplatsViewportDocument",
|
||||
"_renderSplatsViewport",
|
||||
".ReactiveRenderSplats(viewport)",
|
||||
"AetheriaRuntimeRenderSplatsViewportSession",
|
||||
".ObserveRenderSplats(viewport)");
|
||||
|
||||
var zoneRenderer = File.ReadAllText(Path.Combine(
|
||||
root,
|
||||
"Assets",
|
||||
|
|
@ -8032,8 +8057,8 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root)
|
|||
"ZoneRenderer.cs"));
|
||||
var requiredZoneRendererViewportSymbols = new[]
|
||||
{
|
||||
"AetheriaRuntimeObjectsViewportSession _objectsViewport",
|
||||
".ObserveObjects(viewportBounds)",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> _objectsViewport",
|
||||
".ReactiveObjects(viewportBounds)",
|
||||
"_objectsViewport?.Current",
|
||||
"_objectsViewport?.Dispose()"
|
||||
};
|
||||
|
|
@ -8048,13 +8073,22 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root)
|
|||
string.Join(", ", missingZoneRendererViewportSymbols));
|
||||
}
|
||||
|
||||
if (zoneRenderer.Contains("CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> _objectsViewport", StringComparison.Ordinal) ||
|
||||
zoneRenderer.Contains(".ReactiveObjects(viewportBounds)", StringComparison.Ordinal))
|
||||
if (zoneRenderer.Contains("AetheriaRuntimeObjectsViewportSession _objectsViewport", StringComparison.Ordinal) ||
|
||||
zoneRenderer.Contains(".ObserveObjects(viewportBounds)", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"ZoneRenderer still owns a raw objects viewport CultMesh document instead of AetheriaRuntimeObjectsViewportSession.");
|
||||
"ZoneRenderer still routes fallback objects viewports through a session wrapper instead of a managed reactive typed document.");
|
||||
}
|
||||
|
||||
RequireReactiveTypedDocumentAccess(
|
||||
zoneRenderer,
|
||||
"ZoneRenderer",
|
||||
"AetheriaRuntimeObjectsViewportDocument",
|
||||
"_objectsViewport",
|
||||
".ReactiveObjects(viewportBounds)",
|
||||
"AetheriaRuntimeObjectsViewportSession",
|
||||
".ObserveObjects(viewportBounds)");
|
||||
|
||||
Console.WriteLine("Viewport and map document accessors: Unity reads map, contact, viewport, and current-entity state through named managed accessors");
|
||||
}
|
||||
|
||||
|
|
@ -13899,8 +13933,8 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root)
|
|||
|
||||
if (!mapRenderer.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) ||
|
||||
!mapRenderer.Contains(".Viewports", StringComparison.Ordinal) ||
|
||||
!mapRenderer.Contains(".ObserveObjects(viewport)", StringComparison.Ordinal) ||
|
||||
!mapRenderer.Contains(".ObserveRenderSplats(viewport)", StringComparison.Ordinal) ||
|
||||
!mapRenderer.Contains(".ReactiveObjects(viewport)", StringComparison.Ordinal) ||
|
||||
!mapRenderer.Contains(".ReactiveRenderSplats(viewport)", StringComparison.Ordinal) ||
|
||||
!mapRenderer.Contains(".Settings", StringComparison.Ordinal) ||
|
||||
!mapRenderer.Contains(".ReactivePlayer()", StringComparison.Ordinal) ||
|
||||
!sectorRenderer.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) ||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using GameCult.Aetheria.State.Verse;
|
||||
using GameCult.Mesh;
|
||||
using UnityEngine;
|
||||
|
||||
public sealed class AetheriaUnityRenderSplatViewportSource : MonoBehaviour
|
||||
|
|
@ -27,7 +28,7 @@ public sealed class AetheriaUnityRenderSplatViewportSource : MonoBehaviour
|
|||
|
||||
private float _nextRefreshTime;
|
||||
private AetheriaRuntimeRtsViewportBounds _viewport;
|
||||
private AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport;
|
||||
private CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport;
|
||||
|
||||
public RenderTexture TargetTexture
|
||||
{
|
||||
|
|
@ -118,7 +119,7 @@ public sealed class AetheriaUnityRenderSplatViewportSource : MonoBehaviour
|
|||
var nextRenderSplatsViewport = ResolveClient()
|
||||
.State
|
||||
.Viewports
|
||||
.ObserveRenderSplats(viewport);
|
||||
.ReactiveRenderSplats(viewport);
|
||||
ClearViewportDocument();
|
||||
_viewport = viewport;
|
||||
_renderSplatsViewport = nextRenderSplatsViewport;
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@ public class MapRenderer : MonoBehaviour
|
|||
private RenderTexture _mapTexture;
|
||||
private int2 _size;
|
||||
private bool _init;
|
||||
private AetheriaRuntimeObjectsViewportSession _objectsViewport;
|
||||
private AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport;
|
||||
private CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> _objectsViewport;
|
||||
private CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport;
|
||||
private float _nextViewportRefreshTime;
|
||||
private readonly List<RawImage> _rtsIconPool = new List<RawImage>();
|
||||
private string _clientStatePath = "";
|
||||
|
|
@ -132,11 +132,11 @@ public class MapRenderer : MonoBehaviour
|
|||
_objectsViewport = client
|
||||
.State
|
||||
.Viewports
|
||||
.ObserveObjects(viewport);
|
||||
.ReactiveObjects(viewport);
|
||||
_renderSplatsViewport = client
|
||||
.State
|
||||
.Viewports
|
||||
.ObserveRenderSplats(viewport);
|
||||
.ReactiveRenderSplats(viewport);
|
||||
|
||||
var objectsViewport = _objectsViewport?.Current;
|
||||
var zoneName = string.IsNullOrWhiteSpace(objectsViewport?.ZoneName)
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ public class ZoneRenderer : MonoBehaviour
|
|||
private CultMeshReactiveDocument<AetheriaRuntimeCatalogSnapshot> _catalog;
|
||||
private CultMeshReactiveDocument<AetheriaRuntimeZoneContactsDocument> _zoneContacts;
|
||||
private AetheriaRuntimeRtsViewportBounds _objectsViewportBounds;
|
||||
private AetheriaRuntimeObjectsViewportSession _objectsViewport;
|
||||
private CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> _objectsViewport;
|
||||
|
||||
public Dictionary<int, (GameObject gravity, CompassIcon icon)> WormholeInstances = new Dictionary<int, (GameObject, CompassIcon)>();
|
||||
private List<ItemPickup> _loot = new List<ItemPickup>();
|
||||
|
|
@ -1246,7 +1246,7 @@ public class ZoneRenderer : MonoBehaviour
|
|||
var nextObjectsViewport = ResolveClient()
|
||||
.State
|
||||
.Viewports
|
||||
.ObserveObjects(viewportBounds);
|
||||
.ReactiveObjects(viewportBounds);
|
||||
_objectsViewport?.Dispose();
|
||||
_objectsViewportBounds = viewportBounds;
|
||||
_objectsViewport = nextObjectsViewport;
|
||||
|
|
|
|||
Loading…
Reference in a new issue