feat(game): WASD-движение, кнопка действия E/A и подпись [E] Имя
Ходьба: WASD/стрелки/крестовина/аналоговый стик + тач-джойстик (приоритет)
через готовый PlayerController.moveFree; при нулевом векторе — обычный
update (moveFree со стопом рвал бы путь моста).

Кнопка действия: interact = KeyE / геймпад A — ближайшая цель в радиусе
1.5 юнита (NPC → click-переход/заперто → интерактив → цветок), резолв
через pickInteract (чистый, эпсилон-ничья 0.05 + приоритет kind).
Подпись «[E] Имя» над ближайшей целью заменяет per-object подписи;
NPC впервые получают подписи. Снапшот: interactHint (+ ключ анти-дрейфа).

Гвард wasBusy: клавиша, закрывшая диалог, не ударяет/не переоткрывает
разговор в тот же тик (Space/A мульти-биндинг advance+attack/interact).
Клик-движение пока живо (удаляется в следующем коммите).

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent fde88b6 commit 50cfc151fc70e25308d97f9e47b8b50e068862fa
@root root authored 5 hours ago
Showing 10 changed files
View
apps/game/src/agent/SceneAgentView.ts
View
apps/game/src/agent/__tests__/snapshot.test.ts
View
apps/game/src/agent/snapshot.ts
View
apps/game/src/main.ts
View
apps/game/src/scenes/LocationScene.ts
View
apps/game/src/systems/ClickRouting.ts
View
apps/game/src/systems/InteractHint.ts 0 → 100644
View
apps/game/src/systems/LocationHud.ts
View
apps/game/src/systems/SceneObjects.ts
View
apps/game/src/systems/__tests__/ClickRouting.test.ts