Remove reactive state session wrappers

This commit is contained in:
Meta Vens 2026-06-28 23:27:50 +01:00
commit c5d92cbf53
8 changed files with 121 additions and 484 deletions

View file

@ -7927,16 +7927,14 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root)
"public AetheriaRuntimeSectorMapDocument LatestSectorMap()",
"public AetheriaRuntimeZoneContactsDocument LatestZoneContacts()",
"public AetheriaRuntimeCurrentZoneDocument LatestZone()",
"public AetheriaRuntimeCurrentZoneSession ObserveZone(",
"public CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument> ReactiveZone(",
"public AetheriaRuntimeCurrentEntityDocument LatestEntity()",
"public AetheriaRuntimeObjectsViewportDocument LatestObjects(AetheriaRuntimeRtsViewportBounds viewport)",
"public CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> ReactiveObjects(",
"public AetheriaRuntimeObjectsViewportSession ObserveObjects(",
"public AetheriaRuntimeRenderSplatsViewportDocument LatestRenderSplats(AetheriaRuntimeRtsViewportBounds viewport)",
"public CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> ReactiveRenderSplats(",
"public AetheriaRuntimeRenderSplatsViewportSession ObserveRenderSplats(",
"public AetheriaRuntimeZoneDetailsDocument LatestZone(int zoneIndex)",
"public AetheriaRuntimeZoneDetailsSession ObserveZone("
"public CultMeshReactiveDocument<AetheriaRuntimeZoneDetailsDocument> ReactiveZone("
};
var missingClientSymbols = requiredClientSymbols
.Where(symbol => !clientState.Contains(symbol, StringComparison.Ordinal))
@ -15673,8 +15671,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
"public Observable<TDocument> Watch<TDocument>()",
"public Task<CultMeshReactiveDocument<TDocument>> ReactiveAsync<TDocument>(",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
"public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(",
"public AetheriaRuntimeObservedDaemonSession ObserveDaemon("
"public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon("
};
var missingManagedStateAccessSymbols = requiredManagedStateAccessSymbols
.Where(symbol => !aetheriaClientState.Contains(symbol, StringComparison.Ordinal))
@ -15689,15 +15686,10 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
var requiredManagedObservedDaemonSymbols = new[]
{
"public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(",
"public AetheriaRuntimeObservedDaemonSession ObserveDaemon(",
"using var frame = ReactiveDaemonFrame(options);",
"using var soaView = TryReactiveDaemonSoaView(options);",
"using var zoneRender = ReactiveZoneRender(options);",
"AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)",
"var frame = ReactiveDaemonFrame(options);",
"CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView = null;",
"CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument>? zoneRender = null;",
"return new AetheriaRuntimeObservedDaemonSession(frame, soaView, zoneRender);"
"AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)"
};
var missingManagedObservedDaemonSymbols = requiredManagedObservedDaemonSymbols
.Where(symbol => !aetheriaClientState.Contains(symbol, StringComparison.Ordinal))
@ -15705,16 +15697,19 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
if (missingManagedObservedDaemonSymbols.Length > 0)
{
throw new InvalidOperationException(
"AetheriaClientState must compose current observed daemon state from managed typed reactive documents: " +
"AetheriaClientState must compose current observed daemon state from direct managed reactive typed documents: " +
string.Join(", ", missingManagedObservedDaemonSymbols));
}
if (!daemonRuntimeDocumentTests.Contains("ManagedStateSamplesCurrentObservedDaemonFromReactiveDocuments()", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedSession = client.State.ObserveDaemon();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedFrame = client.State.ReactiveDaemonFrame();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedSoaView = client.State.ReactiveDaemonSoaView();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedZoneRender = client.State.ReactiveZoneRender();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("var sampledObserved = client.State.CurrentObservedDaemon();", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"Daemon runtime document tests must teach current observed daemon sampling through AetheriaClientState.ObserveDaemon() and CurrentObservedDaemon().");
"Daemon runtime document tests must teach observed daemon sampling through direct reactive daemon documents and CurrentObservedDaemon().");
}
var requiredObservedDaemonStateSymbols = new[]
@ -15726,15 +15721,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
"CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender",
"var currentFrame = frame?.Current;",
"var currentZoneRender = zoneRender?.Current;",
"new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)",
"public sealed class AetheriaRuntimeObservedDaemonSession",
"private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _frame;",
"private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? _soaView;",
"private readonly CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender;",
"public AetheriaRuntimeObservedDaemonState? Current =>",
"_frame.Dispose();",
"_soaView?.Dispose();",
"_zoneRender.Dispose();"
"new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)"
};
var missingObservedDaemonStateSymbols = requiredObservedDaemonStateSymbols
.Where(symbol => !observedDaemonState.Contains(symbol, StringComparison.Ordinal))
@ -15755,6 +15742,46 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
"Observed daemon state still composes legacy session wrappers instead of direct reactive CultMesh documents.");
}
var clientStateSessionWrapperSymbols = new[]
{
"Session Observe",
"new AetheriaRuntimeCatalogSession",
"new AetheriaRuntimeDaemonFrameSession",
"new AetheriaRuntimeLoadoutTemplatesSession",
"new AetheriaRuntimeSectorMapSession",
"new AetheriaRuntimeZoneContactsSession",
"new AetheriaRuntimeStationRefitSession",
"new AetheriaRuntimeZoneRenderSession",
"new AetheriaRuntimeCurrentZoneSession",
"new AetheriaRuntimeCurrentEntitySession",
"new AetheriaRuntimeCurrentDockingSession",
"new AetheriaRuntimePlayerSettingsSession",
"new AetheriaRuntimeVerseHostSettingsSession",
"new AetheriaRuntimeObjectsViewportSession",
"new AetheriaRuntimeRenderSplatsViewportSession",
"new AetheriaRuntimeInventorySession",
"new AetheriaRuntimeStarbridgeScenarioSession",
"new AetheriaRuntimeStarbridgeRunSession",
"new AetheriaRuntimeStarbridgeSummarySession",
"new AetheriaRuntimeStarbridgePlayerSeatSession"
};
var clientStateSessionWrapperHits = clientStateSessionWrapperSymbols
.Where(symbol => aetheriaClientState.Contains(symbol, StringComparison.Ordinal))
.ToArray();
if (clientStateSessionWrapperHits.Length > 0)
{
throw new InvalidOperationException(
"AetheriaClientState still exposes per-document Observe* session wrappers instead of direct Reactive* document access: " +
string.Join(", ", clientStateSessionWrapperHits));
}
var runtimeStateSessionsPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeStateSessions.cs");
if (File.Exists(runtimeStateSessionsPath))
{
throw new InvalidOperationException(
"AetheriaRuntimeStateSessions.cs still exists; per-document session wrappers must be deleted in favor of direct CultMesh reactive documents.");
}
var forbiddenObservedDaemonStateSymbols = new[]
{
"string statePath",
@ -15882,13 +15909,17 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
!daemonObserver.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory)", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonState", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonSession _observedDaemon", StringComparison.Ordinal) ||
!daemonObserver.Contains("_observedDaemon ??= ResolveClient()?.State?.ObserveDaemon();", StringComparison.Ordinal) ||
!daemonObserver.Contains("return _observedDaemon?.Current;", StringComparison.Ordinal) ||
!daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _daemonFrame", StringComparison.Ordinal) ||
!daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> _daemonSoaView", StringComparison.Ordinal) ||
!daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender", StringComparison.Ordinal) ||
!daemonObserver.Contains("_daemonFrame ??= state.ReactiveDaemonFrame();", StringComparison.Ordinal) ||
!daemonObserver.Contains("_daemonSoaView ??= TryReactiveDaemonSoaView(state);", StringComparison.Ordinal) ||
!daemonObserver.Contains("_zoneRender ??= state.ReactiveZoneRender();", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) ||
!daemonObserver.Contains("DisposeObservedDaemonSession()", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"AetheriaDaemonObserver must sample observed daemon state through a single managed AetheriaRuntimeObservedDaemonSession.");
"AetheriaDaemonObserver must sample observed daemon state through direct managed reactive daemon documents.");
}
if (daemonObserver.Contains("AetheriaRuntimeStateReader.TryReadObservedDaemonState", StringComparison.Ordinal) ||
@ -15896,17 +15927,13 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
daemonObserver.Contains("AetheriaRuntimeReactiveObservedDaemonState", StringComparison.Ordinal) ||
daemonObserver.Contains(".ReactiveObservedDaemon()", StringComparison.Ordinal) ||
daemonObserver.Contains("reactive.TryCurrent(out var observed)", StringComparison.Ordinal) ||
daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _reactiveFrame", StringComparison.Ordinal) ||
daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> _reactiveSoaView", StringComparison.Ordinal) ||
daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _reactiveZoneRender", StringComparison.Ordinal) ||
daemonObserver.Contains("state.ReactiveDaemonFrame()", StringComparison.Ordinal) ||
daemonObserver.Contains("state.ReactiveDaemonSoaView()", StringComparison.Ordinal) ||
daemonObserver.Contains("state.ReactiveZoneRender()", StringComparison.Ordinal) ||
daemonObserver.Contains("AetheriaRuntimeObservedDaemonSession", StringComparison.Ordinal) ||
daemonObserver.Contains(".ObserveDaemon()", StringComparison.Ordinal) ||
daemonObserver.Contains("return new AetheriaRuntimeObservedDaemonState(frame, soaView, zoneRender);", StringComparison.Ordinal) ||
daemonObserver.Contains("DisposeReactiveObservedDaemonDocuments()", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"AetheriaDaemonObserver still owns raw observed daemon document plumbing instead of the managed observed-daemon session.");
"AetheriaDaemonObserver still routes through observed-daemon compatibility wrappers instead of direct reactive documents.");
}
if (daemonObserver.Contains("ObserveAsync()", StringComparison.Ordinal))

