refactor(runtime): own local movement and outbound cadence

Move the canonical local movement controller, body/motion managers, object clock, movement wire data, and MTS/jump/AP sender into AcDream.Runtime. Replace process skill defaults with typed Runtime character options, make graphical and direct commands borrow one autorun owner, retain the construction-time PartArray seam, and include movement in terminal ownership convergence.

Preserve the accepted pre-inbound movement/jump and post-inbound autonomous-position order while moving the exact packet/cadence fixtures into Runtime tests. Add graphical/direct parity, two-instance isolation, teardown, allocation, architecture, and divergence-path coverage.

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Erik 2026-07-26 12:33:53 +02:00
parent 3456dff038
commit aa3f4a60f8
36 changed files with 878 additions and 276 deletions

View file

@ -30,7 +30,7 @@ public sealed class GameplayInputFrameControllerTests
var combat = new FakeCombat(calls);
var controller = new GameplayInputFrameController(
dispatcher,
new DispatcherMovementInputSource(),
new DispatcherMovementInputSource(new RuntimeLocalPlayerMovementState()),
mouseLook,
combat);
@ -45,7 +45,7 @@ public sealed class GameplayInputFrameControllerTests
var calls = new List<string>();
var controller = new GameplayInputFrameController(
dispatcher: null,
new DispatcherMovementInputSource(),
new DispatcherMovementInputSource(new RuntimeLocalPlayerMovementState()),
mouseLook: null,
new FakeCombat(calls));
@ -60,7 +60,7 @@ public sealed class GameplayInputFrameControllerTests
var calls = new List<string>();
var controller = new GameplayInputFrameController(
dispatcher: null,
new DispatcherMovementInputSource(),
new DispatcherMovementInputSource(new RuntimeLocalPlayerMovementState()),
mouseLook: null,
new FakeCombat(calls, consumes: true));
@ -76,7 +76,8 @@ public sealed class GameplayInputFrameControllerTests
public void ResetSessionReleasesMouseLookAndAutorun()
{
var calls = new List<string>();
var movement = new DispatcherMovementInputSource();
var movement = new DispatcherMovementInputSource(
new RuntimeLocalPlayerMovementState());
movement.HandlePressedAction(InputAction.MovementRunLock);
var mouseLook = new FakeMouseLook(calls);
var controller = new GameplayInputFrameController(
@ -98,7 +99,7 @@ public sealed class GameplayInputFrameControllerTests
var mouseLook = new FakeMouseLook(calls, active: true, consumes: true);
var controller = new GameplayInputFrameController(
dispatcher: null,
new DispatcherMovementInputSource(),
new DispatcherMovementInputSource(new RuntimeLocalPlayerMovementState()),
mouseLook,
new FakeCombat(calls));