Add pauseTime input handling and context method for input suspension
This commit is contained in:
@@ -1016,6 +1016,7 @@ export function arePlayerStartInputBindingsEqual(
|
||||
left.keyboard.jump === right.keyboard.jump &&
|
||||
left.keyboard.sprint === right.keyboard.sprint &&
|
||||
left.keyboard.crouch === right.keyboard.crouch &&
|
||||
left.keyboard.pauseTime === right.keyboard.pauseTime &&
|
||||
left.gamepad.moveForward === right.gamepad.moveForward &&
|
||||
left.gamepad.moveBackward === right.gamepad.moveBackward &&
|
||||
left.gamepad.moveLeft === right.gamepad.moveLeft &&
|
||||
@@ -1023,6 +1024,7 @@ export function arePlayerStartInputBindingsEqual(
|
||||
left.gamepad.jump === right.gamepad.jump &&
|
||||
left.gamepad.sprint === right.gamepad.sprint &&
|
||||
left.gamepad.crouch === right.gamepad.crouch &&
|
||||
left.gamepad.pauseTime === right.gamepad.pauseTime &&
|
||||
left.gamepad.cameraLook === right.gamepad.cameraLook
|
||||
);
|
||||
}
|
||||
|
||||
@@ -525,7 +525,10 @@ export class FirstPersonNavigationController implements NavigationController {
|
||||
};
|
||||
|
||||
private handleMouseMove = (event: MouseEvent) => {
|
||||
if (!this.pointerLocked) {
|
||||
if (
|
||||
!this.pointerLocked ||
|
||||
this.context?.isInputSuspended() === true
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -554,6 +557,7 @@ export class FirstPersonNavigationController implements NavigationController {
|
||||
private handlePointerDown = () => {
|
||||
if (
|
||||
this.context === null ||
|
||||
this.context.isInputSuspended() ||
|
||||
document.pointerLockElement === this.context.domElement
|
||||
) {
|
||||
return;
|
||||
|
||||
@@ -144,6 +144,7 @@ export interface RuntimeControllerContext {
|
||||
desiredCameraPosition: Vec3,
|
||||
radius: number
|
||||
): Vec3;
|
||||
isInputSuspended(): boolean;
|
||||
setRuntimeMessage(message: string | null): void;
|
||||
setPlayerControllerTelemetry(
|
||||
telemetry: PlayerControllerTelemetry | null
|
||||
|
||||
@@ -19,6 +19,7 @@ export interface PlayerStartActionInputState
|
||||
jump: number;
|
||||
sprint: number;
|
||||
crouch: number;
|
||||
pauseTime: number;
|
||||
}
|
||||
|
||||
export interface PlayerStartLookInputState {
|
||||
@@ -136,6 +137,8 @@ function readSingleGamepadActionBinding(
|
||||
return readGamepadButtonStrength(gamepad.buttons[2]);
|
||||
case "buttonNorth":
|
||||
return readGamepadButtonStrength(gamepad.buttons[3]);
|
||||
case "buttonMenu":
|
||||
return readGamepadButtonStrength(gamepad.buttons[9]);
|
||||
case "leftShoulder":
|
||||
return readGamepadButtonStrength(gamepad.buttons[4]);
|
||||
case "rightShoulder":
|
||||
@@ -288,13 +291,26 @@ export function resolvePlayerStartActionInputs(
|
||||
crouch: Math.max(
|
||||
pressedKeys.has(bindings.keyboard.crouch) ? 1 : 0,
|
||||
readGamepadActionBindingStrength(gamepads, bindings.gamepad.crouch)
|
||||
),
|
||||
pauseTime: Math.max(
|
||||
pressedKeys.has(bindings.keyboard.pauseTime) ? 1 : 0,
|
||||
readGamepadActionBindingStrength(gamepads, bindings.gamepad.pauseTime)
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
export function resolvePlayerStartPauseInput(
|
||||
pressedKeys: ReadonlySet<string>,
|
||||
bindings: PlayerStartInputBindings,
|
||||
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
|
||||
): number {
|
||||
return resolvePlayerStartActionInputs(pressedKeys, bindings, gamepads)
|
||||
.pauseTime;
|
||||
}
|
||||
|
||||
export function resolvePlayerStartLookInput(
|
||||
bindings: PlayerStartInputBindings,
|
||||
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
|
||||
): PlayerStartLookInputState {
|
||||
return readGamepadCameraLook(gamepads, bindings.gamepad.cameraLook);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user