Use Aetheria state handles for render feeds

This commit is contained in:
Meta Vens 2026-06-27 14:06:30 +01:00
commit 69327bbe19
5 changed files with 35 additions and 8 deletions

View file

@ -325,11 +325,17 @@ Assert-NotContains $actionGameManager "ResolveClient(stateBoot.StateFilePath).Op
Assert-NotContains $actionGameManager "ItemManager = new ItemManager(" "ActionGameManager must not construct ItemManager directly."
Assert-NotContains $actionGameManager "ZoneRenderer.SetDroppedPickupItemProjector(" "ActionGameManager must not configure renderer pickup projection directly."
Assert-NotContains $actionGameManager "ZoneRenderer.BodySettingsCollections = Settings.BodySettingsCollections" "ActionGameManager must not configure renderer body settings directly."
Assert-Contains $observedFrameApplier "ZoneRenderAsync()" "Unity observed frame application must consume the typed zone-render facade."
Assert-Contains $observedFrameApplier ".Aetheria()" "Unity observed frame application must enter state through the semantic Aetheria facade."
Assert-Contains $observedFrameApplier ".ZoneRender" "Unity observed frame application must consume the typed zone-render document handle."
Assert-Contains $observedFrameApplier ".LatestAsync()" "Unity observed frame application must read typed zone-render snapshots."
Assert-NotContains $observedFrameApplier ".ZoneRenderAsync()" "Unity observed frame application must not use the transitional zone-render helper."
Assert-NotContains $observedFrameApplier "ProjectZoneRender(" "Unity observed frame application must not rebuild zone-render feeds from raw frames."
Assert-NotContains $observedFrameApplier "LastObservedState?.Run" "Unity observed frame application must not read the raw observed run for current-zone lookups."
Assert-NotContains $observedFrameApplier "FramePath" "Unity observed frame application should key the presentation cache by typed projection identity, not publication file paths."
Assert-Contains $observedTargetQuery "ZoneContactsAsync()" "Unity target queries must consume the typed zone-contacts facade."
Assert-Contains $observedTargetQuery ".Aetheria()" "Unity target queries must enter state through the semantic Aetheria facade."
Assert-Contains $observedTargetQuery ".ZoneContacts" "Unity target queries must consume the typed zone-contacts document handle."
Assert-Contains $observedTargetQuery ".LatestAsync()" "Unity target queries must read typed zone-contacts snapshots."
Assert-NotContains $observedTargetQuery ".ZoneContactsAsync()" "Unity target queries must not use the transitional zone-contacts helper."
Assert-NotContains $observedTargetQuery "AetheriaRuntimeZoneSnapshotCommit" "Unity target queries must not receive raw zone snapshots."
Assert-NotContains $observedTargetQuery "AetheriaRuntimeDaemonRenderQueries.TryQueryEntityContact" "Unity target queries must not query contacts from raw zone snapshots."
Assert-NotContains $observedTargetQuery "AetheriaRuntimeDaemonRenderQueries.TryQueryEntityTarget" "Unity target queries must not query targets from raw zone snapshots."
@ -645,7 +651,10 @@ Assert-Contains $zoneRenderer "_zoneRenderBodyPoses" "ZoneRenderer must consume
Assert-Contains $zoneRenderer "_zoneRenderAsteroidBeltPoses" "ZoneRenderer must consume asteroid belt poses from the zone-render feed."
Assert-Contains $zoneRenderer "beltPose.InstancePoses" "ZoneRenderer asteroid rendering must consume typed asteroid instance poses from the zone-render feed."
Assert-Contains $zoneRenderer "RestoreDroppedPickupsFromZoneRender" "ZoneRenderer dropped-pickup restore must consume the typed zone-render feed."
Assert-Contains $zoneRenderer "ZoneContactsAsync()" "ZoneRenderer target distance cache must read the typed zone-contacts feed."
Assert-Contains $zoneRenderer ".Aetheria()" "ZoneRenderer target distance cache must enter state through the semantic Aetheria facade."
Assert-Contains $zoneRenderer ".ZoneContacts" "ZoneRenderer target distance cache must read the typed zone-contacts document handle."
Assert-Contains $zoneRenderer ".LatestAsync()" "ZoneRenderer target distance cache must read a typed zone-contacts snapshot."
Assert-NotContains $zoneRenderer ".ZoneContactsAsync()" "ZoneRenderer target distance cache must not use the transitional zone-contacts helper."
Assert-Contains $zoneRenderer "_daemonTargetRowsByEntityIndex" "ZoneRenderer target distance cache must store typed target rows."
Assert-Contains $zoneRenderer "_daemonContactRows" "ZoneRenderer compass and visibility state must cache typed contact rows."
Assert-Contains $zoneRenderer "ObjectsViewportAsync(ToViewportBounds(viewport))" "ZoneRenderer presentation loading must use the typed objects viewport facade."
@ -675,6 +684,9 @@ $actionGameManager = Read-Text "Assets\Scripts\Gameplay\ActionGameManager.cs"
$observedFrameApplier = Read-Text "Assets\Scripts\Gameplay\AetheriaUnityObservedFrameApplier.cs"
$gameplayLoopShell = Read-Text "Assets\Scripts\Gameplay\AetheriaUnityGameplayLoopShell.cs"
Assert-Contains $actionGameManager "ObservedFrameApplier.ApplyLatestZoneRender()" "ActionGameManager must delegate typed zone-render application to the observed frame applier."
Assert-Contains $actionGameManager ".Aetheria()" "ActionGameManager current-entity binding must enter zone-render state through the semantic Aetheria facade."
Assert-Contains $actionGameManager ".ZoneRender" "ActionGameManager current-entity binding must resolve the typed zone-render document handle."
Assert-NotContains $actionGameManager ".ZoneRenderAsync()" "ActionGameManager current-entity binding must not use the transitional zone-render helper."
Assert-Contains $actionGameManager "private AetheriaUnityGameplayLoopShell GameplayLoopShell =>" "ActionGameManager should delegate per-frame Unity presentation/input ticking to the gameplay loop shell."
Assert-Contains $actionGameManager "GameplayLoopShell.Tick(Time.deltaTime, Time.time)" "ActionGameManager Update should only forward time into the gameplay loop shell."
Assert-Contains $actionGameManager "GameplayLoopShell.LateTick()" "ActionGameManager LateUpdate should only forward into the gameplay loop shell."
@ -690,7 +702,7 @@ Assert-NotContains $actionGameManager "_paused" "ActionGameManager must not own
Assert-NotContains $actionGameManager "_time" "ActionGameManager must not keep unused local simulation time."
Assert-Contains $observedFrameApplier "TryRestoreEntityGraphFromZoneRender" "Observed frame applier must restore Unity shell state from the typed zone-render feed."
Assert-Contains $observedFrameApplier "ApplyLatestZoneRender" "Observed frame applier must name the handoff as zone-render application."
Assert-Contains $observedFrameApplier "ZoneRenderAsync()" "Observed frame applier must use the shared zone-render facade at the frame handoff."
Assert-Contains $observedFrameApplier ".ZoneRender" "Observed frame applier must use the shared zone-render document handle at the frame handoff."
Assert-Contains $observedFrameApplier "render.EntityFacades" "Observed frame applier entity restoration must consume the typed zone-render entity facade payload."
Assert-NotContains $observedFrameApplier "Func<Galaxy>" "Observed frame applier must not depend on the whole observed galaxy facade."
Assert-Contains $observedFrameApplier "_resolveObservedZone" "Observed frame applier should name the narrow target-zone resolver explicitly."

