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

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

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

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

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