View file

@ -1,5 +1,6 @@
using System;
using GameCult.Aetheria.State.Verse;
using GameCult.Mesh;
using UnityEngine;
public sealed class AetheriaDaemonObserver : MonoBehaviour
@ -20,7 +21,9 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
private float _nextPollTime;
private AetheriaDaemonSoaMemoryMap _soaMemoryMap;
private AetheriaDaemonRenderNativeView _renderNativeView;
private AetheriaRuntimeObservedDaemonSession _observedDaemon;
private CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _daemonFrame;
private CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> _daemonSoaView;
private CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender;
public AetheriaRuntimeObservedDaemonState LastObservedState { get; private set; }
public AetheriaRuntimeDaemonObservationResult LastObservation { get; private set; }
@ -100,8 +103,14 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
{
try
{
_observedDaemon ??= ResolveClient()?.State?.ObserveDaemon();
return _observedDaemon?.Current;
EnsureObservedDaemonDocuments();
return AetheriaRuntimeObservedDaemonState.TryCreateCurrent(
_daemonFrame,
_daemonSoaView,
_zoneRender,
out var observed)
? observed
: null;
}
catch
{
@ -109,6 +118,37 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
}
}
private void EnsureObservedDaemonDocuments()
{
if (_daemonFrame != null && _zoneRender != null)
{
return;
}
var state = ResolveClient()?.State;
if (state == null)
{
return;
}
_daemonFrame ??= state.ReactiveDaemonFrame();
_daemonSoaView ??= TryReactiveDaemonSoaView(state);
_zoneRender ??= state.ReactiveZoneRender();
}
private static CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> TryReactiveDaemonSoaView(
AetheriaClientState state)
{
try
{
return state.ReactiveDaemonSoaView();
}
catch (System.Collections.Generic.KeyNotFoundException)
{
return null;
}
}
private AetheriaClient ResolveClient()
{
var stateBoot = AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory);
@ -159,7 +199,11 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
private void DisposeObservedDaemonSession()
{
_observedDaemon?.Dispose();
_observedDaemon = null;
_daemonFrame?.Dispose();
_daemonFrame = null;
_daemonSoaView?.Dispose();
_daemonSoaView = null;
_zoneRender?.Dispose();
_zoneRender = null;
}
}

