Добавить поддержку мыши

Используйте следующие функции, чтобы добавить поддержку мыши в вашу игру с помощью библиотеки игровых контроллеров. Термин «мышиные устройства» здесь используется для обозначения как традиционных мышей, так и трекпадов и трекболов.

Добавить обратный вызов статуса мыши

Библиотека игровых контроллеров использует функцию обратного вызова состояния мыши для уведомления игры о подключении или отключении мыши. Она поддерживает только одну функцию обратного вызова состояния мыши одновременно.

  • Чтобы зарегистрировать обратный вызов состояния мыши или заменить любой ранее зарегистрированный обратный вызов новой функцией обратного вызова, вызовите функцию 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 . Виртуальные мыши могут сообщать о нажатиях одной (левой) кнопки мыши, но это не гарантируется.