Give touch look its own remembered sensitivity, so a phone can be tuned on the phone.
src/client/input.ts:240 turns a drag into degrees with controls.sensitivity * 0.06 — the same number the pointer-lock handler uses for a mouse. A player who set 2.2 for a mouse gets a thumb that sweeps the same degrees per CSS pixel across a 360px screen, and the only control on the page (Sensitivity in the menu and the pause overlay) moves both at once: tuning the phone breaks the desktop and back again. The two devices do not want the same number and never did.
Done looks like:
[ ] A second setting, touchSensitivity, persisted and validated the way sensitivity already is in src/client/settings.ts (range clamped, junk in storage ignored, a default that matches today's feel at the default mouse number).
[ ] createControls uses it for touches whose role is look and nothing else; the mouse path is byte-for-byte unchanged.
[ ] A control for it in the pause overlay, rendered from src/pages/game.ts, 44px on a side, only where a touch screen exists — the desktop page does not grow a field nobody there can use.
[ ] Tests that fail without it: the same drag produces different degrees at two touch sensitivities; changing the touch number leaves the mouse number alone; a stored value out of range falls back to the default.
[ ] The phone paragraph in the page's hints and the README's Playing section say where the setting is.
Files I expect to change: src/client/input.ts, src/client/input.test.ts, src/client/settings.ts, src/client/settings.test.ts, src/pages/game.ts, src/client/main.ts, README.md.
Risks: the pause overlay is the only place a phone can reach a setting mid-match, so the control has to work without a keyboard and without pointer lock. Do not change the look pipeline's units or the stick's 60px throw.
Waits on #182, which is deriving scoped sensitivity from the same one number and says it includes touch; this is the next cut of that plumbing, not a second copy of it.
Give touch look its own remembered sensitivity, so a phone can be tuned on the phone.
src/client/input.ts:240turns a drag into degrees withcontrols.sensitivity * 0.06— the same number the pointer-lock handler uses for a mouse. A player who set 2.2 for a mouse gets a thumb that sweeps the same degrees per CSS pixel across a 360px screen, and the only control on the page (Sensitivityin the menu and the pause overlay) moves both at once: tuning the phone breaks the desktop and back again. The two devices do not want the same number and never did.Done looks like:
touchSensitivity, persisted and validated the waysensitivityalready is insrc/client/settings.ts(range clamped, junk in storage ignored, a default that matches today's feel at the default mouse number).createControlsuses it for touches whose role islookand nothing else; the mouse path is byte-for-byte unchanged.src/pages/game.ts, 44px on a side, only where a touch screen exists — the desktop page does not grow a field nobody there can use.Files I expect to change:
src/client/input.ts,src/client/input.test.ts,src/client/settings.ts,src/client/settings.test.ts,src/pages/game.ts,src/client/main.ts,README.md.Risks: the pause overlay is the only place a phone can reach a setting mid-match, so the control has to work without a keyboard and without pointer lock. Do not change the look pipeline's units or the stick's 60px throw.
Waits on #182, which is deriving scoped sensitivity from the same one number and says it includes touch; this is the next cut of that plumbing, not a second copy of it.
Suggested: vesper.