View file

@ -2263,8 +2263,16 @@ public class DaemonRuntimeDocumentTests
.OpenAsync(statePath, "unity-reactive-observer-test", pullOnOpen: true)
.GetAwaiter()
.GetResult();
using var observedSession = client.State.ObserveDaemon();
var observed = observedSession.Current;
using var observedFrame = client.State.ReactiveDaemonFrame();
using var observedSoaView = client.State.ReactiveDaemonSoaView();
using var observedZoneRender = client.State.ReactiveZoneRender();
var observed = AetheriaRuntimeObservedDaemonState.TryCreateCurrent(
observedFrame,
observedSoaView,
observedZoneRender,
out var currentObserved)
? currentObserved
: null;
var sampledObserved = client.State.CurrentObservedDaemon();
Assert.IsNotNull(observed);
Assert.IsNotNull(sampledObserved);

View file

@ -75,7 +75,6 @@
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimePlayerSettingsCommands.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaControl.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonStateRefs.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeStateSessions.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeMainMenuSurfaceBuilder.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeRenderSplatDocuments.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeInputSettingsSurfaceBuilder.cs" />
@ -114,7 +113,6 @@
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeStatRecipes.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonRenderQueries.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeStarbridgePlayerSeatDocuments.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeStateSessions.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeMenuTabsSurfaceBuilder.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeShipSettingsSurfaceBuilder.cs" />
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeClientTargetCommands.cs" />

