Add jump, sprint, and crouch actions to player input bindings

This commit is contained in:
2026-04-11 18:22:38 +02:00
parent f53c602f97
commit c233134522

View File

@@ -57,6 +57,16 @@ export const PLAYER_START_MOVEMENT_ACTIONS = [
] as const; ] as const;
export type PlayerStartMovementAction = export type PlayerStartMovementAction =
(typeof PLAYER_START_MOVEMENT_ACTIONS)[number]; (typeof PLAYER_START_MOVEMENT_ACTIONS)[number];
export const PLAYER_START_LOCOMOTION_ACTIONS = [
"jump",
"sprint",
"crouch"
] as const;
export type PlayerStartLocomotionAction =
(typeof PLAYER_START_LOCOMOTION_ACTIONS)[number];
export type PlayerStartInputAction =
| PlayerStartMovementAction
| PlayerStartLocomotionAction;
export type PlayerStartKeyboardBindingCode = string; export type PlayerStartKeyboardBindingCode = string;
export const PLAYER_START_GAMEPAD_BINDINGS = [ export const PLAYER_START_GAMEPAD_BINDINGS = [
"leftStickUp", "leftStickUp",
@@ -70,6 +80,20 @@ export const PLAYER_START_GAMEPAD_BINDINGS = [
] as const; ] as const;
export type PlayerStartGamepadBinding = export type PlayerStartGamepadBinding =
(typeof PLAYER_START_GAMEPAD_BINDINGS)[number]; (typeof PLAYER_START_GAMEPAD_BINDINGS)[number];
export const PLAYER_START_GAMEPAD_ACTION_BINDINGS = [
"buttonSouth",
"buttonEast",
"buttonWest",
"buttonNorth",
"leftShoulder",
"rightShoulder",
"leftTrigger",
"rightTrigger",
"leftStickPress",
"rightStickPress"
] as const;
export type PlayerStartGamepadActionBinding =
(typeof PLAYER_START_GAMEPAD_ACTION_BINDINGS)[number];
export const PLAYER_START_GAMEPAD_CAMERA_LOOK_BINDINGS = [ export const PLAYER_START_GAMEPAD_CAMERA_LOOK_BINDINGS = [
"rightStick" "rightStick"
] as const; ] as const;
@@ -81,6 +105,9 @@ export interface PlayerStartKeyboardBindings {
moveBackward: PlayerStartKeyboardBindingCode; moveBackward: PlayerStartKeyboardBindingCode;
moveLeft: PlayerStartKeyboardBindingCode; moveLeft: PlayerStartKeyboardBindingCode;
moveRight: PlayerStartKeyboardBindingCode; moveRight: PlayerStartKeyboardBindingCode;
jump: PlayerStartKeyboardBindingCode;
sprint: PlayerStartKeyboardBindingCode;
crouch: PlayerStartKeyboardBindingCode;
} }
export interface PlayerStartGamepadBindings { export interface PlayerStartGamepadBindings {
@@ -88,6 +115,9 @@ export interface PlayerStartGamepadBindings {
moveBackward: PlayerStartGamepadBinding; moveBackward: PlayerStartGamepadBinding;
moveLeft: PlayerStartGamepadBinding; moveLeft: PlayerStartGamepadBinding;
moveRight: PlayerStartGamepadBinding; moveRight: PlayerStartGamepadBinding;
jump: PlayerStartGamepadActionBinding;
sprint: PlayerStartGamepadActionBinding;
crouch: PlayerStartGamepadActionBinding;
cameraLook: PlayerStartGamepadCameraLookBinding; cameraLook: PlayerStartGamepadCameraLookBinding;
} }
@@ -245,7 +275,10 @@ export const DEFAULT_PLAYER_START_KEYBOARD_BINDINGS: PlayerStartKeyboardBindings
moveForward: "KeyW", moveForward: "KeyW",
moveBackward: "KeyS", moveBackward: "KeyS",
moveLeft: "KeyA", moveLeft: "KeyA",
moveRight: "KeyD" moveRight: "KeyD",
jump: "Space",
sprint: "ShiftLeft",
crouch: "ControlLeft"
}; };
export const DEFAULT_PLAYER_START_GAMEPAD_BINDINGS: PlayerStartGamepadBindings = export const DEFAULT_PLAYER_START_GAMEPAD_BINDINGS: PlayerStartGamepadBindings =
{ {
@@ -253,6 +286,9 @@ export const DEFAULT_PLAYER_START_GAMEPAD_BINDINGS: PlayerStartGamepadBindings =
moveBackward: "leftStickDown", moveBackward: "leftStickDown",
moveLeft: "leftStickLeft", moveLeft: "leftStickLeft",
moveRight: "leftStickRight", moveRight: "leftStickRight",
jump: "buttonSouth",
sprint: "leftStickPress",
crouch: "buttonEast",
cameraLook: "rightStick" cameraLook: "rightStick"
}; };
export const DEFAULT_SCENE_ENTRY_YAW_DEGREES = 0; export const DEFAULT_SCENE_ENTRY_YAW_DEGREES = 0;
@@ -364,6 +400,14 @@ export function isPlayerStartGamepadBinding(
); );
} }
export function isPlayerStartGamepadActionBinding(
value: string
): value is PlayerStartGamepadActionBinding {
return PLAYER_START_GAMEPAD_ACTION_BINDINGS.includes(
value as PlayerStartGamepadActionBinding
);
}
export function isPlayerStartGamepadCameraLookBinding( export function isPlayerStartGamepadCameraLookBinding(
value: string value: string
): value is PlayerStartGamepadCameraLookBinding { ): value is PlayerStartGamepadCameraLookBinding {
@@ -410,13 +454,19 @@ export function clonePlayerStartInputBindings(
moveForward: bindings.keyboard.moveForward, moveForward: bindings.keyboard.moveForward,
moveBackward: bindings.keyboard.moveBackward, moveBackward: bindings.keyboard.moveBackward,
moveLeft: bindings.keyboard.moveLeft, moveLeft: bindings.keyboard.moveLeft,
moveRight: bindings.keyboard.moveRight moveRight: bindings.keyboard.moveRight,
jump: bindings.keyboard.jump,
sprint: bindings.keyboard.sprint,
crouch: bindings.keyboard.crouch
}, },
gamepad: { gamepad: {
moveForward: bindings.gamepad.moveForward, moveForward: bindings.gamepad.moveForward,
moveBackward: bindings.gamepad.moveBackward, moveBackward: bindings.gamepad.moveBackward,
moveLeft: bindings.gamepad.moveLeft, moveLeft: bindings.gamepad.moveLeft,
moveRight: bindings.gamepad.moveRight, moveRight: bindings.gamepad.moveRight,
jump: bindings.gamepad.jump,
sprint: bindings.gamepad.sprint,
crouch: bindings.gamepad.crouch,
cameraLook: bindings.gamepad.cameraLook cameraLook: bindings.gamepad.cameraLook
} }
}; };
@@ -437,7 +487,15 @@ export function createPlayerStartInputBindings(
DEFAULT_PLAYER_START_KEYBOARD_BINDINGS.moveLeft, DEFAULT_PLAYER_START_KEYBOARD_BINDINGS.moveLeft,
moveRight: moveRight:
overrides.keyboard?.moveRight ?? overrides.keyboard?.moveRight ??
DEFAULT_PLAYER_START_KEYBOARD_BINDINGS.moveRight DEFAULT_PLAYER_START_KEYBOARD_BINDINGS.moveRight,
jump:
overrides.keyboard?.jump ?? DEFAULT_PLAYER_START_KEYBOARD_BINDINGS.jump,
sprint:
overrides.keyboard?.sprint ??
DEFAULT_PLAYER_START_KEYBOARD_BINDINGS.sprint,
crouch:
overrides.keyboard?.crouch ??
DEFAULT_PLAYER_START_KEYBOARD_BINDINGS.crouch
}; };
const gamepad: PlayerStartGamepadBindings = { const gamepad: PlayerStartGamepadBindings = {
moveForward: moveForward:
@@ -452,6 +510,14 @@ export function createPlayerStartInputBindings(
moveRight: moveRight:
overrides.gamepad?.moveRight ?? overrides.gamepad?.moveRight ??
DEFAULT_PLAYER_START_GAMEPAD_BINDINGS.moveRight, DEFAULT_PLAYER_START_GAMEPAD_BINDINGS.moveRight,
jump:
overrides.gamepad?.jump ?? DEFAULT_PLAYER_START_GAMEPAD_BINDINGS.jump,
sprint:
overrides.gamepad?.sprint ??
DEFAULT_PLAYER_START_GAMEPAD_BINDINGS.sprint,
crouch:
overrides.gamepad?.crouch ??
DEFAULT_PLAYER_START_GAMEPAD_BINDINGS.crouch,
cameraLook: cameraLook:
overrides.gamepad?.cameraLook ?? overrides.gamepad?.cameraLook ??
DEFAULT_PLAYER_START_GAMEPAD_BINDINGS.cameraLook DEFAULT_PLAYER_START_GAMEPAD_BINDINGS.cameraLook
@@ -473,6 +539,18 @@ export function createPlayerStartInputBindings(
throw new Error("Player Start move-right keyboard binding must be supported."); throw new Error("Player Start move-right keyboard binding must be supported.");
} }
if (!isPlayerStartKeyboardBindingCode(keyboard.jump)) {
throw new Error("Player Start jump keyboard binding must be supported.");
}
if (!isPlayerStartKeyboardBindingCode(keyboard.sprint)) {
throw new Error("Player Start sprint keyboard binding must be supported.");
}
if (!isPlayerStartKeyboardBindingCode(keyboard.crouch)) {
throw new Error("Player Start crouch keyboard binding must be supported.");
}
if (!isPlayerStartGamepadBinding(gamepad.moveForward)) { if (!isPlayerStartGamepadBinding(gamepad.moveForward)) {
throw new Error("Player Start move-forward gamepad binding must be supported."); throw new Error("Player Start move-forward gamepad binding must be supported.");
} }
@@ -489,6 +567,18 @@ export function createPlayerStartInputBindings(
throw new Error("Player Start move-right gamepad binding must be supported."); throw new Error("Player Start move-right gamepad binding must be supported.");
} }
if (!isPlayerStartGamepadActionBinding(gamepad.jump)) {
throw new Error("Player Start jump gamepad binding must be supported.");
}
if (!isPlayerStartGamepadActionBinding(gamepad.sprint)) {
throw new Error("Player Start sprint gamepad binding must be supported.");
}
if (!isPlayerStartGamepadActionBinding(gamepad.crouch)) {
throw new Error("Player Start crouch gamepad binding must be supported.");
}
if (!isPlayerStartGamepadCameraLookBinding(gamepad.cameraLook)) { if (!isPlayerStartGamepadCameraLookBinding(gamepad.cameraLook)) {
throw new Error("Player Start camera-look gamepad binding must be supported."); throw new Error("Player Start camera-look gamepad binding must be supported.");
} }
@@ -562,10 +652,16 @@ export function arePlayerStartInputBindingsEqual(
left.keyboard.moveBackward === right.keyboard.moveBackward && left.keyboard.moveBackward === right.keyboard.moveBackward &&
left.keyboard.moveLeft === right.keyboard.moveLeft && left.keyboard.moveLeft === right.keyboard.moveLeft &&
left.keyboard.moveRight === right.keyboard.moveRight && left.keyboard.moveRight === right.keyboard.moveRight &&
left.keyboard.jump === right.keyboard.jump &&
left.keyboard.sprint === right.keyboard.sprint &&
left.keyboard.crouch === right.keyboard.crouch &&
left.gamepad.moveForward === right.gamepad.moveForward && left.gamepad.moveForward === right.gamepad.moveForward &&
left.gamepad.moveBackward === right.gamepad.moveBackward && left.gamepad.moveBackward === right.gamepad.moveBackward &&
left.gamepad.moveLeft === right.gamepad.moveLeft && left.gamepad.moveLeft === right.gamepad.moveLeft &&
left.gamepad.moveRight === right.gamepad.moveRight && left.gamepad.moveRight === right.gamepad.moveRight &&
left.gamepad.jump === right.gamepad.jump &&
left.gamepad.sprint === right.gamepad.sprint &&
left.gamepad.crouch === right.gamepad.crouch &&
left.gamepad.cameraLook === right.gamepad.cameraLook left.gamepad.cameraLook === right.gamepad.cameraLook
); );
} }