Вопрос или проблема
Мне нужно приложение, подобное Enjoyable, Enjoy 2, Controllers и т. д. на Mac (не silicon, если это имеет значение), которое предоставило бы возможность отправлять комбинации клавиш (например, Cmd+Shift+A) с контроллера JoyStick.
Указанные приложения отправляют только одиночные клавиши/кнопки, например, на изображении ниже показан ввод одной клавиши Enjoyable.
Похоже, что Enjoyable можно изменить, так как это проект с открытым исходным кодом:
https://git.yukkurigames.com/?p=enjoyable.git;a=tree
Запустите git clone http://git.yukkurigames.com/enjoyable.git
Я понимаю, что это не легкий ответ, но не уверен, что таковой имеется.
На самом деле, я только что настроил BetterTouchTool для принятия ввода от игрового контроллера. Это требует немного сценариев, но может быть очень мощным. Теперь у меня есть что-то вроде пульта для выполнения определенных действий или контроля с помощью проводного игрового контроллера.
https://docs.folivora.ai/docs/1500_generic_devices.html
Мой сценарий при щелчке по Parse Device Input/Output выглядит так:
// Введите ваш сценарий анализа ввода здесь.
// Не изменяйте сигнатуры функций
function analyzeDeviceInput(targetDevice, reportID, reportDataHex) {
let reportBuffer = buffer.Buffer.from(reportDataHex, 'hex');
// значения, которые вы видите выше, находятся в шестнадцатеричном формате. Чтобы прочитать такой байт
// используйте readUInt8(index).
if(reportBuffer.readUInt8(0) === 0x04) {
log('триггер а!');
bttTriggerDeviceTrigger(targetDevice, 'Abutton');
}
if(reportBuffer.readUInt8(0) === 0x02) {
log('триггер b!');
bttTriggerDeviceTrigger(targetDevice, 'Bbutton');
}
if(reportBuffer.readUInt8(0) === 0x08) {
log('триггер x!');
bttTriggerDeviceTrigger(targetDevice, 'Xbutton');
}
if(reportBuffer.readUInt8(0) === 0x01) {
log('триггер y!');
bttTriggerDeviceTrigger(targetDevice, 'Ybutton');
}
// Если вы хотите получить следующий отчет, даже если
// данные не изменились, вызовите эту функцию:
// bttGetNextEvenWithoutChange(targetDevice, reportID)
}
// Расширенные, необязательные. Используйте, если хотите вызывать команды, которые отправляют данные на
// устройство из заранее определенного действия BTT.
// См. https://docs.folivora.ai/1500_generic_devices.html
async function executeBTTCommand(targetDevice, commandName, commandInput) {
log("выполнить команду: " + commandName)
switch(commandName) {
case "exampleCommand": {
// отправить любую шестнадцатеричную строку на устройство
let deviceResponse = await bttSendDataToDevice({
BTTActionSendDataTargetDevice: targetDevice,
BTTActionSendDataData: 'FEEDC0DE',
BTTActionSendDataReportType: 1,
BTTActionSendDataResponseType: -1,
BTTActionSendDataResponsePrefix: ''
});
break;
}
}
return 'выполнение ' + commandName + ' завершено'
}
Ответ или решение
Создание маппера для джойстика с поддержкой комбинаций клавиш на Mac может быть сложной задачей, особенно если уже существующие приложения, такие как Enjoyable и Enjoy 2, не предлагают такой функциональности. Однако есть решения, которые могут помочь достигнуть этой цели, и в этом ответе мы подробно рассмотрим доступные варианты.
Функциональность и Проблема
Основная задача заключается в том, чтобы настроить джойстик для отправки комбинаций клавиш, таких как Cmd+Shift+A, вместо простой отправки отдельных нажатий клавиш. Это может быть полезно для пользователей, которым необходимо выполнять определённые действия в приложениях, не отвлекаясь на клавиатуру, или для геймеров, которым нужно быстро реагировать на игровые ситуации.
Возможные Решения
-
Использование BetterTouchTool:
BetterTouchTool (BTT) – это мощное приложение для настройки жестов и клавиатурных комбинаций на Mac. Оно может принимать входные данные от контроллеров игр, но требует некоторого программирования для реализации полноценной функциональности.-
Скрипт для анализа ввода: Наличие возможности писать пользовательские скрипты в BTT позволяет настроить обработку различных входных данных. Пример вашего скрипта демонстрирует, как реагировать на нажатия кнопок контроллера, используя функции логирования и активации триггеров.
-
Пример использования:
if(reportBuffer.readUInt8(первый индекс) === значение) { log('сообщение'); bttTriggerDeviceTrigger(targetDevice, 'название триггера'); }
Этот подход может быть использован для создания более сложной логики, включая отправку комбинаций клавиш.
-
-
Модификация Enjoyable:
Если вы обладаете навыками программирования, вы можете рассмотреть возможность модификации Enjoyable, так как оно является открытым проектом. Вы можете клонировать репозиторий и доработать его, добавив поддержку комбинаций клавиш.-
Клонирование:
git clone http://git.yukkurigames.com/enjoyable.git
-
Доработка: Изучите структуру кода и интегрируйте функции, которые позволят отправлять комбинации клавиш вместо одиночных нажатий.
-
-
Дополнительные Программы:
Поиск альтернативных программ, которые могут поддерживать джойстики и комбинации клавиш, может быть полезен. Некоторые приложения, такие как Joystick Mapper, иногда включают дополнительные функции. Однако стоит проверить их совместимость с вашим оборудованием и маком.
Заключение
Хотя не существует "из коробки" решения для полной поддержки комбинаций клавиш через джойстики на Mac, описанные выше подходы могут быть использованы для достижения желаемого результата. Использование BetterTouchTool с пользовательскими скриптами предоставляет гибкие возможности, позволяя настроить команды в соответствии с вашими потребностями. Альтернативно, модификация существующих open-source решений, таких как Enjoyable, может быть действенным способом добавить необходимую функциональность.
Если у вас есть дополнительные вопросы или требуется более глубокая помощь в реализации этих решений, пожалуйста, не стесняйтесь задавать их.