fix(runtime): restore interaction completion ownership

Preserve prepublication local motion completion, require the PartArray enter-world lifecycle port, and balance deferred Use busy ownership across dispatch and cancellation. Reconcile the completed GameWindow connected gates and add regression coverage.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-23 05:51:51 +02:00
parent 5c955c36ec
commit f9736ece6c
26 changed files with 675 additions and 68 deletions

View file

@ -13,17 +13,17 @@ internal sealed class LiveAnimationPresentationContext
{
private readonly LiveEntityRuntime _runtime;
private readonly ILocalPlayerIdentitySource _localPlayer;
private readonly ILocalPlayerControllerSource _playerController;
private readonly ILocalPlayerMotionSource _playerMotion;
public LiveAnimationPresentationContext(
LiveEntityRuntime runtime,
ILocalPlayerIdentitySource localPlayer,
ILocalPlayerControllerSource playerController)
ILocalPlayerMotionSource playerMotion)
{
_runtime = runtime ?? throw new ArgumentNullException(nameof(runtime));
_localPlayer = localPlayer ?? throw new ArgumentNullException(nameof(localPlayer));
_playerController = playerController
?? throw new ArgumentNullException(nameof(playerController));
_playerMotion = playerMotion
?? throw new ArgumentNullException(nameof(playerMotion));
}
public uint LocalPlayerGuid => _localPlayer.ServerGuid;
@ -38,7 +38,7 @@ internal sealed class LiveAnimationPresentationContext
}
if (record.ServerGuid == _localPlayer.ServerGuid)
return _playerController.Controller?.Motion;
return _playerMotion.Motion;
return record.RemoteMotionRuntime is RemoteMotion remote
? remote.Motion
: null;