This commit is contained in:
2026-10-23 19:23:03 +02:00
parent 8c8240de63
commit 19428550ca
90 changed files with 6912 additions and 0 deletions
@@ -0,0 +1,46 @@
import type { InputAction } from '../net/types';
/** Actions bound to keys. Movement actions auto-repeat while held (see useKeyboardInput). */
export type BoundAction = 'MoveLeft' | 'MoveRight' | 'SoftDrop' | 'RotateCw' | 'RotateCcw' | 'HardDrop' | 'Hold' | 'UseItem';
/**
* Key bindings by KeyboardEvent.code (physical key position, independent of layout).
* KeyY is bound too so that "Z" works on QWERTZ keyboards.
*/
export const keyBindings: Record<BoundAction, string[]> = {
MoveLeft: ['ArrowLeft', 'KeyA'],
MoveRight: ['ArrowRight', 'KeyD'],
SoftDrop: ['ArrowDown', 'KeyS'],
RotateCw: ['ArrowUp', 'KeyW', 'KeyX', 'KeyE'],
RotateCcw: ['KeyZ', 'KeyY', 'KeyQ', 'ControlLeft', 'ControlRight'],
HardDrop: ['Space'],
Hold: ['KeyC', 'ShiftLeft', 'ShiftRight'],
UseItem: ['KeyF'],
};
/** Number row keys select the item target: 1 = yourself, 2..9 = opponents in display order. */
export const targetKeys = ['Digit1', 'Digit2', 'Digit3', 'Digit4', 'Digit5', 'Digit6', 'Digit7', 'Digit8', 'Digit9'];
/** Delayed auto shift and auto repeat rate in milliseconds. */
export const DAS_MS = 167;
export const ARR_MS = 33;
/** Human readable list for the help panel (plain ASCII, the pixel font has no arrow glyphs). */
export const controlsHelp: { keys: string; action: string }[] = [
{ keys: 'LEFT RIGHT / A D', action: 'Move' },
{ keys: 'DOWN / S', action: 'Soft drop' },
{ keys: 'SPACE', action: 'Hard drop' },
{ keys: 'UP / W / X', action: 'Rotate right' },
{ keys: 'Z / Q / CTRL', action: 'Rotate left' },
{ keys: 'C / SHIFT', action: 'Hold' },
{ keys: '1 - 9', action: 'Select target (1 = you)' },
{ keys: 'F', action: 'Use item on target' },
];
export const simpleActions: Partial<Record<BoundAction, InputAction>> = {
RotateCw: 'RotateCw',
RotateCcw: 'RotateCcw',
HardDrop: 'HardDrop',
Hold: 'Hold',
UseItem: 'UseItem',
};