Route player HUD through managed sessions

This commit is contained in:
Meta Vens 2026-06-28 15:04:31 +01:00
commit df65dbcb70
3 changed files with 59 additions and 12 deletions

View file

@ -7294,6 +7294,12 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
"UI",
"HUD",
"SchematicDisplay.cs"));
var playerHudState = File.ReadAllText(Path.Combine(
root,
"Packages",
"org.gamecult.aetheria.state",
"Runtime",
"AetheriaRuntimePlayerHudState.cs"));
var requiredSchematicDisplaySymbols = new[]
{
"AetheriaRuntimePlayerHudSession _playerHud",
@ -7332,6 +7338,48 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
string.Join(", ", schematicDisplayHits));
}
var requiredPlayerHudSessionSymbols = new[]
{
"private readonly AetheriaRuntimeCatalogSession _catalog;",
"private readonly AetheriaRuntimePlayerSettingsSession _playerSettings;",
"private readonly AetheriaRuntimeCurrentEntitySession _currentEntity;",
"public AetheriaRuntimePlayerHudSession(",
"AetheriaRuntimeCatalogSession catalog",
"AetheriaRuntimePlayerSettingsSession playerSettings",
"AetheriaRuntimeCurrentEntitySession currentEntity",
"public AetheriaRuntimeCatalogSnapshot? Catalog => _catalog.Current;",
"public AetheriaRuntimePlayerSettingsDocument? PlayerSettings => _playerSettings.Current;",
"public AetheriaRuntimeCurrentEntityDocument? CurrentEntity => _currentEntity.Current;"
};
var missingPlayerHudSessionSymbols = requiredPlayerHudSessionSymbols
.Where(symbol => !playerHudState.Contains(symbol, StringComparison.Ordinal))
.ToArray();
if (missingPlayerHudSessionSymbols.Length > 0)
{
throw new InvalidOperationException(
"AetheriaRuntimePlayerHudSession must compose named managed sessions instead of owning raw reactive documents: " +
string.Join(", ", missingPlayerHudSessionSymbols));
}
if (playerHudState.Contains("CultMeshReactiveDocument<", StringComparison.Ordinal) ||
playerHudState.Contains("using GameCult.Mesh;", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"AetheriaRuntimePlayerHudSession reintroduced raw CultMesh reactive document ownership.");
}
if (!clientState.Contains("var catalog = ObserveCatalog(options);", StringComparison.Ordinal) ||
!clientState.Contains("AetheriaRuntimePlayerSettingsSession? playerSettings = null;", StringComparison.Ordinal) ||
!clientState.Contains("AetheriaRuntimeCurrentEntitySession? currentEntity = null;", StringComparison.Ordinal) ||
!clientState.Contains("playerSettings = Settings.ObservePlayer(options);", StringComparison.Ordinal) ||
!clientState.Contains("currentEntity = Current.ObserveEntity(options);", StringComparison.Ordinal) ||
clientState.Contains("playerSettings = Settings.ReactivePlayer(options);", StringComparison.Ordinal) ||
clientState.Contains("currentEntity = Current.ReactiveEntity(options);", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"AetheriaClientState.ObservePlayerHud() must compose named managed sessions instead of raw reactive CultMesh documents.");
}
var volumeCloudRenderer = File.ReadAllText(Path.Combine(
root,
"Assets",