View file

@ -199,12 +199,6 @@ namespace GameCult.Aetheria.State.Verse
return Catalog.Reactive(options);
}
public AetheriaRuntimeCatalogSession ObserveCatalog(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeCatalogSession(ReactiveCatalog(options));
}
public Task<AetheriaRuntimeDaemonFrameDocument> LatestDaemonFrameAsync()
{
return LatestFrame.LatestAsync();
@ -227,12 +221,6 @@ namespace GameCult.Aetheria.State.Verse
return LatestFrame.Reactive(options);
}
public AetheriaRuntimeDaemonFrameSession ObserveDaemonFrame(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeDaemonFrameSession(ReactiveDaemonFrame(options));
}
public Task<AetheriaRuntimeDaemonSoaViewDocument> LatestDaemonSoaViewAsync()
{
return LatestSoaView.LatestAsync();
@ -255,12 +243,6 @@ namespace GameCult.Aetheria.State.Verse
return LatestSoaView.Reactive(options);
}
public AetheriaRuntimeDaemonSoaViewSession ObserveDaemonSoaView(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeDaemonSoaViewSession(ReactiveDaemonSoaView(options));
}
public async Task<AetheriaRuntimeObservedDaemonState?> LatestObservedDaemonAsync()
{
var frame = await LatestDaemonFrameAsync().ConfigureAwait(false);
@ -285,27 +267,6 @@ namespace GameCult.Aetheria.State.Verse
: null;
}
public AetheriaRuntimeObservedDaemonSession ObserveDaemon(
CultMeshReactiveDocumentOptions? options = null)
{
var frame = ReactiveDaemonFrame(options);
CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView = null;
CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument>? zoneRender = null;
try
{
soaView = TryReactiveDaemonSoaView(options);
zoneRender = ReactiveZoneRender(options);
return new AetheriaRuntimeObservedDaemonSession(frame, soaView, zoneRender);
}
catch
{
frame.Dispose();
soaView?.Dispose();
zoneRender?.Dispose();
throw;
}
}
public AetheriaRuntimeObservedDockingState? CurrentDocking(
CultMeshReactiveDocumentOptions? options = null)
{
@ -495,12 +456,6 @@ namespace GameCult.Aetheria.State.Verse
return LoadoutTemplates.Reactive(options);
}
public AetheriaRuntimeLoadoutTemplatesSession ObserveLoadoutTemplates(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeLoadoutTemplatesSession(ReactiveLoadoutTemplates(options));
}
public Task<AetheriaRuntimeSectorMapDocument> LatestSectorMapAsync()
{
return SectorMap.LatestAsync();
@ -523,12 +478,6 @@ namespace GameCult.Aetheria.State.Verse
return SectorMap.Reactive(options);
}
public AetheriaRuntimeSectorMapSession ObserveSectorMap(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeSectorMapSession(ReactiveSectorMap(options));
}
public Task<AetheriaRuntimeZoneContactsDocument> LatestZoneContactsAsync()
{
return ZoneContacts.LatestAsync();
@ -551,12 +500,6 @@ namespace GameCult.Aetheria.State.Verse
return ZoneContacts.Reactive(options);
}
public AetheriaRuntimeZoneContactsSession ObserveZoneContacts(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeZoneContactsSession(ReactiveZoneContacts(options));
}
public Task<AetheriaRuntimeStationRefitDocument> LatestStationRefitAsync()
{
return StationRefit.LatestAsync();
@ -579,12 +522,6 @@ namespace GameCult.Aetheria.State.Verse
return StationRefit.Reactive(options);
}
public AetheriaRuntimeStationRefitSession ObserveStationRefit(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeStationRefitSession(ReactiveStationRefit(options));
}
public Task<AetheriaRuntimeZoneRenderDocument> LatestZoneRenderAsync()
{
return ZoneRender.LatestAsync();
@ -607,12 +544,6 @@ namespace GameCult.Aetheria.State.Verse
return ZoneRender.Reactive(options);
}
public AetheriaRuntimeZoneRenderSession ObserveZoneRender(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeZoneRenderSession(ReactiveZoneRender(options));
}
public Observable<TDocument> Watch<TDocument>()
where TDocument : class
{
@ -901,12 +832,6 @@ namespace GameCult.Aetheria.State.Verse
return Zone.Reactive(options);
}
public AetheriaRuntimeCurrentZoneSession ObserveZone(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeCurrentZoneSession(ReactiveZone(options));
}
public Task<AetheriaRuntimeCurrentEntityDocument> LatestEntityAsync()
{
return Entity.LatestAsync();
@ -929,12 +854,6 @@ namespace GameCult.Aetheria.State.Verse
return Entity.Reactive(options);
}
public AetheriaRuntimeCurrentEntitySession ObserveEntity(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeCurrentEntitySession(ReactiveEntity(options));
}
public Task<AetheriaRuntimeCurrentDockingDocument> LatestDockingAsync()
{
return Docking.LatestAsync();
@ -957,11 +876,6 @@ namespace GameCult.Aetheria.State.Verse
return Docking.Reactive(options);
}
public AetheriaRuntimeCurrentDockingSession ObserveDocking(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeCurrentDockingSession(ReactiveDocking(options));
}
}
public sealed class AetheriaClientSettingsState
@ -1000,12 +914,6 @@ namespace GameCult.Aetheria.State.Verse
return Player.Reactive(options);
}
public AetheriaRuntimePlayerSettingsSession ObservePlayer(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimePlayerSettingsSession(ReactivePlayer(options));
}
public Task<AetheriaRuntimeVerseHostSettingsDocument> LatestVerseHostAsync()
{
return VerseHost.LatestAsync();
@ -1028,11 +936,6 @@ namespace GameCult.Aetheria.State.Verse
return VerseHost.Reactive(options);
}
public AetheriaRuntimeVerseHostSettingsSession ObserveVerseHost(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeVerseHostSettingsSession(ReactiveVerseHost(options));
}
}
public sealed class AetheriaClientViewportState
@ -1083,13 +986,6 @@ namespace GameCult.Aetheria.State.Verse
return Map(viewport).Reactive(options);
}
public AetheriaRuntimeMapViewportSession ObserveMap(
AetheriaRuntimeRtsViewportBounds viewport,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeMapViewportSession(ReactiveMap(viewport, options));
}
public CultMeshDocumentHandle<AetheriaRuntimeObjectsViewportDocument> Objects(AetheriaRuntimeRtsViewportBounds viewport)
{
return _objects(viewport ?? new AetheriaRuntimeRtsViewportBounds());
@ -1119,13 +1015,6 @@ namespace GameCult.Aetheria.State.Verse
return Objects(viewport).Reactive(options);
}
public AetheriaRuntimeObjectsViewportSession ObserveObjects(
AetheriaRuntimeRtsViewportBounds viewport,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeObjectsViewportSession(ReactiveObjects(viewport, options));
}
public CultMeshDocumentHandle<AetheriaRuntimeGravityViewportDocument> Gravity(AetheriaRuntimeRtsViewportBounds viewport)
{
return _gravity(viewport ?? new AetheriaRuntimeRtsViewportBounds());
@ -1155,13 +1044,6 @@ namespace GameCult.Aetheria.State.Verse
return Gravity(viewport).Reactive(options);
}
public AetheriaRuntimeGravityViewportSession ObserveGravity(
AetheriaRuntimeRtsViewportBounds viewport,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeGravityViewportSession(ReactiveGravity(viewport, options));
}
public CultMeshDocumentHandle<AetheriaRuntimeRenderSplatsViewportDocument> RenderSplats(AetheriaRuntimeRtsViewportBounds viewport)
{
return _renderSplats(viewport ?? new AetheriaRuntimeRtsViewportBounds());
@ -1191,12 +1073,6 @@ namespace GameCult.Aetheria.State.Verse
return RenderSplats(viewport).Reactive(options);
}
public AetheriaRuntimeRenderSplatsViewportSession ObserveRenderSplats(
AetheriaRuntimeRtsViewportBounds viewport,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeRenderSplatsViewportSession(ReactiveRenderSplats(viewport, options));
}
}
public sealed class AetheriaClientDetailState
@ -1244,13 +1120,6 @@ namespace GameCult.Aetheria.State.Verse
return Zone(zoneIndex).Reactive(options);
}
public AetheriaRuntimeZoneDetailsSession ObserveZone(
int zoneIndex,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeZoneDetailsSession(ReactiveZone(zoneIndex, options));
}
public CultMeshDocumentHandle<AetheriaRuntimeSelectedObjectDocument> SelectedObject(int entityIndex)
{
return _selectedObject(entityIndex);
@ -1280,13 +1149,6 @@ namespace GameCult.Aetheria.State.Verse
return SelectedObject(entityIndex).Reactive(options);
}
public AetheriaRuntimeSelectedObjectSession ObserveSelectedObject(
int entityIndex,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeSelectedObjectSession(ReactiveSelectedObject(entityIndex, options));
}
public CultMeshDocumentHandle<AetheriaRuntimeInventoryDocument> Inventory(int entityIndex)
{
return _inventory(entityIndex);
@ -1316,12 +1178,6 @@ namespace GameCult.Aetheria.State.Verse
return Inventory(entityIndex).Reactive(options);
}
public AetheriaRuntimeInventorySession ObserveInventory(
int entityIndex,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeInventorySession(ReactiveInventory(entityIndex, options));
}
}
public sealed class AetheriaClientStarbridgeState
@ -1375,12 +1231,6 @@ namespace GameCult.Aetheria.State.Verse
return Scenario.Reactive(options);
}
public AetheriaRuntimeStarbridgeScenarioSession ObserveScenario(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeStarbridgeScenarioSession(ReactiveScenario(options));
}
public Task<AetheriaRuntimeStarbridgeSessionDocument> LatestSessionAsync()
{
return Session.LatestAsync();
@ -1403,12 +1253,6 @@ namespace GameCult.Aetheria.State.Verse
return Session.Reactive(options);
}
public AetheriaRuntimeStarbridgeRunSession ObserveSession(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeStarbridgeRunSession(ReactiveSession(options));
}
public Task<AetheriaRuntimeStarbridgeSessionSummaryDocument> LatestSummaryAsync()
{
return Summary.LatestAsync();
@ -1431,12 +1275,6 @@ namespace GameCult.Aetheria.State.Verse
return Summary.Reactive(options);
}
public AetheriaRuntimeStarbridgeSummarySession ObserveSummary(
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeStarbridgeSummarySession(ReactiveSummary(options));
}
public Task<AetheriaRuntimeStarbridgePlayerSeatDocument> LatestPlayerSeatAsync(string seatId)
{
return PlayerSeat(seatId).LatestAsync();
@ -1461,11 +1299,5 @@ namespace GameCult.Aetheria.State.Verse
return PlayerSeat(seatId).Reactive(options);
}
public AetheriaRuntimeStarbridgePlayerSeatSession ObservePlayerSeat(
string seatId,
CultMeshReactiveDocumentOptions? options = null)
{
return new AetheriaRuntimeStarbridgePlayerSeatSession(ReactivePlayerSeat(seatId, options));
}
}
}

