Способ реализации:
Lua
Версия Warcraft:
Наработка превращает нажатия клавиш W, A, S, D, Ctrl, Space в нормированный Vector3, который можно сразу применять к юниту.
  • Нормализация позволяет обезопасить управление от всех этих страйфов и распрыжек, равномерно направляя юнита в любую из комбинаций сторон.
  • Для удобства использует EventDispatcher, тем самым подключаться к ней можно буквально в GUI.
  • Сама регистрирует на всех игроков-людей.
  • Можно задавать свой набор клавиш.

Демо

Установка

Использование

local EventDispatcher = Imp.import(EventDispatcher)

EventDispatcher.on("input.movement", function(event)
    -- Игрок, нажавший клавишу
    event.data.player

    -- Vector3 норм. вектор назначения
    event.data.destination
    
    -- Vector3 норм. вектор текущей нажатой/отжатой клавиши (напр., для прыжков)
    event.data.rawVector
    
    -- string айди клавиши
    event.data.keyId
end)

Свой набор клавиш

Можно задать свой набор клавиш, вызвав InputMovement.changeKeyMap() после срабатывания 0.01 таймера игрового времени.
local InputMovement = Imp.import(InputMovement)

InputMovement.changeKeyMap({
    FORWARD = OSKEY_W,
    BACKWARD = OSKEY_S,
    LEFT = OSKEY_A,
    RIGHT = OSKEY_D,
    UP = OSKEY_SPACE,
    DOWN = OSKEY_LCONTROL
})
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
38
H,
Из-за этого, кстати, пришлось хранить вектора всех клавиш
Ты можешь послать 100500 отпусканий, вектор будет иметь значение 0, а не -100500

Кстати, нажатие клавиш вниз непрерывно шлет событие, а отпускание 1 раз) это здесь тоже безопасится, сравнивая текущий стейт

При этом у меня всё ещё может быть нажата клавиша W при выходе из паузы.
Ну и это редкий кейс
А вот про залипание при нажатии мыши надо будет посмотреть одну хитрость с metakey
33
Кстати, нажатие клавиш вниз непрерывно шлет событие, а отпускание 1 раз) это здесь тоже безопасится, сравнивая текущий стейт
На предпоследнем патче было норм, это завезли с последним патчем, у меня сильно подгорело с этого.. надесюь это случайность, и Близы уберут это
7
Даешь многоуровневое движения по плафтормам и под ними.
38
Вышла новая версия! Прокрутить к ресурсу
Обновление 1.2: обновил описание и тест карту (новая wGeometry)
Теперь при вертикальном движении в тестовой карте юнит не вращается.
38
Вышла новая версия! Прокрутить к ресурсу
Версия 1.5 с исправленным багом зажатия мыши + клавиши
38
Вышла новая версия! Прокрутить к ресурсу
Версия 2.0
  • Добавлена поддержка IMP
  • Убрана поддержка WLPM
  • Имя модуля изменено на EventDispatcher (из нижнего регистра)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.