-
Nikitos создал
Последние пункты §12.6, которые прямо влияют на игру. До этого был ОДИН геймпад («подключён первый») и не было ни одного тач-события: локальная игра вдвоём и мобильные порты были невозможны. ГЕЙМПАДЫ (до четырёх слотов): * app: gamepads[4] со своими кнопками и осями, открытие всех подключённых, освобождение слота при отключении; старые r2d_pad_down/axis читают слот 0; * engine.padCount/padSlots/padConnectedAt/padDownAt/padPressedAt/padAxisAt/ padRumbleAt; $.input.gamepad(slot) и $.input.padCount()/padSlots(). КАСАНИЯ (до десяти пальцев): * app: позиция, сдвиг за кадр, давление; обработка SDL_EVENT_FINGER_DOWN/ MOTION/UP с переводом из нормализованных координат в точки окна; * engine.touchCount/touch/touchDelta/touchDown/touchPressure; $.input.touches()/touchCount()/touch(i)/touched(). АГЕНТ: команды touch (down/move/up/clear) и pad (кнопка и ось) — касания и геймпады иначе в CI не проверить. ЧЕТЫРЕ ДЕФЕКТА, НАЙДЕННЫЕ ТЕСТАМИ: 1) клиент протокола подставляет в поле `id` номер запроса, поэтому `id: 0` превращался в 1 и палец попадал в слот 1 — номер пальца теперь в `finger`; 2) виртуальный геймпад накладывался ДО опроса SDL, и на устройстве, которого нет, SDL обнулял состояние в том же кадре — теперь поверх опроса; 3) «предыдущий» кадр геймпада копировался до наложения виртуального ввода, и фронт нажатия был не виден — копирование перенесено в конец кадра; 4) в input.js было ДВА метода gamepad, старый перекрывал новый (молча: JS разрешает повтор ключа) — старый убран, новый берёт движок через engineOf. Проверка (tests/agent/highlevel_touch_pad_test.py, 21 проверка): палец, сдвиг 40 px за кадр, два пальца одновременно, отпускание, clear; кнопка и ось слота 1 (слот 0 не задет), фронт нажатия, честный отказ вибро без устройства. Полный набор qjs, агентских тестов, модули, doc_coverage, doc_claims, быстрый набор — зелёные.
6ebad69f