Narrow observed daemon state to render view
This commit is contained in:
parent
00869a7acc
commit
4487f894bf
9 changed files with 90 additions and 85 deletions
|
|
@ -3300,7 +3300,7 @@ static void RequireEveRuntimeBootstrap(string root)
|
|||
string.Join(", ", missingDaemonSurfaceCommandSymbols));
|
||||
}
|
||||
|
||||
if (daemonSurfaceCommands.Contains("AetheriaRuntimeStateReader.TryReadObservedDaemonState", StringComparison.Ordinal) ||
|
||||
if (daemonSurfaceCommands.Contains("AetheriaRuntimeStateReader.TryReadDaemonRenderView", StringComparison.Ordinal) ||
|
||||
daemonSurfaceCommands.Contains("client.State.ReactiveDaemonFrame()", StringComparison.Ordinal) ||
|
||||
daemonSurfaceCommands.Contains("TryReactiveDaemonSoaView(client)", StringComparison.Ordinal) ||
|
||||
daemonSurfaceCommands.Contains("client.State.ReactiveZoneRender()", StringComparison.Ordinal) ||
|
||||
|
|
@ -8133,7 +8133,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
|
|||
"Packages",
|
||||
"org.gamecult.aetheria.state",
|
||||
"Runtime",
|
||||
"AetheriaRuntimeObservedDaemonState.cs");
|
||||
"AetheriaRuntimeDaemonRenderView.cs");
|
||||
var daemonRuntimeDocumentTestsPath = Path.Combine(
|
||||
root,
|
||||
"Assets",
|
||||
|
|
@ -8442,7 +8442,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
|
|||
|
||||
var observedDaemonState = File.ReadAllText(observedDaemonStatePath);
|
||||
if (!observedDaemonState.Contains("public static bool TryCreateCurrent(", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal))
|
||||
!observedDaemonState.Contains("new AetheriaRuntimeDaemonRenderView(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Observed daemon state must compose current values from managed typed frame, SoA, and zone-render documents.");
|
||||
|
|
@ -8502,7 +8502,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
|
|||
".State.Starbridge.PlayerSeat(",
|
||||
".State.DockingState.Latest(",
|
||||
".State.DockingState.Reactive(",
|
||||
"AetheriaRuntimeObservedDaemonState.ReadAsync(",
|
||||
"AetheriaRuntimeDaemonRenderView.ReadAsync(",
|
||||
".State.Daemon.LatestFrame.LatestAsync()",
|
||||
".State.Daemon.LatestSoaView.LatestAsync()",
|
||||
".State.Daemon.AuthorityPolicy.LatestAsync()",
|
||||
|
|
@ -12049,7 +12049,7 @@ static void RequireAetheriaRuntimeVerseClientContract(string root)
|
|||
"AetheriaRuntimeVerseClient still exposes daemon observation compatibility helpers; use AetheriaClient managed documents instead.");
|
||||
}
|
||||
|
||||
if (stateRefResolver.Contains("TryReadObservedDaemonState", StringComparison.Ordinal) ||
|
||||
if (stateRefResolver.Contains("TryReadDaemonRenderView", StringComparison.Ordinal) ||
|
||||
stateRefResolver.Contains("TryReadDaemonSoaView(", StringComparison.Ordinal) ||
|
||||
stateRefResolver.Contains("ResolveEveSurfaceStateRef(", StringComparison.Ordinal) ||
|
||||
stateRefResolver.Contains("TryResolveEveSurfaceStateRef(", StringComparison.Ordinal) ||
|
||||
|
|
@ -13141,7 +13141,7 @@ static void RequireMainMenuContinueRunState(string root)
|
|||
{
|
||||
"public sealed class AetheriaUnityObservedFrameApplier",
|
||||
"public bool ApplyLatestZoneRender()",
|
||||
"observer.LastObservedState?.ZoneRender",
|
||||
"observer.LastRenderView?.ZoneRender",
|
||||
"private bool TryRestoreEntityGraphFromZoneRender(",
|
||||
"if (string.IsNullOrWhiteSpace(render.RunId))",
|
||||
"Aetheria zone-render feed does not identify a run id.",
|
||||
|
|
@ -14060,7 +14060,7 @@ static void RequireUnityObserverDoesNotTickLocalSimulation(string root)
|
|||
{
|
||||
"public sealed class AetheriaUnityObservedFrameApplier",
|
||||
"public bool ApplyLatestZoneRender()",
|
||||
"observer.LastObservedState?.ZoneRender",
|
||||
"observer.LastRenderView?.ZoneRender",
|
||||
"private bool TryRestoreEntityGraphFromZoneRender(",
|
||||
"AetheriaRuntimeEntitySnapshotProjector.CreateSnapshots(runId, render.ZoneIndex, render.EntitySnapshots)",
|
||||
".OrderBy(entity => entity.EntityIndex)",
|
||||
|
|
@ -15714,7 +15714,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"Shared runtime state-ref resolver still exposes file-backed entity snapshot reads; use daemon zone-render EntitySnapshots documents.");
|
||||
}
|
||||
|
||||
if (runtimeStateRefResolver.Contains("TryReadObservedDaemonState", StringComparison.Ordinal) ||
|
||||
if (runtimeStateRefResolver.Contains("TryReadDaemonRenderView", StringComparison.Ordinal) ||
|
||||
runtimeStateRefResolver.Contains("TryReadDaemonSoaView(", StringComparison.Ordinal) ||
|
||||
runtimeStateRefResolver.Contains("TryReadDaemonFrame(", StringComparison.Ordinal) ||
|
||||
runtimeStateRefResolver.Contains("ResolveEveSurfaceStateRef(", StringComparison.Ordinal) ||
|
||||
|
|
@ -15885,10 +15885,10 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
var aetheriaClientState = File.Exists(aetheriaClientStatePath)
|
||||
? File.ReadAllText(aetheriaClientStatePath)
|
||||
: throw new InvalidOperationException("Cannot verify daemon state acquisition; AetheriaClientState.cs is missing.");
|
||||
var observedDaemonStatePath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeObservedDaemonState.cs");
|
||||
var observedDaemonStatePath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeDaemonRenderView.cs");
|
||||
var observedDaemonState = File.Exists(observedDaemonStatePath)
|
||||
? File.ReadAllText(observedDaemonStatePath)
|
||||
: throw new InvalidOperationException("Cannot verify daemon state acquisition; AetheriaRuntimeObservedDaemonState.cs is missing.");
|
||||
: throw new InvalidOperationException("Cannot verify daemon state acquisition; AetheriaRuntimeDaemonRenderView.cs is missing.");
|
||||
var daemonRuntimeDocumentTestsPath = Path.Combine(root, "Assets", "Scripts", "Tests", "DaemonRuntimeDocumentTests.cs");
|
||||
var daemonRuntimeDocumentTests = File.Exists(daemonRuntimeDocumentTestsPath)
|
||||
? File.ReadAllText(daemonRuntimeDocumentTestsPath)
|
||||
|
|
@ -16040,15 +16040,15 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
|
||||
if (!observedFrameApplier.Contains("private AetheriaRuntimeZoneRenderDocument _lastZoneRender;", StringComparison.Ordinal) ||
|
||||
!observedFrameApplier.Contains("ApplyLatestZoneRender()", StringComparison.Ordinal) ||
|
||||
!observedFrameApplier.Contains("observer.LastObservedState?.ZoneRender", StringComparison.Ordinal) ||
|
||||
!observedFrameApplier.Contains("observer.LastRenderView?.ZoneRender", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("public AetheriaRuntimeZoneRenderDocument ZoneRender { get; }", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("var currentZoneRender = zoneRender?.Current;", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("new AetheriaRuntimeDaemonRenderView(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("private CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _daemonFrame;", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("private CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> _daemonSoaView;", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("private CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender;", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal))
|
||||
!daemonObserver.Contains("AetheriaRuntimeDaemonRenderView.TryCreateCurrent(", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Observed zone-render state acquisition must sample managed typed zone-render documents directly.");
|
||||
|
|
@ -16122,8 +16122,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
aetheriaClient.Contains("State.CurrentObservedDaemon()", StringComparison.Ordinal) ||
|
||||
aetheriaClient.Contains("State.ReactiveObservedDaemon()", StringComparison.Ordinal) ||
|
||||
aetheriaClient.Contains("Aetheria() => State", StringComparison.Ordinal) ||
|
||||
aetheriaClient.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) ||
|
||||
aetheriaClient.Contains("AetheriaRuntimeObservedDaemonState?", StringComparison.Ordinal) ||
|
||||
aetheriaClient.Contains("AetheriaRuntimeDaemonRenderView.TryCreateCurrent(", StringComparison.Ordinal) ||
|
||||
aetheriaClient.Contains("AetheriaRuntimeDaemonRenderView?", StringComparison.Ordinal) ||
|
||||
aetheriaClient.Contains("observedState.TryCurrent(out var current)", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
|
|
@ -16160,8 +16160,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"AetheriaClientState still exposes generic latest/reactive/watch or schema-string shortcuts instead of direct typed CultMesh document handles.");
|
||||
}
|
||||
|
||||
if (aetheriaClientState.Contains("public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(", StringComparison.Ordinal) ||
|
||||
aetheriaClientState.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender", StringComparison.Ordinal))
|
||||
if (aetheriaClientState.Contains("public AetheriaRuntimeDaemonRenderView? CurrentObservedDaemon(", StringComparison.Ordinal) ||
|
||||
aetheriaClientState.Contains("AetheriaRuntimeDaemonRenderView.TryCreateCurrent(frame, soaView, zoneRender", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"AetheriaClientState must not expose one-shot observed daemon aggregation; command owners should hold managed typed daemon documents.");
|
||||
|
|
@ -16185,11 +16185,11 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
string.Join(", ", missingManagedCommandFrameSymbols));
|
||||
}
|
||||
|
||||
if (!daemonRuntimeDocumentTests.Contains("ManagedStateSamplesCurrentObservedDaemonFromReactiveDocuments()", StringComparison.Ordinal) ||
|
||||
if (!daemonRuntimeDocumentTests.Contains("ManagedStateSamplesCurrentDaemonRenderViewFromReactiveDocuments()", StringComparison.Ordinal) ||
|
||||
!daemonRuntimeDocumentTests.Contains("using var observedFrame = client.State.Document<AetheriaRuntimeDaemonFrameDocument>().Reactive();", StringComparison.Ordinal) ||
|
||||
!daemonRuntimeDocumentTests.Contains("using var observedSoaView = client.State.Document<AetheriaRuntimeDaemonSoaViewDocument>().Reactive();", StringComparison.Ordinal) ||
|
||||
!daemonRuntimeDocumentTests.Contains("using var observedZoneRender = client.State.Document<AetheriaRuntimeZoneRenderDocument>().Reactive();", StringComparison.Ordinal) ||
|
||||
!daemonRuntimeDocumentTests.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) ||
|
||||
!daemonRuntimeDocumentTests.Contains("AetheriaRuntimeDaemonRenderView.TryCreateCurrent(", StringComparison.Ordinal) ||
|
||||
daemonRuntimeDocumentTests.Contains("client.State.CurrentObservedDaemon()", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
|
|
@ -16205,7 +16205,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender",
|
||||
"var currentFrame = frame?.Current;",
|
||||
"var currentZoneRender = zoneRender?.Current;",
|
||||
"new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)"
|
||||
"new AetheriaRuntimeDaemonRenderView(currentFrame, currentSoaView, currentZoneRender)"
|
||||
};
|
||||
var missingObservedDaemonStateSymbols = requiredObservedDaemonStateSymbols
|
||||
.Where(symbol => !observedDaemonState.Contains(symbol, StringComparison.Ordinal))
|
||||
|
|
@ -16289,14 +16289,14 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"SoaViewStore.GetViewPath",
|
||||
"state.LatestFrame.ReactiveAsync",
|
||||
"state.LatestSoaView.ReactiveAsync",
|
||||
"public static async Task<AetheriaRuntimeObservedDaemonState?> ReadAsync(",
|
||||
"public static async Task<AetheriaRuntimeDaemonRenderView?> ReadAsync(",
|
||||
"LatestObservedDaemonAsync(",
|
||||
"LatestObservedDaemon()",
|
||||
"public sealed class AetheriaRuntimeReactiveObservedDaemonState",
|
||||
"ReactiveObservedDaemonAsync",
|
||||
"ReactiveObservedDaemon(",
|
||||
"TryCurrent(out AetheriaRuntimeObservedDaemonState? observed)",
|
||||
"return new AetheriaRuntimeObservedDaemonState(frame, soaView);",
|
||||
"TryCurrent(out AetheriaRuntimeDaemonRenderView? observed)",
|
||||
"return new AetheriaRuntimeDaemonRenderView(frame, soaView);",
|
||||
"AetheriaRuntimeRtsProjection.ProjectZoneRender(Frame)",
|
||||
"zoneRender = null"
|
||||
};
|
||||
|
|
@ -16327,7 +16327,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"public async Task<AetheriaRuntimePlayerSettingsSnapshot?> PlayerSettingsAsync()",
|
||||
"public async Task<AetheriaRuntimeVerseHostSettingsSnapshot?> VerseHostSettingsAsync()",
|
||||
"public async Task<System.Collections.Generic.IReadOnlyList<AetheriaRuntimeLoadoutTemplateSnapshot>> LoadoutTemplatesAsync()",
|
||||
"public async Task<AetheriaRuntimeObservedDaemonState?> ObserveAsync()",
|
||||
"public async Task<AetheriaRuntimeDaemonRenderView?> ObserveAsync()",
|
||||
"public async Task<AetheriaRuntimeLoadoutTemplateCommit> LoadoutTemplateAsync(",
|
||||
"scenario ??= await _verse.GetStarbridgeScenarioAsync()",
|
||||
"session ??= await _verse.GetStarbridgeSessionAsync()",
|
||||
|
|
@ -16406,28 +16406,28 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
if (!daemonObserver.Contains("AetheriaClient", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory)", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonState", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("AetheriaRuntimeDaemonRenderView", 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.Document<AetheriaRuntimeDaemonFrameDocument>().Reactive();", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("_daemonSoaView ??= TryReactive<AetheriaRuntimeDaemonSoaViewDocument>(state);", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("_zoneRender ??= state.Document<AetheriaRuntimeZoneRenderDocument>().Reactive();", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("DisposeObservedDaemonDocuments()", StringComparison.Ordinal))
|
||||
!daemonObserver.Contains("AetheriaRuntimeDaemonRenderView.TryCreateCurrent(", StringComparison.Ordinal) ||
|
||||
!daemonObserver.Contains("DisposeRenderViewDocuments()", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"AetheriaDaemonObserver must sample observed daemon state through direct managed reactive daemon documents.");
|
||||
"AetheriaDaemonObserver must sample daemon render views through direct managed reactive daemon documents.");
|
||||
}
|
||||
|
||||
if (daemonObserver.Contains("AetheriaRuntimeStateReader.TryReadObservedDaemonState", StringComparison.Ordinal) ||
|
||||
if (daemonObserver.Contains("AetheriaRuntimeStateReader.TryReadDaemonRenderView", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains(".ReadAsync(client.State)", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains("AetheriaRuntimeReactiveObservedDaemonState", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains(".ReactiveObservedDaemon()", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains("reactive.TryCurrent(out var observed)", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains("AetheriaRuntimeObservedDaemonSession", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains(".ObserveDaemon()", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains("return new AetheriaRuntimeObservedDaemonState(frame, soaView, zoneRender);", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains("return new AetheriaRuntimeDaemonRenderView(frame, soaView, zoneRender);", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains("DisposeObservedDaemonSession()", StringComparison.Ordinal) ||
|
||||
daemonObserver.Contains("DisposeReactiveObservedDaemonDocuments()", StringComparison.Ordinal))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ public class ActionGameManager : MonoBehaviour
|
|||
SetCurrentEntity = entity => CurrentEntity = entity,
|
||||
GetViewDirection = () => _viewDirection,
|
||||
SetViewDirection = direction => _viewDirection = direction,
|
||||
ResolveZoneRender = () => ResolveDaemonObserver()?.LastObservedState?.ZoneRender,
|
||||
ResolveZoneRender = () => ResolveDaemonObserver()?.LastRenderView?.ZoneRender,
|
||||
ApplyActionBarBindings = _ => _actionBarPresentation?.ApplyLocalBindings(),
|
||||
EnablePlayerInput = EnablePlayerInput,
|
||||
DisablePlayerInput = DisablePlayerInput,
|
||||
|
|
|
|||
|
|
@ -25,21 +25,21 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
private CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> _daemonSoaView;
|
||||
private CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender;
|
||||
|
||||
public AetheriaRuntimeObservedDaemonState LastObservedState { get; private set; }
|
||||
public AetheriaRuntimeDaemonRenderView LastRenderView { get; private set; }
|
||||
public AetheriaRuntimeDaemonObservationResult LastObservation { get; private set; }
|
||||
public long LastFrameId => _cursor.LastFrameId;
|
||||
public long LastSoaGeneration => _cursor.LastSoaGeneration;
|
||||
public bool HasAuthoritativeState => LastObservedState != null && LastObservedState.IsAuthoritative;
|
||||
public bool HasSoaView => LastObservedState != null && LastObservedState.HasSoaView;
|
||||
public bool HasAuthoritativeState => LastRenderView != null && LastRenderView.IsAuthoritative;
|
||||
public bool HasSoaView => LastRenderView != null && LastRenderView.HasSoaView;
|
||||
public AetheriaRuntimeDaemonSoaViewIndex LastSoaIndex =>
|
||||
LastObservedState?.SoaIndex ?? AetheriaRuntimeDaemonSoaViewIndex.Empty;
|
||||
LastRenderView?.SoaIndex ?? AetheriaRuntimeDaemonSoaViewIndex.Empty;
|
||||
public AetheriaDaemonSoaMemoryMap LastSoaMemoryMap => _soaMemoryMap;
|
||||
public AetheriaDaemonRenderNativeView LastRenderNativeView => _renderNativeView;
|
||||
public bool HasRenderNativeView => _renderNativeView.IsCreated;
|
||||
public AetheriaClient Client => ResolveClient();
|
||||
public AetheriaControl Control => Client.Control;
|
||||
|
||||
public event Action<AetheriaRuntimeObservedDaemonState, AetheriaRuntimeDaemonObservationResult> ObservedDaemonStateChanged;
|
||||
public event Action<AetheriaRuntimeDaemonRenderView, AetheriaRuntimeDaemonObservationResult> DaemonRenderViewChanged;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
|
|
@ -54,7 +54,7 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
|
||||
public bool Poll()
|
||||
{
|
||||
var observed = ReadObservedDaemonState();
|
||||
var observed = ReadDaemonRenderView();
|
||||
if (observed == null)
|
||||
{
|
||||
LastObservation = _cursor.Observe(null);
|
||||
|
|
@ -62,7 +62,7 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
}
|
||||
|
||||
var result = _cursor.Observe(observed);
|
||||
LastObservedState = observed;
|
||||
LastRenderView = observed;
|
||||
LastObservation = result;
|
||||
|
||||
if (result.SoaViewChanged)
|
||||
|
|
@ -72,7 +72,7 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
|
||||
if (result.Changed)
|
||||
{
|
||||
ObservedDaemonStateChanged?.Invoke(observed, result);
|
||||
DaemonRenderViewChanged?.Invoke(observed, result);
|
||||
if (logChanges)
|
||||
{
|
||||
Debug.Log(
|
||||
|
|
@ -87,24 +87,24 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
public void ResetObservation()
|
||||
{
|
||||
_cursor.Reset();
|
||||
DisposeObservedDaemonDocuments();
|
||||
DisposeRenderViewDocuments();
|
||||
DisposeSoaMemoryMap();
|
||||
LastObservedState = null;
|
||||
LastRenderView = null;
|
||||
LastObservation = null;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
DisposeObservedDaemonDocuments();
|
||||
DisposeRenderViewDocuments();
|
||||
DisposeSoaMemoryMap();
|
||||
}
|
||||
|
||||
private AetheriaRuntimeObservedDaemonState ReadObservedDaemonState()
|
||||
private AetheriaRuntimeDaemonRenderView ReadDaemonRenderView()
|
||||
{
|
||||
try
|
||||
{
|
||||
EnsureObservedDaemonDocuments();
|
||||
return AetheriaRuntimeObservedDaemonState.TryCreateCurrent(
|
||||
EnsureRenderViewDocuments();
|
||||
return AetheriaRuntimeDaemonRenderView.TryCreateCurrent(
|
||||
_daemonFrame,
|
||||
_daemonSoaView,
|
||||
_zoneRender,
|
||||
|
|
@ -118,7 +118,7 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
}
|
||||
}
|
||||
|
||||
private void EnsureObservedDaemonDocuments()
|
||||
private void EnsureRenderViewDocuments()
|
||||
{
|
||||
if (_daemonFrame != null && _daemonSoaView != null && _zoneRender != null)
|
||||
{
|
||||
|
|
@ -162,7 +162,7 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
return AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot, clientId);
|
||||
}
|
||||
|
||||
private void RemapSoaView(AetheriaRuntimeObservedDaemonState observed)
|
||||
private void RemapSoaView(AetheriaRuntimeDaemonRenderView observed)
|
||||
{
|
||||
DisposeSoaMemoryMap();
|
||||
if (observed == null || !observed.HasSoaView)
|
||||
|
|
@ -198,7 +198,7 @@ public sealed class AetheriaDaemonObserver : MonoBehaviour
|
|||
_soaMemoryMap = null;
|
||||
}
|
||||
|
||||
private void DisposeObservedDaemonDocuments()
|
||||
private void DisposeRenderViewDocuments()
|
||||
{
|
||||
_daemonFrame?.Dispose();
|
||||
_daemonFrame = null;
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public sealed class AetheriaUnityObservedFrameApplier
|
|||
return false;
|
||||
}
|
||||
|
||||
var render = observer.LastObservedState?.ZoneRender;
|
||||
var render = observer.LastRenderView?.ZoneRender;
|
||||
if (render == null)
|
||||
{
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ public class DaemonRuntimeDocumentTests
|
|||
using var catalogReactive = client.State.Document<AetheriaRuntimeCatalogSnapshot>().Reactive();
|
||||
using var daemonFrameReactive = client.State.Document<AetheriaRuntimeDaemonFrameDocument>().Reactive();
|
||||
using var daemonSoaViewReactive = client.State.Document<AetheriaRuntimeDaemonSoaViewDocument>().Reactive();
|
||||
Assert.IsTrue(AetheriaRuntimeObservedDaemonState.TryCreateCurrent(
|
||||
Assert.IsTrue(AetheriaRuntimeDaemonRenderView.TryCreateCurrent(
|
||||
daemonFrameReactive,
|
||||
daemonSoaViewReactive,
|
||||
zoneRenderReactive,
|
||||
|
|
@ -2151,11 +2151,11 @@ public class DaemonRuntimeDocumentTests
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void ObservedDaemonStateReadsManagedFrameAndSoaDocuments()
|
||||
public void DaemonRenderViewReadsManagedFrameAndSoaDocuments()
|
||||
{
|
||||
var statePath = Path.Combine(
|
||||
Path.GetTempPath(),
|
||||
"aetheria-observed-daemon-state-tests",
|
||||
"aetheria-daemon-render-view-tests",
|
||||
Path.GetRandomFileName(),
|
||||
"state.cc");
|
||||
var frame = AetheriaRuntimeDaemonFrameDocument.Create(
|
||||
|
|
@ -2211,7 +2211,7 @@ public class DaemonRuntimeDocumentTests
|
|||
using var observedFrame = client.State.Document<AetheriaRuntimeDaemonFrameDocument>().Reactive();
|
||||
using var observedSoaView = client.State.Document<AetheriaRuntimeDaemonSoaViewDocument>().Reactive();
|
||||
using var observedZoneRender = client.State.Document<AetheriaRuntimeZoneRenderDocument>().Reactive();
|
||||
Assert.IsTrue(AetheriaRuntimeObservedDaemonState.TryCreateCurrent(
|
||||
Assert.IsTrue(AetheriaRuntimeDaemonRenderView.TryCreateCurrent(
|
||||
observedFrame,
|
||||
observedSoaView,
|
||||
observedZoneRender,
|
||||
|
|
@ -2232,7 +2232,7 @@ public class DaemonRuntimeDocumentTests
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void ManagedStateSamplesCurrentObservedDaemonFromReactiveDocuments()
|
||||
public void ManagedStateSamplesCurrentDaemonRenderViewFromReactiveDocuments()
|
||||
{
|
||||
var statePath = Path.Combine(
|
||||
Path.GetTempPath(),
|
||||
|
|
@ -2269,7 +2269,7 @@ public class DaemonRuntimeDocumentTests
|
|||
using var observedFrame = client.State.Document<AetheriaRuntimeDaemonFrameDocument>().Reactive();
|
||||
using var observedSoaView = client.State.Document<AetheriaRuntimeDaemonSoaViewDocument>().Reactive();
|
||||
using var observedZoneRender = client.State.Document<AetheriaRuntimeZoneRenderDocument>().Reactive();
|
||||
var observed = AetheriaRuntimeObservedDaemonState.TryCreateCurrent(
|
||||
var observed = AetheriaRuntimeDaemonRenderView.TryCreateCurrent(
|
||||
observedFrame,
|
||||
observedSoaView,
|
||||
observedZoneRender,
|
||||
|
|
@ -2287,11 +2287,11 @@ public class DaemonRuntimeDocumentTests
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void ObservedDaemonStateReadsManagedFrameWithoutSoaDocument()
|
||||
public void DaemonRenderViewReadsManagedFrameWithoutSoaDocument()
|
||||
{
|
||||
var statePath = Path.Combine(
|
||||
Path.GetTempPath(),
|
||||
"aetheria-observed-daemon-frame-only-tests",
|
||||
"aetheria-daemon-render-view-frame-only-tests",
|
||||
Path.GetRandomFileName(),
|
||||
"state.cc");
|
||||
var frame = AetheriaRuntimeDaemonFrameDocument.Create(
|
||||
|
|
@ -2316,7 +2316,7 @@ public class DaemonRuntimeDocumentTests
|
|||
using var observedFrame = client.State.Document<AetheriaRuntimeDaemonFrameDocument>().Reactive();
|
||||
using var observedSoaView = client.State.Document<AetheriaRuntimeDaemonSoaViewDocument>().Reactive();
|
||||
using var observedZoneRender = client.State.Document<AetheriaRuntimeZoneRenderDocument>().Reactive();
|
||||
Assert.IsTrue(AetheriaRuntimeObservedDaemonState.TryCreateCurrent(
|
||||
Assert.IsTrue(AetheriaRuntimeDaemonRenderView.TryCreateCurrent(
|
||||
observedFrame,
|
||||
observedSoaView,
|
||||
observedZoneRender,
|
||||
|
|
@ -2339,12 +2339,12 @@ public class DaemonRuntimeDocumentTests
|
|||
public void ObservationCursorTracksFrameAndSoaGenerationChanges()
|
||||
{
|
||||
var cursor = new AetheriaRuntimeDaemonObservationCursor();
|
||||
var observed = ObservedState(frameId: 10, soaGeneration: 20);
|
||||
var observed = RenderView(frameId: 10, soaGeneration: 20);
|
||||
|
||||
var first = cursor.Observe(observed);
|
||||
var second = cursor.Observe(observed);
|
||||
var third = cursor.Observe(ObservedState(frameId: 11, soaGeneration: 20));
|
||||
var fourth = cursor.Observe(ObservedState(frameId: 11, soaGeneration: 21));
|
||||
var third = cursor.Observe(RenderView(frameId: 11, soaGeneration: 20));
|
||||
var fourth = cursor.Observe(RenderView(frameId: 11, soaGeneration: 21));
|
||||
|
||||
Assert.IsTrue(first.Observed);
|
||||
Assert.IsTrue(first.FrameChanged);
|
||||
|
|
@ -2365,7 +2365,7 @@ public class DaemonRuntimeDocumentTests
|
|||
{
|
||||
var cursor = new AetheriaRuntimeDaemonObservationCursor();
|
||||
|
||||
cursor.Observe(ObservedState(frameId: 12, soaGeneration: 22));
|
||||
cursor.Observe(RenderView(frameId: 12, soaGeneration: 22));
|
||||
cursor.Reset();
|
||||
var missing = cursor.Observe(null);
|
||||
|
||||
|
|
@ -2376,19 +2376,19 @@ public class DaemonRuntimeDocumentTests
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void CommandClientSendsCommandAgainstObservedDaemonFrame()
|
||||
public void CommandClientSendsCommandAgainstDaemonFrameDocument()
|
||||
{
|
||||
var statePath = Path.Combine(
|
||||
Path.GetTempPath(),
|
||||
"aetheria-daemon-command-client-tests",
|
||||
Path.GetRandomFileName(),
|
||||
"state.cc");
|
||||
var observed = ObservedState(frameId: 33, soaGeneration: 44);
|
||||
observed.Frame.SessionId = "session-command-client";
|
||||
observed.Frame.Run.CurrentEntityKey = "entity:player";
|
||||
var frame = DaemonFrame(frameId: 33);
|
||||
frame.SessionId = "session-command-client";
|
||||
frame.Run.CurrentEntityKey = "entity:player";
|
||||
var client = new AetheriaRuntimeDaemonOperationClient(statePath, "unity-test", "unobserved-session");
|
||||
|
||||
var envelope = client.FireWeaponGroup(observed, 2);
|
||||
var envelope = client.FireWeaponGroup(frame, 2);
|
||||
|
||||
Assert.AreEqual(AetheriaRuntimeDaemonCommandKinds.FireWeaponGroup, envelope.Kind);
|
||||
Assert.AreEqual("unity-test", envelope.ClientId);
|
||||
|
|
@ -2406,10 +2406,10 @@ public class DaemonRuntimeDocumentTests
|
|||
"aetheria-daemon-command-client-tests",
|
||||
Path.GetRandomFileName(),
|
||||
"state.cc");
|
||||
var observed = ObservedState(frameId: 34, soaGeneration: 45);
|
||||
var frame = DaemonFrame(frameId: 34);
|
||||
var client = new AetheriaRuntimeDaemonOperationClient(statePath, "", "session-default-client");
|
||||
|
||||
var envelope = client.SensorPing(observed);
|
||||
var envelope = client.SensorPing(frame);
|
||||
|
||||
Assert.AreEqual(AetheriaRuntimeDaemonOperationClient.DefaultClientId, envelope.ClientId);
|
||||
Assert.AreEqual(AetheriaRuntimeDaemonCommandKinds.SensorPing, envelope.Kind);
|
||||
|
|
@ -4058,7 +4058,7 @@ public class DaemonRuntimeDocumentTests
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void CommandClientCanSendWithoutObservedState()
|
||||
public void CommandClientCanSendWithoutRenderView()
|
||||
{
|
||||
var statePath = Path.Combine(
|
||||
Path.GetTempPath(),
|
||||
|
|
@ -4271,15 +4271,9 @@ public class DaemonRuntimeDocumentTests
|
|||
return null;
|
||||
}
|
||||
|
||||
private static AetheriaRuntimeObservedDaemonState ObservedState(long frameId, long soaGeneration)
|
||||
private static AetheriaRuntimeDaemonRenderView RenderView(long frameId, long soaGeneration)
|
||||
{
|
||||
var frame = AetheriaRuntimeDaemonFrameDocument.Create(
|
||||
new AetheriaRuntimeRunCheckpointCommit { RunId = "cursor-run" },
|
||||
"daemon",
|
||||
"session",
|
||||
frameId,
|
||||
0,
|
||||
0.02);
|
||||
var frame = DaemonFrame(frameId);
|
||||
var soaView = AetheriaRuntimeDaemonSoaViewDocument.Create(
|
||||
"daemon",
|
||||
"session",
|
||||
|
|
@ -4293,12 +4287,23 @@ public class DaemonRuntimeDocumentTests
|
|||
FrameId = frame.FrameId
|
||||
};
|
||||
|
||||
return new AetheriaRuntimeObservedDaemonState(
|
||||
return new AetheriaRuntimeDaemonRenderView(
|
||||
frame,
|
||||
soaView,
|
||||
zoneRender);
|
||||
}
|
||||
|
||||
private static AetheriaRuntimeDaemonFrameDocument DaemonFrame(long frameId)
|
||||
{
|
||||
return AetheriaRuntimeDaemonFrameDocument.Create(
|
||||
new AetheriaRuntimeRunCheckpointCommit { RunId = "cursor-run" },
|
||||
"daemon",
|
||||
"session",
|
||||
frameId,
|
||||
0,
|
||||
0.02);
|
||||
}
|
||||
|
||||
private static void PublishLatestFrameThroughVerseClient(
|
||||
string statePath,
|
||||
AetheriaRuntimeDaemonFrameDocument frame)
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@
|
|||
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.4.2f1\Editor\Data\Tools\BuildPipeline\Unity.SourceGenerators\Unity.UIToolkit.SourceGenerator.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeObservedDaemonState.cs" />
|
||||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeAssemblyInfo.cs" />
|
||||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeEquippedItemDetailsSurfaceBuilder.cs" />
|
||||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeLoadoutSnapshotProjector.cs" />
|
||||
|
|
@ -71,6 +70,7 @@
|
|||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeStateBoot.cs" />
|
||||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeVerseHostCommands.cs" />
|
||||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonSurfaceCommands.cs" />
|
||||
<Compile Include="Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonRenderView.cs" />
|
||||
<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" />
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
public string LastDaemonId { get; private set; } = "";
|
||||
public string LastSessionId { get; private set; } = "";
|
||||
|
||||
public AetheriaRuntimeDaemonObservationResult Observe(AetheriaRuntimeObservedDaemonState? observed)
|
||||
public AetheriaRuntimeDaemonObservationResult Observe(AetheriaRuntimeDaemonRenderView? observed)
|
||||
{
|
||||
if (observed == null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ using GameCult.Mesh;
|
|||
|
||||
namespace GameCult.Aetheria.State.Verse
|
||||
{
|
||||
public sealed class AetheriaRuntimeObservedDaemonState
|
||||
public sealed class AetheriaRuntimeDaemonRenderView
|
||||
{
|
||||
public AetheriaRuntimeObservedDaemonState(
|
||||
public AetheriaRuntimeDaemonRenderView(
|
||||
AetheriaRuntimeDaemonFrameDocument frame,
|
||||
AetheriaRuntimeDaemonSoaViewDocument? soaView,
|
||||
AetheriaRuntimeZoneRenderDocument zoneRender)
|
||||
|
|
@ -30,7 +30,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> frame,
|
||||
CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView,
|
||||
CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender,
|
||||
out AetheriaRuntimeObservedDaemonState? observed)
|
||||
out AetheriaRuntimeDaemonRenderView? observed)
|
||||
{
|
||||
observed = null;
|
||||
try
|
||||
|
|
@ -47,7 +47,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
currentSoaView = null;
|
||||
}
|
||||
|
||||
observed = new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender);
|
||||
observed = new AetheriaRuntimeDaemonRenderView(currentFrame, currentSoaView, currentZoneRender);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
Loading…
Reference in a new issue