Refactor: Improve type safety and readability across entity and player start logic

This commit is contained in:
2026-04-27 15:54:04 +02:00
parent 1d53f03fec
commit d09c550ffe
4 changed files with 436 additions and 171 deletions

View File

@@ -14,8 +14,7 @@ export interface PlayerStartMovementActionState {
moveRight: number;
}
export interface PlayerStartActionInputState
extends PlayerStartMovementActionState {
export interface PlayerStartActionInputState extends PlayerStartMovementActionState {
jump: number;
sprint: number;
crouch: number;
@@ -38,7 +37,9 @@ function readGamepadButtonStrength(button: GamepadButton | undefined): number {
return 0;
}
return clampUnitInterval(button.pressed ? Math.max(button.value, 1) : button.value);
return clampUnitInterval(
button.pressed ? Math.max(button.value, 1) : button.value
);
}
function readCenteredAxisValue(value: number | undefined): number {
@@ -116,7 +117,11 @@ function readGamepadBindingStrength(
for (let index = 0; index < gamepads.length; index += 1) {
const gamepad = gamepads[index];
if (gamepad === null || gamepad === undefined || gamepad.connected === false) {
if (
gamepad === null ||
gamepad === undefined ||
gamepad.connected === false
) {
continue;
}
@@ -169,11 +174,18 @@ function readGamepadActionBindingStrength(
for (let index = 0; index < gamepads.length; index += 1) {
const gamepad = gamepads[index];
if (gamepad === null || gamepad === undefined || gamepad.connected === false) {
if (
gamepad === null ||
gamepad === undefined ||
gamepad.connected === false
) {
continue;
}
strength = Math.max(strength, readSingleGamepadActionBinding(gamepad, binding));
strength = Math.max(
strength,
readSingleGamepadActionBinding(gamepad, binding)
);
}
return strength;
@@ -209,7 +221,11 @@ function readGamepadCameraLook(
for (let index = 0; index < gamepads.length; index += 1) {
const gamepad = gamepads[index];
if (gamepad === null || gamepad === undefined || gamepad.connected === false) {
if (
gamepad === null ||
gamepad === undefined ||
gamepad.connected === false
) {
continue;
}
@@ -244,7 +260,10 @@ export function getAvailableGamepads(): ArrayLike<Gamepad | null> | undefined {
export function resolvePlayerStartMovementActions(
pressedKeys: ReadonlySet<string>,
bindings: PlayerStartInputBindings,
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
gamepads:
| ArrayLike<Gamepad | null>
| null
| undefined = getAvailableGamepads()
): PlayerStartMovementActionState {
const actionInputs = resolvePlayerStartActionInputs(
pressedKeys,
@@ -263,7 +282,10 @@ export function resolvePlayerStartMovementActions(
export function resolvePlayerStartActionInputs(
pressedKeys: ReadonlySet<string>,
bindings: PlayerStartInputBindings,
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
gamepads:
| ArrayLike<Gamepad | null>
| null
| undefined = getAvailableGamepads()
): PlayerStartActionInputState {
return {
moveForward: Math.max(
@@ -312,7 +334,10 @@ export function resolvePlayerStartActionInputs(
export function resolvePlayerStartPauseInput(
pressedKeys: ReadonlySet<string>,
bindings: PlayerStartInputBindings,
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
gamepads:
| ArrayLike<Gamepad | null>
| null
| undefined = getAvailableGamepads()
): number {
return resolvePlayerStartActionInputs(pressedKeys, bindings, gamepads)
.pauseTime;
@@ -321,7 +346,10 @@ export function resolvePlayerStartPauseInput(
export function resolvePlayerStartInteractInput(
pressedKeys: ReadonlySet<string>,
bindings: PlayerStartInputBindings,
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
gamepads:
| ArrayLike<Gamepad | null>
| null
| undefined = getAvailableGamepads()
): number {
return resolvePlayerStartActionInputs(pressedKeys, bindings, gamepads)
.interact;
@@ -330,21 +358,30 @@ export function resolvePlayerStartInteractInput(
export function resolvePlayerStartClearTargetInput(
pressedKeys: ReadonlySet<string>,
bindings: PlayerStartInputBindings,
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
gamepads:
| ArrayLike<Gamepad | null>
| null
| undefined = getAvailableGamepads()
): number {
return resolvePlayerStartActionInputs(pressedKeys, bindings, gamepads)
.clearTarget;
}
export function resolveDefaultTargetCycleInput(
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
gamepads:
| ArrayLike<Gamepad | null>
| null
| undefined = getAvailableGamepads()
): number {
return readGamepadActionBindingStrength(gamepads, "rightStickPress");
}
export function resolvePlayerStartLookInput(
bindings: PlayerStartInputBindings,
gamepads: ArrayLike<Gamepad | null> | null | undefined = getAvailableGamepads()
gamepads:
| ArrayLike<Gamepad | null>
| null
| undefined = getAvailableGamepads()
): PlayerStartLookInputState {
return readGamepadCameraLook(gamepads, bindings.gamepad.cameraLook);
}

View File

@@ -5662,17 +5662,13 @@ export class RuntimeHost {
z: this.cameraForward.z
}
: {
x:
Math.sin(
(this.currentPlayerControllerTelemetry.yawDegrees * Math.PI) /
180
),
x: Math.sin(
(this.currentPlayerControllerTelemetry.yawDegrees * Math.PI) / 180
),
y: 0,
z:
Math.cos(
(this.currentPlayerControllerTelemetry.yawDegrees * Math.PI) /
180
)
z: Math.cos(
(this.currentPlayerControllerTelemetry.yawDegrees * Math.PI) / 180
)
};
return this.interactionSystem.resolveClickInteractionPrompt(