refactor(input): extract the gameplay frame

This commit is contained in:
Erik 2026-07-22 01:38:40 +02:00
parent 0bc9fda9de
commit c557038353
24 changed files with 2433 additions and 559 deletions

View file

@ -18,7 +18,7 @@ public sealed class RetailLocalPlayerFrameControllerTests
var local = new RetailLocalPlayerFrameController(
canPresentPlayer: () => true,
getController: () => controller,
captureInput: () => new MovementInput(Forward: true),
movementInput: Input(() => new MovementInput(Forward: true)),
resolveLocalEntityId: () => 7u,
handleTargeting: () => calls.Add("target"),
isHidden: () => false,
@ -82,7 +82,7 @@ public sealed class RetailLocalPlayerFrameControllerTests
var local = new RetailLocalPlayerFrameController(
canPresentPlayer: () => controller is not null,
getController: () => controller,
captureInput: () => new MovementInput(Forward: true),
movementInput: Input(() => new MovementInput(Forward: true)),
resolveLocalEntityId: () => 9u,
handleTargeting: () => { },
isHidden: () => false,
@ -112,7 +112,7 @@ public sealed class RetailLocalPlayerFrameControllerTests
var local = new RetailLocalPlayerFrameController(
canPresentPlayer: () => true,
getController: () => controller,
captureInput: () => new MovementInput(),
movementInput: Input(() => new MovementInput()),
resolveLocalEntityId: () => 7u,
handleTargeting: () => { },
isHidden: () => false,
@ -143,7 +143,7 @@ public sealed class RetailLocalPlayerFrameControllerTests
var local = new RetailLocalPlayerFrameController(
canPresentPlayer: () => true,
getController: () => controller,
captureInput: () => new MovementInput(Forward: true),
movementInput: Input(() => new MovementInput(Forward: true)),
resolveLocalEntityId: () => 7u,
handleTargeting: () => positionSeenByTargetManager = controller.Position,
isHidden: () => false,
@ -169,11 +169,11 @@ public sealed class RetailLocalPlayerFrameControllerTests
var local = new RetailLocalPlayerFrameController(
canPresentPlayer: () => true,
getController: () => controller,
captureInput: () =>
movementInput: Input(() =>
{
inputCaptures++;
return new MovementInput(Forward: true);
},
}),
resolveLocalEntityId: () => 7u,
handleTargeting: () => throw new InvalidOperationException(
"Frozen object advanced its manager tail."),
@ -204,7 +204,7 @@ public sealed class RetailLocalPlayerFrameControllerTests
var local = new RetailLocalPlayerFrameController(
canPresentPlayer: () => true,
getController: () => controller,
captureInput: () => new MovementInput(),
movementInput: Input(() => new MovementInput()),
resolveLocalEntityId: () => 7u,
handleTargeting: () => { },
isHidden: () => true,
@ -231,11 +231,11 @@ public sealed class RetailLocalPlayerFrameControllerTests
var local = new RetailLocalPlayerFrameController(
canPresentPlayer: () => true,
getController: () => controller,
captureInput: () =>
movementInput: Input(() =>
{
inputCaptures++;
return new MovementInput(Forward: true);
},
}),
resolveLocalEntityId: () => 7u,
handleTargeting: () => targeting++,
isHidden: () => false,
@ -293,4 +293,13 @@ public sealed class RetailLocalPlayerFrameControllerTests
Assert.True(clock.IsActive);
return controller;
}
private static IMovementInputSource Input(Func<MovementInput> capture) =>
new TestMovementInputSource(capture);
private sealed class TestMovementInputSource(Func<MovementInput> capture)
: IMovementInputSource
{
public MovementInput Capture() => capture();
}
}