• Nikitos's avatar
    Touch и мультигеймпад: четыре слота, до десяти пальцев
    · 6ebad69f
    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