/* * pop_ctrl.h — управление Kid (Фаза K2b): порт диспетчера control() * (SDLPoP seg005.c) + модель ввода read_user_control/user_control * (seg006.c) поверх held-state клавиатуры . * * Kid-only подмножество: без меча и стражи. Map-запросы (стена/край/ * захват) ЗАСТАБЛЕНЫ «открытый пол» — реальная коллизия (стоп у стены, * падение в ямы, повисание) приходит в K3/K4. Даёт отклик на клавиши: * бег влево/вправо, разворот, стоп, присед, прыжок с места, прыжок в * беге, присед-прыжок. * * Раскладка (kbd_raw, PS/2 Set 2): ←/→ = движение, ↓ = присед, ↑ = * прыжок вверх (с →), Shift = осторожный шаг (K3). ESC — выход (проверяет * приложение сам, канал raw забирает весь ввод у DSS). */ #ifndef POP_CTRL_H #define POP_CTRL_H #include /* Открыть raw-канал клавиатуры и обнулить память авто-повтора. * 0 — OK, -1 — ошибка (EBUSY и пр., см. kbd_raw_open). */ int pop_ctrl_init(void); void pop_ctrl_close(void); /* Один кадр ввода: прочитать клавиши -> обновить control_* -> прогнать * диспетчер control() (может сменить Kid.curr_seq). Звать ПЕРЕД * kid_tick() (play_seq продолжит с новой последовательности). */ void pop_ctrl_tick(void); /* control_shift зажат ПРЯМО СЕЙЧАС? — для check_grab в физике (pop_map): * зацеп за уступ в падении по Shift. Валидно после pop_ctrl_tick. */ int8_t pop_ctrl_shift_held(void); #endif