Route player HUD through managed sessions
This commit is contained in:
parent
2c68dcc59e
commit
df65dbcb70
3 changed files with 59 additions and 12 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -320,13 +320,13 @@ namespace GameCult.Aetheria.State.Verse
|
|||
public AetheriaRuntimePlayerHudSession ObservePlayerHud(
|
||||
CultMeshReactiveDocumentOptions? options = null)
|
||||
{
|
||||
var catalog = ReactiveCatalog(options);
|
||||
CultMeshReactiveDocument<AetheriaRuntimePlayerSettingsDocument>? playerSettings = null;
|
||||
CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument>? currentEntity = null;
|
||||
var catalog = ObserveCatalog(options);
|
||||
AetheriaRuntimePlayerSettingsSession? playerSettings = null;
|
||||
AetheriaRuntimeCurrentEntitySession? currentEntity = null;
|
||||
try
|
||||
{
|
||||
playerSettings = Settings.ReactivePlayer(options);
|
||||
currentEntity = Current.ReactiveEntity(options);
|
||||
playerSettings = Settings.ObservePlayer(options);
|
||||
currentEntity = Current.ObserveEntity(options);
|
||||
return new AetheriaRuntimePlayerHudSession(catalog, playerSettings, currentEntity);
|
||||
}
|
||||
catch
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using GameCult.Mesh;
|
||||
|
||||
#nullable enable
|
||||
|
||||
|
|
@ -7,14 +6,14 @@ namespace GameCult.Aetheria.State.Verse
|
|||
{
|
||||
public sealed class AetheriaRuntimePlayerHudSession : IDisposable
|
||||
{
|
||||
private readonly CultMeshReactiveDocument<AetheriaRuntimeCatalogSnapshot> _catalog;
|
||||
private readonly CultMeshReactiveDocument<AetheriaRuntimePlayerSettingsDocument> _playerSettings;
|
||||
private readonly CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument> _currentEntity;
|
||||
private readonly AetheriaRuntimeCatalogSession _catalog;
|
||||
private readonly AetheriaRuntimePlayerSettingsSession _playerSettings;
|
||||
private readonly AetheriaRuntimeCurrentEntitySession _currentEntity;
|
||||
|
||||
public AetheriaRuntimePlayerHudSession(
|
||||
CultMeshReactiveDocument<AetheriaRuntimeCatalogSnapshot> catalog,
|
||||
CultMeshReactiveDocument<AetheriaRuntimePlayerSettingsDocument> playerSettings,
|
||||
CultMeshReactiveDocument<AetheriaRuntimeCurrentEntityDocument> currentEntity)
|
||||
AetheriaRuntimeCatalogSession catalog,
|
||||
AetheriaRuntimePlayerSettingsSession playerSettings,
|
||||
AetheriaRuntimeCurrentEntitySession currentEntity)
|
||||
{
|
||||
_catalog = catalog ?? throw new ArgumentNullException(nameof(catalog));
|
||||
_playerSettings = playerSettings ?? throw new ArgumentNullException(nameof(playerSettings));
|
||||
|
|
|
|||
Loading…
Reference in a new issue