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:
parent
5c955c36ec
commit
f9736ece6c
26 changed files with 675 additions and 68 deletions
|
|
@ -564,6 +564,7 @@ public sealed class LiveEntityLifecycleStressTests
|
|||
TypedScripts.Add(type);
|
||||
return true;
|
||||
},
|
||||
new LiveEntityPartArrayEnterWorldPort(_ => { }),
|
||||
liveCenter: () => (1, 1));
|
||||
Assert.True(Presentation.OnLiveEntityReady(Guid));
|
||||
|
||||
|
|
|
|||
|
|
@ -452,6 +452,7 @@ public sealed class LiveEntityPresentationControllerTests
|
|||
runtime,
|
||||
shadows,
|
||||
(_, _, _) => true,
|
||||
new LiveEntityPartArrayEnterWorldPort(_ => { }),
|
||||
liveCenter: () => (2, 2));
|
||||
|
||||
Assert.True(controller.OnLiveEntityReady(Fixture.Guid));
|
||||
|
|
@ -560,6 +561,7 @@ public sealed class LiveEntityPresentationControllerTests
|
|||
runtime,
|
||||
shadows,
|
||||
(_, _, _) => true,
|
||||
new LiveEntityPartArrayEnterWorldPort(_ => { }),
|
||||
liveCenter: () => (2, 2));
|
||||
Assert.True(controller.OnLiveEntityReady(Fixture.Guid));
|
||||
Assert.Equal(1, shadows.SuspendedRegistrationCount);
|
||||
|
|
@ -696,6 +698,13 @@ public sealed class LiveEntityPresentationControllerTests
|
|||
OnTypedPlay?.Invoke(type);
|
||||
return true;
|
||||
},
|
||||
new LiveEntityPartArrayEnterWorldPort(localEntityId =>
|
||||
{
|
||||
PartArrayEnterWorld.Add(localEntityId);
|
||||
PartArrayShadowCounts.Add(Shadows.TotalRegistered);
|
||||
PresentationOrder.Add("part-array");
|
||||
onPartArrayEnterWorld?.Invoke(localEntityId);
|
||||
}),
|
||||
(parent, noDraw) =>
|
||||
{
|
||||
ChildNoDraw.Add((parent, noDraw));
|
||||
|
|
@ -707,13 +716,7 @@ public sealed class LiveEntityPresentationControllerTests
|
|||
PresentationOrder.Add("target");
|
||||
},
|
||||
() => (1, 1),
|
||||
handlePartArrayEnterWorld: localEntityId =>
|
||||
{
|
||||
PartArrayEnterWorld.Add(localEntityId);
|
||||
PartArrayShadowCounts.Add(Shadows.TotalRegistered);
|
||||
PresentationOrder.Add("part-array");
|
||||
onPartArrayEnterWorld?.Invoke(localEntityId);
|
||||
});
|
||||
onShadowRestored: null);
|
||||
}
|
||||
|
||||
internal static WorldSession.EntitySpawn Spawn(
|
||||
|
|
|
|||
|
|
@ -214,7 +214,8 @@ public sealed class LiveEntityProjectionWithdrawalControllerTests
|
|||
Presentation = new LiveEntityPresentationController(
|
||||
Live,
|
||||
Physics.ShadowObjects,
|
||||
(_, _, _) => false);
|
||||
(_, _, _) => false,
|
||||
new LiveEntityPartArrayEnterWorldPort(_ => { }));
|
||||
lifecycle.Bind(new DelegateLiveEntityRuntimeComponentLifecycle(
|
||||
record => Controller.LeaveWorld(record, Guid)));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue