Use generic current state documents

This commit is contained in:
Meta Vens 2026-06-29 00:08:58 +01:00
commit 3048b52058
10 changed files with 73 additions and 115 deletions

View file

@ -2564,7 +2564,7 @@ static void RequireDaemonRenderQueryAuthority(string root)
"AetheriaUnityRuntimeClientProvider.ResolveClient(",
"ResolveClient().State.Reactive<AetheriaRuntimeCatalogSnapshot>()",
"ResolveClient().State.Reactive<AetheriaRuntimePlayerSettingsDocument>()",
"ResolveClient().State.Current.ReactiveEntity()",
"ResolveClient().State.Reactive<AetheriaRuntimeCurrentEntityDocument>()",
"return _currentEntity?.Current?.Hud ?? new AetheriaRuntimeCurrentEntityHudStatus();",
"_currentEntity?.Dispose()",
"hud.OverrideShutdown",
@ -4585,7 +4585,7 @@ static void RequireSectorMapZoneDetailsUseEveSurface(string root)
"SectorRenderer",
"AetheriaRuntimeCurrentZoneDocument",
"_currentZone",
".ReactiveZone()",
".Reactive<AetheriaRuntimeCurrentZoneDocument>()",
"AetheriaRuntimeCurrentZoneSession",
".ObserveZone()");
RequireReactiveTypedDocumentAccess(
@ -4769,7 +4769,7 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root)
"ResolveVisibleTabs(",
"SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)",
"AetheriaRuntimeCurrentDockingDocument",
"ResolveClient().State.Current.LatestDocking()",
"ResolveClient().State.Latest<AetheriaRuntimeCurrentDockingDocument>()",
"docking.IsDocked",
"AetheriaClient",
"AetheriaUnityRuntimeClientProvider.ResolveClient(",
@ -5731,7 +5731,7 @@ static void RequireTradeCargoSelectorUseEveSurface(string root)
"AetheriaRuntimeTradeCargoSelectorCommandKind.Select",
"SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)",
"AetheriaRuntimeCurrentDockingDocument",
"ResolveClient().State.Current.LatestDocking()",
"ResolveClient().State.Latest<AetheriaRuntimeCurrentDockingDocument>()",
"ResolveClient().State.LatestStationRefit()",
"SetTargetCargo(",
"selection.EntityKey",
@ -7024,7 +7024,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root)
}
var clientState = File.ReadAllText(clientStatePath);
if (!clientState.Contains("public CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument> ReactiveEntity(", StringComparison.Ordinal) ||
if (!clientState.Contains("public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(", StringComparison.Ordinal) ||
!clientState.Contains("public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(", StringComparison.Ordinal) ||
!clientState.Contains("public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(", StringComparison.Ordinal))
{
@ -7043,7 +7043,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root)
var requiredSymbols = new[]
{
"ResolveCurrentEntity()",
".ReactiveEntity()",
".Reactive<AetheriaRuntimeCurrentEntityDocument>()",
"ResolveStationRefitDocument()",
".Reactive<AetheriaRuntimeStationRefitDocument>()",
"ResolveInventory(entityIndex)",
@ -7091,7 +7091,7 @@ static void RequireInventoryValidationUsesManagedTypedDocuments(string root)
name,
"AetheriaRuntimeCurrentEntityDocument",
"_currentEntity",
".ReactiveEntity()",
".Reactive<AetheriaRuntimeCurrentEntityDocument>()",
"AetheriaRuntimeCurrentEntitySession",
".ObserveEntity()");
RequireReactiveTypedDocumentAccess(
@ -7132,8 +7132,8 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root)
"public AetheriaClientCurrentState Current { get; }",
"public CultMeshDocumentHandle<AetheriaRuntimeStationRefitDocument> StationRefit { get; }",
"public CultMeshDocumentHandle<AetheriaRuntimeCurrentDockingDocument> Docking { get; }",
"public AetheriaRuntimeCurrentDockingDocument LatestDocking()",
"public CultMeshReactiveDocument<AetheriaRuntimeCurrentDockingDocument> ReactiveDocking(",
"public TDocument Latest<TDocument>()",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>("
};
var missingClientSymbols = requiredClientSymbols
@ -7215,7 +7215,7 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root)
static bool HasManagedDockingSnapshotAccess(string source)
{
if (source.Contains("AetheriaRuntimeCurrentDockingDocument", StringComparison.Ordinal) &&
source.Contains("ResolveClient().State.Current.LatestDocking()", StringComparison.Ordinal) &&
source.Contains("ResolveClient().State.Latest<AetheriaRuntimeCurrentDockingDocument>()", StringComparison.Ordinal) &&
!source.Contains("ResolveClient().State.CurrentDocking()", StringComparison.Ordinal) &&
!source.Contains("AetheriaClientReactiveDockingState _dockingState", StringComparison.Ordinal) &&
!source.Contains(".ReactiveDockingState()", StringComparison.Ordinal))
@ -7225,8 +7225,8 @@ static bool HasManagedDockingSnapshotAccess(string source)
if (source.Contains("AetheriaRuntimeObservedDockingState", StringComparison.Ordinal) &&
source.Contains("var state = _resolveClient()?.State;", StringComparison.Ordinal) &&
source.Contains("state.Current.LatestEntity()", StringComparison.Ordinal) &&
source.Contains("state.Current.LatestDocking()", StringComparison.Ordinal) &&
source.Contains("state.Latest<AetheriaRuntimeCurrentEntityDocument>()", StringComparison.Ordinal) &&
source.Contains("state.Latest<AetheriaRuntimeCurrentDockingDocument>()", StringComparison.Ordinal) &&
source.Contains("state.LatestStationRefit()", StringComparison.Ordinal) &&
!source.Contains("State?.CurrentDocking()", StringComparison.Ordinal) &&
!source.Contains(".State.CurrentDocking()", StringComparison.Ordinal) &&
@ -7249,8 +7249,8 @@ static bool HasManagedDockingSnapshotAccess(string source)
return source.Contains("public sealed class AetheriaUnityObservedDockingIndex", StringComparison.Ordinal) &&
source.Contains("AetheriaRuntimeObservedDockingState", StringComparison.Ordinal) &&
source.Contains("var state = _resolveClient()?.State;", StringComparison.Ordinal) &&
source.Contains("state.Current.LatestEntity()", StringComparison.Ordinal) &&
source.Contains("state.Current.LatestDocking()", StringComparison.Ordinal) &&
source.Contains("state.Latest<AetheriaRuntimeCurrentEntityDocument>()", StringComparison.Ordinal) &&
source.Contains("state.Latest<AetheriaRuntimeCurrentDockingDocument>()", StringComparison.Ordinal) &&
source.Contains("state.LatestStationRefit()", StringComparison.Ordinal) &&
!source.Contains("State?.CurrentDocking()", StringComparison.Ordinal) &&
!source.Contains(".State.CurrentDocking()", StringComparison.Ordinal) &&
@ -7283,12 +7283,10 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
"public AetheriaRuntimePlayerSettingsDocument LatestPlayer()",
"public Task<AetheriaRuntimeVerseHostSettingsDocument> LatestVerseHostAsync()",
"public AetheriaRuntimeVerseHostSettingsDocument LatestVerseHost()",
"public Task<CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument>> ReactiveZoneAsync(",
"public CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument> ReactiveZone(",
"public Task<CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument>> ReactiveEntityAsync(",
"public CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument> ReactiveEntity(",
"public Task<CultMeshReactiveDocument<AetheriaRuntimeCurrentDockingDocument>> ReactiveDockingAsync(",
"public CultMeshReactiveDocument<AetheriaRuntimeCurrentDockingDocument> ReactiveDocking(",
"public Task<TDocument> LatestAsync<TDocument>()",
"public TDocument Latest<TDocument>()",
"public Task<CultMeshReactiveDocument<TDocument>> ReactiveAsync<TDocument>(",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
"public CultMeshDocumentHandle<TDocument> Document<TDocument>(int entityOrZoneIndex)",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>("
};
@ -7405,7 +7403,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
"CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument> _currentEntity",
"ResolveClient().State.Reactive<AetheriaRuntimeCatalogSnapshot>()",
"ResolveClient().State.Reactive<AetheriaRuntimePlayerSettingsDocument>()",
"ResolveClient().State.Current.ReactiveEntity()",
"ResolveClient().State.Reactive<AetheriaRuntimeCurrentEntityDocument>()",
"_catalog?.Dispose()",
"_playerSettings?.Dispose()",
"_currentEntity?.Dispose()",
@ -7755,7 +7753,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
"CultMeshReactiveDocument<AetheriaRuntimeZoneDetailsDocument> _zoneDetails",
".Reactive<AetheriaRuntimeSectorMapDocument>()",
".Current",
".ReactiveZone()",
".Reactive<AetheriaRuntimeCurrentZoneDocument>()",
".Reactive<AetheriaRuntimeZoneDetailsDocument>(zoneIndex)",
"_sectorMap?.Dispose()",
"_currentZone?.Dispose()",
@ -7785,7 +7783,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
"SectorRenderer",
"AetheriaRuntimeCurrentZoneDocument",
"_currentZone",
".ReactiveZone()",
".Reactive<AetheriaRuntimeCurrentZoneDocument>()",
"AetheriaRuntimeCurrentZoneSession",
".ObserveZone()");
RequireReactiveTypedDocumentAccess(
@ -7906,9 +7904,8 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root)
{
"public AetheriaRuntimeSectorMapDocument LatestSectorMap()",
"public AetheriaRuntimeZoneContactsDocument LatestZoneContacts()",
"public AetheriaRuntimeCurrentZoneDocument LatestZone()",
"public CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument> ReactiveZone(",
"public AetheriaRuntimeCurrentEntityDocument LatestEntity()",
"public TDocument Latest<TDocument>()",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
"public CultMeshDocumentHandle<TDocument> Document<TDocument>(AetheriaRuntimeRtsViewportBounds viewport)",
"public TDocument Latest<TDocument>(AetheriaRuntimeRtsViewportBounds viewport)",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
@ -8267,6 +8264,36 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
string.Join(", ", survivingDetailConvenienceWrappers));
}
var currentState = clientState.Split(
"public sealed class AetheriaClientCurrentState",
StringSplitOptions.None).Last().Split(
"public sealed class AetheriaClientSettingsState",
StringSplitOptions.None)[0];
var forbiddenCurrentConvenienceWrappers = new[]
{
"LatestZone(",
"LatestZoneAsync(",
"ReactiveZone(",
"ReactiveZoneAsync(",
"LatestEntity(",
"LatestEntityAsync(",
"ReactiveEntity(",
"ReactiveEntityAsync(",
"LatestDocking(",
"LatestDockingAsync(",
"ReactiveDocking(",
"ReactiveDockingAsync("
};
var survivingCurrentConvenienceWrappers = forbiddenCurrentConvenienceWrappers
.Where(symbol => currentState.Contains(symbol, StringComparison.Ordinal))
.ToArray();
if (survivingCurrentConvenienceWrappers.Length > 0)
{
throw new InvalidOperationException(
"AetheriaClientCurrentState must use top-level generic document access instead of named latest/reactive wrappers: " +
string.Join(", ", survivingCurrentConvenienceWrappers));
}
var observedDaemonState = File.ReadAllText(observedDaemonStatePath);
if (!observedDaemonState.Contains("public static bool TryCreateCurrent(", StringComparison.Ordinal) ||
!observedDaemonState.Contains("new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal))
@ -12909,8 +12936,8 @@ static void RequireMainMenuContinueRunState(string root)
"public sealed class AetheriaUnityObservedDockingIndex",
"AetheriaRuntimeObservedDockingState",
"var state = _resolveClient()?.State;",
"state.Current.LatestEntity()",
"state.Current.LatestDocking()",
"state.Latest<AetheriaRuntimeCurrentEntityDocument>()",
"state.Latest<AetheriaRuntimeCurrentDockingDocument>()",
"state.LatestStationRefit()",
"public bool IsEntityUndocked(Entity entity)",
"public bool TryResolveDockingBay(",
@ -12935,8 +12962,8 @@ static void RequireMainMenuContinueRunState(string root)
"CultMeshReactiveDocument<AetheriaRuntimeStationRefitDocument> _stationRefit",
"State?.CurrentDocking()",
".State.CurrentDocking()",
"state.ReactiveEntity()",
"state.ReactiveDocking()",
"ReactiveEntity()",
"ReactiveDocking()",
"state.Reactive<AetheriaRuntimeStationRefitDocument>()"
};
var observedDockingHits = forbiddenObservedDockingSymbols

View file

@ -171,8 +171,8 @@ public sealed class AetheriaUnityObservedDockingIndex : IDisposable
if (state == null)
return false;
var currentEntity = state.Current.LatestEntity();
var currentDocking = state.Current.LatestDocking();
var currentEntity = state.Latest<AetheriaRuntimeCurrentEntityDocument>();
var currentDocking = state.Latest<AetheriaRuntimeCurrentDockingDocument>();
var stationRefit = state.LatestStationRefit();
if (currentDocking == null || stationRefit == null)
return false;

View file

@ -164,7 +164,7 @@ public class DaemonRuntimeDocumentTests
.GetAwaiter()
.GetResult();
var currentEntity = client.State.Current.LatestEntity();
var currentEntity = client.State.Latest<AetheriaRuntimeCurrentEntityDocument>();
var latestFrame = client.State.LatestDaemonFrame();
var catalog = client.State.LatestCatalog();
var playerSettings = client.State.Settings.LatestPlayer();
@ -213,9 +213,9 @@ public class DaemonRuntimeDocumentTests
using var playerSettingsReactive = client.State.Reactive<AetheriaRuntimePlayerSettingsDocument>();
using var verseHostSettingsReactive = client.State.Reactive<AetheriaRuntimeVerseHostSettingsDocument>();
using var zoneContactsReactive = client.State.Reactive<AetheriaRuntimeZoneContactsDocument>();
using var currentZoneReactive = client.State.Current.ReactiveZone();
using var currentEntityDocumentReactive = client.State.Current.ReactiveEntity();
using var currentDockingReactive = client.State.Current.ReactiveDocking();
using var currentZoneReactive = client.State.Reactive<AetheriaRuntimeCurrentZoneDocument>();
using var currentEntityDocumentReactive = client.State.Reactive<AetheriaRuntimeCurrentEntityDocument>();
using var currentDockingReactive = client.State.Reactive<AetheriaRuntimeCurrentDockingDocument>();
using var stationRefitReactive = client.State.Reactive<AetheriaRuntimeStationRefitDocument>();
using var zoneDetailsReactive = client.State.Details.Reactive<AetheriaRuntimeZoneDetailsDocument>(0);
using var selectedObjectReactive = client.State.Details.Reactive<AetheriaRuntimeSelectedObjectDocument>(0);
@ -226,7 +226,7 @@ public class DaemonRuntimeDocumentTests
using var renderSplatsViewportReactive = client.State.Viewports.Reactive<AetheriaRuntimeRenderSplatsViewportDocument>(viewport);
using var playerHudCatalog = client.State.Reactive<AetheriaRuntimeCatalogSnapshot>();
using var playerHudSettings = client.State.Reactive<AetheriaRuntimePlayerSettingsDocument>();
using var playerHudEntity = client.State.Current.ReactiveEntity();
using var playerHudEntity = client.State.Reactive<AetheriaRuntimeCurrentEntityDocument>();
var gameSurface = client.State.LatestGameSurface();
var gameTuiSurface = client.State.LatestGameTuiSurface();
var editorSurface = client.State.LatestEditorSurface();
@ -404,7 +404,7 @@ public class DaemonRuntimeDocumentTests
.GetResult();
var aetheria = verse.Aetheria();
var currentEntity = aetheria.Current.LatestEntity();
var currentEntity = aetheria.Latest<AetheriaRuntimeCurrentEntityDocument>();
var latestFrameDocument = verse.Document<AetheriaRuntimeDaemonFrameDocument>(
AetheriaRuntimeVerseRecordKeys.DaemonFrameLatest);
using var latestFrameReactive = latestFrameDocument.Reactive();

View file

@ -359,7 +359,7 @@ public class SchematicDisplay : MonoBehaviour
{
try
{
_currentEntity = ResolveClient().State.Current.ReactiveEntity();
_currentEntity = ResolveClient().State.Reactive<AetheriaRuntimeCurrentEntityDocument>();
}
catch (Exception ex)
{

View file

@ -966,8 +966,7 @@ public class InventoryMenu : MonoBehaviour
{
_currentEntity = ResolveClient()
.State
.Current
.ReactiveEntity();
.Reactive<AetheriaRuntimeCurrentEntityDocument>();
}
catch (Exception ex)
{

View file

@ -1505,8 +1505,7 @@ private void Update()
{
_currentEntity = ResolveClient()
.State
.Current
.ReactiveEntity();
.Reactive<AetheriaRuntimeCurrentEntityDocument>();
}
catch (Exception ex)
{

View file

@ -175,7 +175,7 @@ public class MenuPanel : MonoBehaviour
docking = null;
try
{
docking = ResolveClient().State.Current.LatestDocking();
docking = ResolveClient().State.Latest<AetheriaRuntimeCurrentDockingDocument>();
return docking != null;
}
catch (Exception ex)

View file

@ -323,8 +323,7 @@ public class SectorRenderer : MonoBehaviour, IBeginDragHandler, IDragHandler, IS
{
_currentZone ??= ResolveClient()
.State
.Current
.ReactiveZone();
.Reactive<AetheriaRuntimeCurrentZoneDocument>();
}
catch (Exception ex)
{

View file

@ -537,7 +537,7 @@ public class TradeMenu : MonoBehaviour
docking = null;
try
{
docking = ResolveClient().State.Current.LatestDocking();
docking = ResolveClient().State.Latest<AetheriaRuntimeCurrentDockingDocument>();
return docking != null;
}
catch (Exception ex)

View file

@ -234,8 +234,8 @@ namespace GameCult.Aetheria.State.Verse
public AetheriaRuntimeObservedDockingState? CurrentDocking(
CultMeshReactiveDocumentOptions? options = null)
{
using var entity = Current.ReactiveEntity(options);
using var docking = Current.ReactiveDocking(options);
using var entity = Reactive<AetheriaRuntimeCurrentEntityDocument>(options);
using var docking = Reactive<AetheriaRuntimeCurrentDockingDocument>(options);
using var refit = Reactive<AetheriaRuntimeStationRefitDocument>(options);
return AetheriaRuntimeObservedDockingState.TryCreateCurrent(entity, docking, refit, out var current)
? current
@ -715,72 +715,6 @@ namespace GameCult.Aetheria.State.Verse
public CultMeshDocumentHandle<AetheriaRuntimeCurrentDockingDocument> Docking { get; }
public Task<AetheriaRuntimeCurrentZoneDocument> LatestZoneAsync()
{
return Zone.LatestAsync();
}
public AetheriaRuntimeCurrentZoneDocument LatestZone()
{
return LatestZoneAsync().ConfigureAwait(false).GetAwaiter().GetResult();
}
public Task<CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument>> ReactiveZoneAsync(
CultMeshReactiveDocumentOptions? options = null)
{
return Zone.ReactiveAsync(options);
}
public CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument> ReactiveZone(
CultMeshReactiveDocumentOptions? options = null)
{
return Zone.Reactive(options);
}
public Task<AetheriaRuntimeCurrentEntityDocument> LatestEntityAsync()
{
return Entity.LatestAsync();
}
public AetheriaRuntimeCurrentEntityDocument LatestEntity()
{
return LatestEntityAsync().ConfigureAwait(false).GetAwaiter().GetResult();
}
public Task<CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument>> ReactiveEntityAsync(
CultMeshReactiveDocumentOptions? options = null)
{
return Entity.ReactiveAsync(options);
}
public CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument> ReactiveEntity(
CultMeshReactiveDocumentOptions? options = null)
{
return Entity.Reactive(options);
}
public Task<AetheriaRuntimeCurrentDockingDocument> LatestDockingAsync()
{
return Docking.LatestAsync();
}
public AetheriaRuntimeCurrentDockingDocument LatestDocking()
{
return LatestDockingAsync().ConfigureAwait(false).GetAwaiter().GetResult();
}
public Task<CultMeshReactiveDocument<AetheriaRuntimeCurrentDockingDocument>> ReactiveDockingAsync(
CultMeshReactiveDocumentOptions? options = null)
{
return Docking.ReactiveAsync(options);
}
public CultMeshReactiveDocument<AetheriaRuntimeCurrentDockingDocument> ReactiveDocking(
CultMeshReactiveDocumentOptions? options = null)
{
return Docking.Reactive(options);
}
}
public sealed class AetheriaClientSettingsState