View file

@ -57,33 +57,4 @@ namespace GameCult.Aetheria.State.Verse
}
}
public sealed class AetheriaRuntimeObservedDaemonSession : IDisposable
{
private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _frame;
private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? _soaView;
private readonly CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender;
public AetheriaRuntimeObservedDaemonSession(
CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> frame,
CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView,
CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender)
{
_frame = frame ?? throw new ArgumentNullException(nameof(frame));
_soaView = soaView;
_zoneRender = zoneRender ?? throw new ArgumentNullException(nameof(zoneRender));
}
public AetheriaRuntimeObservedDaemonState? Current =>
AetheriaRuntimeObservedDaemonState.TryCreateCurrent(_frame, _soaView, _zoneRender, out var current)
? current
: null;
public void Dispose()
{
_frame.Dispose();
_soaView?.Dispose();
_zoneRender.Dispose();
}
}
}

View file

@ -1,241 +0,0 @@
using System;
using GameCult.Mesh;
#nullable enable
namespace GameCult.Aetheria.State.Verse
{
public abstract class AetheriaRuntimeReactiveSession<TDocument> : IDisposable
where TDocument : class
{
private readonly CultMeshReactiveDocument<TDocument> _document;
protected AetheriaRuntimeReactiveSession(CultMeshReactiveDocument<TDocument> document)
{
_document = document ?? throw new ArgumentNullException(nameof(document));
}
public TDocument? Current => _document.Current;
public void Dispose()
{
_document.Dispose();
}
}
public sealed class AetheriaRuntimeCatalogSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeCatalogSnapshot>
{
public AetheriaRuntimeCatalogSession(CultMeshReactiveDocument<AetheriaRuntimeCatalogSnapshot> catalog)
: base(catalog)
{
}
}
public sealed class AetheriaRuntimePlayerSettingsSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimePlayerSettingsDocument>
{
public AetheriaRuntimePlayerSettingsSession(CultMeshReactiveDocument<AetheriaRuntimePlayerSettingsDocument> playerSettings)
: base(playerSettings)
{
}
}
public sealed class AetheriaRuntimeVerseHostSettingsSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeVerseHostSettingsDocument>
{
public AetheriaRuntimeVerseHostSettingsSession(CultMeshReactiveDocument<AetheriaRuntimeVerseHostSettingsDocument> verseHostSettings)
: base(verseHostSettings)
{
}
}
public sealed class AetheriaRuntimeSectorMapSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeSectorMapDocument>
{
public AetheriaRuntimeSectorMapSession(CultMeshReactiveDocument<AetheriaRuntimeSectorMapDocument> sectorMap)
: base(sectorMap)
{
}
}
public sealed class AetheriaRuntimeDaemonFrameSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeDaemonFrameDocument>
{
public AetheriaRuntimeDaemonFrameSession(CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> daemonFrame)
: base(daemonFrame)
{
}
}
public sealed class AetheriaRuntimeDaemonSoaViewSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeDaemonSoaViewDocument>
{
public AetheriaRuntimeDaemonSoaViewSession(CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> soaView)
: base(soaView)
{
}
}
public sealed class AetheriaRuntimeZoneContactsSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeZoneContactsDocument>
{
public AetheriaRuntimeZoneContactsSession(CultMeshReactiveDocument<AetheriaRuntimeZoneContactsDocument> zoneContacts)
: base(zoneContacts)
{
}
}
public sealed class AetheriaRuntimeStationRefitSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeStationRefitDocument>
{
public AetheriaRuntimeStationRefitSession(CultMeshReactiveDocument<AetheriaRuntimeStationRefitDocument> stationRefit)
: base(stationRefit)
{
}
}
public sealed class AetheriaRuntimeZoneRenderSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeZoneRenderDocument>
{
public AetheriaRuntimeZoneRenderSession(CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender)
: base(zoneRender)
{
}
}
public sealed class AetheriaRuntimeCurrentZoneSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeCurrentZoneDocument>
{
public AetheriaRuntimeCurrentZoneSession(CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument> currentZone)
: base(currentZone)
{
}
}
public sealed class AetheriaRuntimeCurrentEntitySession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeCurrentEntityDocument>
{
public AetheriaRuntimeCurrentEntitySession(CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument> currentEntity)
: base(currentEntity)
{
}
}
public sealed class AetheriaRuntimeCurrentDockingSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeCurrentDockingDocument>
{
public AetheriaRuntimeCurrentDockingSession(CultMeshReactiveDocument<AetheriaRuntimeCurrentDockingDocument> currentDocking)
: base(currentDocking)
{
}
}
public sealed class AetheriaRuntimeZoneDetailsSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeZoneDetailsDocument>
{
public AetheriaRuntimeZoneDetailsSession(CultMeshReactiveDocument<AetheriaRuntimeZoneDetailsDocument> zoneDetails)
: base(zoneDetails)
{
}
}
public sealed class AetheriaRuntimeInventorySession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeInventoryDocument>
{
public AetheriaRuntimeInventorySession(CultMeshReactiveDocument<AetheriaRuntimeInventoryDocument> inventory)
: base(inventory)
{
}
}
public sealed class AetheriaRuntimeObjectsViewportSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeObjectsViewportDocument>
{
public AetheriaRuntimeObjectsViewportSession(CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> objectsViewport)
: base(objectsViewport)
{
}
}
public sealed class AetheriaRuntimeMapViewportSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeRtsViewportDocument>
{
public AetheriaRuntimeMapViewportSession(CultMeshReactiveDocument<AetheriaRuntimeRtsViewportDocument> mapViewport)
: base(mapViewport)
{
}
}
public sealed class AetheriaRuntimeRenderSplatsViewportSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeRenderSplatsViewportDocument>
{
public AetheriaRuntimeRenderSplatsViewportSession(CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> renderSplatsViewport)
: base(renderSplatsViewport)
{
}
}
public sealed class AetheriaRuntimeGravityViewportSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeGravityViewportDocument>
{
public AetheriaRuntimeGravityViewportSession(CultMeshReactiveDocument<AetheriaRuntimeGravityViewportDocument> gravityViewport)
: base(gravityViewport)
{
}
}
public sealed class AetheriaRuntimeSelectedObjectSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeSelectedObjectDocument>
{
public AetheriaRuntimeSelectedObjectSession(CultMeshReactiveDocument<AetheriaRuntimeSelectedObjectDocument> selectedObject)
: base(selectedObject)
{
}
}
public sealed class AetheriaRuntimeLoadoutTemplatesSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeLoadoutTemplatesDocument>
{
public AetheriaRuntimeLoadoutTemplatesSession(CultMeshReactiveDocument<AetheriaRuntimeLoadoutTemplatesDocument> loadoutTemplates)
: base(loadoutTemplates)
{
}
}
public sealed class AetheriaRuntimeStarbridgeScenarioSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeStarbridgeScenarioDocument>
{
public AetheriaRuntimeStarbridgeScenarioSession(CultMeshReactiveDocument<AetheriaRuntimeStarbridgeScenarioDocument> scenario)
: base(scenario)
{
}
}
public sealed class AetheriaRuntimeStarbridgeRunSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeStarbridgeSessionDocument>
{
public AetheriaRuntimeStarbridgeRunSession(CultMeshReactiveDocument<AetheriaRuntimeStarbridgeSessionDocument> session)
: base(session)
{
}
}
public sealed class AetheriaRuntimeStarbridgeSummarySession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeStarbridgeSessionSummaryDocument>
{
public AetheriaRuntimeStarbridgeSummarySession(CultMeshReactiveDocument<AetheriaRuntimeStarbridgeSessionSummaryDocument> summary)
: base(summary)
{
}
}
public sealed class AetheriaRuntimeStarbridgePlayerSeatSession
: AetheriaRuntimeReactiveSession<AetheriaRuntimeStarbridgePlayerSeatDocument>
{
public AetheriaRuntimeStarbridgePlayerSeatSession(CultMeshReactiveDocument<AetheriaRuntimeStarbridgePlayerSeatDocument> playerSeat)
: base(playerSeat)
{
}
}
}

View file

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 0a8d20b7f1c74745a9456dbf7bcd63c0