View file

@ -65,7 +65,13 @@ public class ActionGameManager : MonoBehaviour
SetCurrentEntity = entity => CurrentEntity = entity,
GetViewDirection = () => _viewDirection,
SetViewDirection = direction => _viewDirection = direction,
ResolveZoneRender = () => ResolveDaemonObserver()?.Client?.ZoneRenderAsync().GetAwaiter().GetResult(),
ResolveZoneRender = () => ResolveDaemonObserver()
?.Client
?.Aetheria()
.ZoneRender
.LatestAsync()
.GetAwaiter()
.GetResult(),
ApplyActionBarBindings = ActionBarBindings.ApplyBindings,
EnablePlayerInput = EnablePlayerInput,
DisablePlayerInput = DisablePlayerInput,

View file

@ -74,7 +74,9 @@ public sealed class AetheriaUnityObservedFrameApplier
try
{
return observer.Client
.ZoneRenderAsync()
.Aetheria()
.ZoneRender
.LatestAsync()
.GetAwaiter()
.GetResult();
}

View file

@ -93,7 +93,12 @@ public sealed class AetheriaUnityObservedTargetQuery
{
try
{
return _resolveClient()?.ZoneContactsAsync().GetAwaiter().GetResult();
return _resolveClient()
?.Aetheria()
.ZoneContacts
.LatestAsync()
.GetAwaiter()
.GetResult();
}
catch
{

View file

@ -923,7 +923,9 @@ public class ZoneRenderer : MonoBehaviour
try
{
var contacts = ResolveClient()
.ZoneContactsAsync()
.Aetheria()
.ZoneContacts
.LatestAsync()
.GetAwaiter()
.GetResult();
foreach (var target in contacts?.Targets ?? Array.Empty<AetheriaRuntimeZoneTargetRow>())