Используйте следующие функции, чтобы добавить поддержку мыши в вашу игру с помощью библиотеки игровых контроллеров. Термин «мышиные устройства» здесь используется для обозначения как традиционных мышей, так и трекпадов и трекболов.
Добавить обратный вызов статуса мыши
Библиотека игровых контроллеров использует функцию обратного вызова состояния мыши для уведомления игры о подключении или отключении мыши. Она поддерживает только одну функцию обратного вызова состояния мыши одновременно.
- Чтобы зарегистрировать обратный вызов состояния мыши или заменить любой ранее зарегистрированный обратный вызов новой функцией обратного вызова, вызовите функцию
Paddleboat_setMouseStatusCallback
. - Чтобы удалить любой зарегистрированный обратный вызов, передайте
NULL
илиnullptr
в параметреstatusCallback
. - Параметр
userData
— это необязательный указатель на пользовательские данные. ПараметрuserData
будет передан функции обратного вызова. Этот указатель сохраняется внутри программы до тех пор, пока не будет изменён другим вызовомPaddleboat_setMouseStatusCallback
.
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
statusCallback, void *userData)
Сигнатура функции обратного вызова статуса мыши:
typedef void (*Paddleboat_MouseStatusCallback)(const Paddleboat_MouseStatus
mouseStatus, void *userData)
Параметр перечисления mouseStatus
имеет три возможных значения:
-
PADDLEBOAT_MOUSE_NONE
: В данный момент мышь не подключена. -
PADDLEBOAT_MOUSE_CONTROLLER_EMULATED
: Подключенный контроллер имитирует мышь. -
PADDLEBOAT_MOUSE_PHYSICAL
: Подключено одно или несколько физических устройств мыши. (К таким устройствам относятся мышь, сенсорная панель, трекбол и другие аналогичные устройства.)
Параметр userData
содержит указатель userData
, указанный в последнем вызове Paddleboat_setMouseStatusCallback
. userData
может быть NULL или nullptr
.
Не все контроллеры имитируют мышь. Контроллеры могут имитировать мышь, используя один из аналоговых джойстиков или встроенную сенсорную панель.
Библиотека игровых контроллеров передает данные только с одного устройства мыши. Физические устройства мыши имеют приоритет над устройствами виртуального контроллера. Если подключена физическая мышь, она заменяет собой любой ранее активный виртуальный контроллер.
Чтение данных мыши
Вызовите функцию Paddleboat_getMouseStatus
, чтобы получить статус устройства мыши.
Paddleboat_MouseStatus Paddleboat_getMouseStatus()
Используйте функцию Paddleboat_getMouseData
для получения текущих данных мыши. Эта функция возвращает PADDLEBOAT_NO_ERROR
если данные успешно прочитаны, в противном случае возвращается соответствующий код ошибки.
bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)
Структура Paddleboat_Mouse_Data
содержит информацию о:
- Последняя метка времени события ввода мыши
- Текущее положение указателя
- Состояние кнопок мыши
- Состояние колес мыши
struct Paddleboat_Mouse_Data {
uint64_t timestamp;
uint32_t buttonsDown;
int32_t mouseScrollDeltaH;
int32_t mouseScrollDeltaV;
float mouseX;
float mouseY;
}
Член структуры | Описание |
---|---|
timestamp | Временная метка последнего события ввода мыши. Значение временной метки указывается в микросекундах с момента начала отсчёта. |
buttonsDown | Битовое поле, каждый бит, начиная с бита 0, если установлен, обозначает состояние нажатия кнопки. |
mouseX mouseY | Положение мыши в пиксельных координатах. Диапазон координат — от 0.0 до ширины и высоты экрана. |
mouseScrollDeltaH mouseScrollDeltaV | Счётчик кумулятивных событий прокрутки колеса мыши: с момента предыдущего вызова Paddleboat_getMouseData . Эти значения не гарантируют точности и служат лишь для указания активности колеса прокрутки в определённом направлении. У большинства мышей есть одно колесо прокрутки, о чём сообщается в mouseScrollDeltaV . Если у мыши есть боковое колесо прокрутки, это указывается в mouseScrollDeltaH . Эти значения сбрасываются на 0 внутри системы после вызова Paddleboat_getMouseData . |
Библиотека игрового контроллера определяет константы битовой маски для кнопок мыши в заголовочном файле интерфейса paddleboat.h
:
enum Paddleboat_Mouse_Buttons {
PADDLEBOAT_MOUSE_BUTTON_LEFT = (1U << 0),
PADDLEBOAT_MOUSE_BUTTON_RIGHT = (1U << 1),
PADDLEBOAT_MOUSE_BUTTON_MIDDLE = (1U << 2),
PADDLEBOAT_MOUSE_BUTTON_BACK = (1U << 3),
PADDLEBOAT_MOUSE_BUTTON_FORWARD = (1U << 4),
PADDLEBOAT_MOUSE_BUTTON_6 = (1U << 5),
PADDLEBOAT_MOUSE_BUTTON_7 = (1U << 6),
PADDLEBOAT_MOUSE_BUTTON_8 = (1U << 7)
};
Физические и виртуальные мыши
Состояние Paddleboat_MouseStatus
, равное PADDLEBOAT_MOUSE_CONTROLLER_EMULATED
указывает на отсутствие физической мыши и на то, что библиотека игровых контроллеров имитирует виртуальную мышь с помощью подключенного контроллера. В качестве виртуальной мыши используется контроллер с наименьшим индексом подключенного устройства с установленным флагом PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE
. Виртуальные мыши гарантированно сообщают только координаты mouseX
и mouseY
. Виртуальные мыши могут сообщать о нажатиях одной (левой) кнопки мыши, но это не гарантируется.