Centralize viewport render state sessions

This commit is contained in:
Meta Vens 2026-06-28 14:08:53 +01:00
commit a96fdc66bc
6 changed files with 104 additions and 22 deletions

View file

@ -1,5 +1,4 @@
using System;
using GameCult.Mesh;
using GameCult.Aetheria.State.Verse;
using UnityEngine;
@ -28,7 +27,7 @@ public sealed class AetheriaUnityRenderSplatViewportSource : MonoBehaviour
private float _nextRefreshTime;
private AetheriaRuntimeRtsViewportBounds _viewport;
private CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport;
private AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport;
public RenderTexture TargetTexture
{
@ -119,7 +118,7 @@ public sealed class AetheriaUnityRenderSplatViewportSource : MonoBehaviour
var nextRenderSplatsViewport = ResolveClient()
.State
.Viewports
.ReactiveRenderSplats(viewport);
.ObserveRenderSplats(viewport);
ClearViewportDocument();
_viewport = viewport;
_renderSplatsViewport = nextRenderSplatsViewport;

View file

@ -210,6 +210,8 @@ public class DaemonRuntimeDocumentTests
using var playerSettingsSession = client.State.Settings.ObservePlayer();
using var verseHostSettingsSession = client.State.Settings.ObserveVerseHost();
using var zoneContactsSession = client.State.ObserveZoneContacts();
using var objectsViewportSession = client.State.Viewports.ObserveObjects(viewport);
using var renderSplatsViewportSession = client.State.Viewports.ObserveRenderSplats(viewport);
using var playerHud = client.State.ObservePlayerHud();
var gameSurface = client.State.LatestGameSurface();
var gameTuiSurface = client.State.LatestGameTuiSurface();
@ -291,6 +293,8 @@ public class DaemonRuntimeDocumentTests
Assert.AreEqual(AetheriaRuntimeVerseHostSettingsDocument.SchemaId, verseHostSettings.Schema);
Assert.AreEqual(AetheriaRuntimeVerseHostSettingsDocument.SchemaId, verseHostSettingsSession.Current.Schema);
Assert.AreEqual(AetheriaRuntimeDaemonSchemas.ObjectsViewport, objectsViewport.Schema);
Assert.AreEqual(AetheriaRuntimeDaemonSchemas.ObjectsViewport, objectsViewportSession.Current.Schema);
Assert.AreEqual(AetheriaRuntimeDaemonSchemas.RenderSplatsViewport, renderSplatsViewportSession.Current.Schema);
Assert.AreEqual(AetheriaRuntimeDaemonSchemas.ZoneContacts, zoneContactsSession.Current.Schema);
Assert.AreEqual("Player", objectsViewport.Objects.FirstOrDefault()?.DisplayName);
Assert.AreEqual(AetheriaRuntimeDaemonSchemas.ZoneDetails, zoneDetails.Schema);

View file

@ -6,7 +6,6 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using GameCult.Mesh;
using GameCult.Aetheria.State.Verse;
using TMPro;
using UnityEngine;
@ -40,12 +39,12 @@ public class MapRenderer : MonoBehaviour
private RenderTexture _mapTexture;
private int2 _size;
private bool _init;
private CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> _objectsViewport;
private CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> _renderSplatsViewport;
private AetheriaRuntimeObjectsViewportSession _objectsViewport;
private AetheriaRuntimeRenderSplatsViewportSession _renderSplatsViewport;
private float _nextViewportRefreshTime;
private readonly List<RawImage> _rtsIconPool = new List<RawImage>();
private string _clientStatePath = "";
private CultMeshReactiveDocument<AetheriaRuntimePlayerSettingsDocument> _playerSettings;
private AetheriaRuntimePlayerSettingsSession _playerSettings;
void Start()
{
@ -132,11 +131,11 @@ public class MapRenderer : MonoBehaviour
_objectsViewport = client
.State
.Viewports
.ReactiveObjects(viewport);
.ObserveObjects(viewport);
_renderSplatsViewport = client
.State
.Viewports
.ReactiveRenderSplats(viewport);
.ObserveRenderSplats(viewport);
var objectsViewport = _objectsViewport?.Current;
var zoneName = string.IsNullOrWhiteSpace(objectsViewport?.ZoneName)
@ -321,7 +320,7 @@ public class MapRenderer : MonoBehaviour
_playerSettings ??= ResolveClient()
.State
.Settings
.ReactivePlayer();
.ObservePlayer();
return _playerSettings?.Current?.ShowAsteroidsInMinimap ?? false;
}
catch (Exception ex)