From cfa29a64eaae80d2ff9c82e1f32fb2d194dc4f77 Mon Sep 17 00:00:00 2001 From: Z8MB1E Date: Fri, 4 Sep 2026 01:40:46 -0400 Subject: [PATCH] feat(qualification): add aim trainer restart keybind --- .../frontend/qualification/AimTrainerGame.tsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/components/frontend/qualification/AimTrainerGame.tsx b/src/components/frontend/qualification/AimTrainerGame.tsx index 6d6fe01..9b52b00 100644 --- a/src/components/frontend/qualification/AimTrainerGame.tsx +++ b/src/components/frontend/qualification/AimTrainerGame.tsx @@ -315,6 +315,11 @@ export function AimTrainerGame({ } }, [resetToReady, startGame]); + const handleRestartAction = useCallback(() => { + if (phaseRef.current !== "playing") return; + startGame(); + }, [startGame]); + const handleShot = useCallback( (event: PointerEvent) => { if (event.button !== 0 || phaseRef.current !== "playing") return; @@ -477,6 +482,13 @@ export function AimTrainerGame({ raf = requestAnimationFrame(step); const onKeyDown = (event: KeyboardEvent) => { + if (event.code === "KeyR") { + if (event.repeat || event.ctrlKey || event.metaKey || event.altKey) return; + event.preventDefault(); + event.stopPropagation(); + handleRestartAction(); + return; + } if (event.code !== "Enter" && event.code !== "Space") return; if (event.repeat) return; event.preventDefault(); @@ -502,6 +514,7 @@ export function AimTrainerGame({ config.targetLifetimeMs, difficulty, handlePrimaryAction, + handleRestartAction, setPhaseSafe, ]);