Adicionar compatibilidade com mouse

Use as seguintes funções para adicionar compatibilidade com mouse para o jogo usando a biblioteca Game Controller. Usamos o termo mouse aqui para descrever o mouse tradicional, bem como trackpads ou trackballs.

Adicionar um callback de status do mouse

A biblioteca Game Controller usa um callback de status do mouse para notificar um jogo quando um mouse é conectado ou desconectado. Ela aceita apenas um callback de status do mouse por vez.

  • Para registrar um callback de status do mouse ou substituir qualquer outro registrado anteriormente por uma nova função de callback, chame a função Paddleboat_setMouseStatusCallback.
  • Para remover qualquer callback registrado no momento, transmita NULL ou nullptr no parâmetro statusCallback.
  • O parâmetro userData é um ponteiro opcional para dados definidos pelo usuário. O parâmetro userData será transmitido para a função de callback. Esse ponteiro é retido internamente até ser modificado por outra chamada para Paddleboat_setMouseStatusCallback.
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
  statusCallback, void *userData)

A assinatura da função de callback de status do mouse é:

typedef void (*Paddleboat_MouseStatusCallback)(const Paddleboat_MouseStatus
  mouseStatus, void *userData)

O parâmetro de enumeração mouseStatus tem três valores possíveis:

  • PADDLEBOAT_MOUSE_NONE: nenhum mouse está conectado.
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED: um controlador conectado está simulando um mouse.
  • PADDLEBOAT_MOUSE_PHYSICAL: um ou mais dispositivos físicos de mouse estão conectados. Esses dispositivos incluem mouse, touchpad, trackball ou outros dispositivos semelhantes.

O parâmetro userData contém o ponteiro userData especificado na última chamada para Paddleboat_setMouseStatusCallback. userData pode ser NULL ou nullptr.

Nem todos os controles simulam um mouse. Os controles podem simular um mouse usando um dos direcionais analógicos ou com um touchpad integrado.

A biblioteca Game Controller só informa dados de um único mouse. Mouses físicos têm prioridade sobre os dispositivos de mouse do controle virtual. Se um mouse físico estiver conectado, ele substituirá qualquer mouse do controle virtual anteriormente ativo.

Ler dados do mouse

Chame a função Paddleboat_getMouseStatus para ver o status do mouse.

Paddleboat_MouseStatus Paddleboat_getMouseStatus()

Use a função Paddleboat_getMouseData para acessar os dados atuais do mouse. Essa função retornará PADDLEBOAT_NO_ERROR se os dados forem lidos com êxito. Caso contrário, um código de erro apropriado será retornado.

bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)

A estrutura Paddleboat_Mouse_Data contém informações sobre:

  • o carimbo de data/hora do evento mais recente de entrada do mouse;
  • a posição atual do ponteiro;
  • status dos botões do mouse;
  • status das rodas do mouse.
struct Paddleboat_Mouse_Data {
    uint64_t timestamp;
    uint32_t buttonsDown;
    int32_t mouseScrollDeltaH;
    int32_t mouseScrollDeltaV;
    float mouseX;
    float mouseY;
}
Membro da estrutura Descrição
timestamp Carimbo de data/hora do evento mais recente de entrada do mouse. O valor do carimbo de data/hora é exibido em microssegundos desde a época do relógio.
buttonsDown Bitfield, cada bit a partir do bit 0 significa um estado de botão desligado, se definido.
mouseX
mouseY
Posição do mouse em coordenadas de pixel. As coordenadas de posição têm um intervalo de 0.0 em relação à largura e altura da tela.
mouseScrollDeltaH
mouseScrollDeltaV
Uma contagem de eventos cumulativos da roda do mouse: desde a chamada anterior para Paddleboat_getMouseData. Não é garantido que esses valores sejam precisos; eles servem apenas para fornecer uma indicação da atividade da roda de rolagem em uma direção específica. A maioria dos mouses tem uma roda de rolagem, o que é informado em mouseScrollDeltaV. Se um mouse tiver uma roda de rolagem lateral, isso será informado em mouseScrollDeltaH. Esses valores são redefinidos para 0 internamente após uma chamada para Paddleboat_getMouseData.

A biblioteca Game Controller define constantes de bitmask para botões do mouse no arquivo principal da interface 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)
};

Mouses físicos e virtuais

Um Paddleboat_MouseStatus de PADDLEBOAT_MOUSE_CONTROLLER_EMULATED indica que não há um dispositivo físico de mouse e que a biblioteca Game Controller simula um mouse virtual usando um controle conectado. O menor índice do controle conectado com a sinalização PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE definida é usado como o mouse virtual. Só é garantido que os mouses virtuais relatem coordenadas mouseX e mouseY. Mouses virtuais podem relatar pressionamentos de um único botão (esquerdo) do mouse, mas isso não é garantido.