fix(portal): synchronize destination presentation state

This commit is contained in:
Erik 2026-07-16 21:17:13 +02:00
parent 4b1bceefbb
commit e95f55f25b
42 changed files with 2815 additions and 288 deletions

View file

@ -566,9 +566,7 @@ public sealed class AnimationSequencer
if (_core.CurrAnim == null && rootMotionFrame is null)
return BuildIdentityFrame(partCount);
if (dt <= 0f)
return _core.CurrAnim == null
? BuildIdentityFrame(partCount)
: BuildBlendedFrame();
return SampleCurrentPose();
_core.Update(dt, rootMotionFrame);
@ -577,6 +575,19 @@ public sealed class AnimationSequencer
: BuildBlendedFrame();
}
/// <summary>
/// Samples the current sequence frame without advancing animation time or
/// dispatching hooks. This is retail's hidden-object
/// <c>CPhysicsObj::set_frame -&gt; CPartArray::SetFrame -&gt; UpdateParts</c>
/// path: <c>HandleEnterWorld</c> may move the sequence cursor from a completed
/// link to the cyclic tail, and the hidden object must recompose that new pose
/// while PartArray time remains frozen.
/// </summary>
public IReadOnlyList<PartTransform> SampleCurrentPose()
=> _core.CurrAnim == null
? BuildIdentityFrame(_setup.Parts.Count)
: BuildBlendedFrame();
/// <summary>
/// Retrieve and clear the list of hooks that fired since the last call.
/// Empty when no frame boundary was crossed. Safe to call multiple