Cómo agregar compatibilidad con el mouse

Emplea las siguientes funciones para agregar compatibilidad con el mouse con la biblioteca de Game Controller. Usaremos el término mouse para describir cualquier mouse tradicional, así como paneles táctiles y bolas de seguimiento.

Cómo agregar una devolución de llamada del estado del mouse

La biblioteca de controles para juegos usa una devolución de llamada de estado del mouse a fin de enviar una notificación a un juego cuando se conecta o desconecta un mouse. Solo admite una devolución de llamada de estado del mouse a la vez.

  • Si deseas registrar una devolución de llamada de estado del mouse o reemplazar cualquier devolución de llamada registrada con anterioridad por una nueva función de devolución de llamada, llama a la función Paddleboat_setMouseStatusCallback.
  • Para quitar una devolución de llamada registrada, pasa NULL o nullptr en el parámetro statusCallback.
  • El parámetro userData es un puntero opcional para datos definidos por el usuario. El parámetro userData se pasará a la función de devolución de llamada. Este puntero se retiene internamente hasta que se modifica mediante otra llamada a Paddleboat_setMouseStatusCallback.
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
  statusCallback, void *userData)

La firma de la función de devolución de llamada del estado del mouse es la siguiente:

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

El parámetro de enumeración mouseStatus tiene tres valores posibles:

  • PADDLEBOAT_MOUSE_NONE: No hay ningún mouse conectado actualmente.
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED: Hay un control conectado que simula un mouse.
  • PADDLEBOAT_MOUSE_PHYSICAL: Hay al menos un mouse físico conectado (puede ser un mouse, un panel táctil, una bola de seguimiento o algún otro dispositivo similar).

El parámetro userData contiene el puntero userData especificado en la última llamada a Paddleboat_setMouseStatusCallback. userData puede tener un valor NULO o nullptr.

No todos los controles simulan un mouse. Los controles pueden simular un mouse mediante uno de los sticks analógicos o un panel táctil integrado.

La biblioteca de controles para juegos solo informa datos desde un mouse único. Un mouse físico tiene prioridad sobre uno de control virtual. Cuando se conecte un mouse físico, este reemplazará a cualquier mouse de control virtual que haya estado activo.

Cómo leer los datos del mouse

Llama a la función Paddleboat_getMouseStatus a fin de obtener el estado del mouse.

Paddleboat_MouseStatus Paddleboat_getMouseStatus()

Usa la función Paddleboat_getMouseData para obtener los datos actuales del mouse. Esta función muestra PADDLEBOAT_NO_ERROR si los datos se leen correctamente; de lo contrario, se muestra un código de error adecuado.

bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)

La estructura Paddleboat_Mouse_Data contiene información sobre lo siguiente:

  • La marca de tiempo más reciente del evento de entrada del mouse
  • La posición actual del puntero
  • El estado de los botones del mouse
  • El estado de las ruedas del mouse
struct Paddleboat_Mouse_Data {
    uint64_t timestamp;
    uint32_t buttonsDown;
    int32_t mouseScrollDeltaH;
    int32_t mouseScrollDeltaV;
    float mouseX;
    float mouseY;
}
Miembro de la estructura Descripción
timestamp Marca de tiempo del evento de entrada más reciente del mouse. El valor de la marca de tiempo está en microsegundos desde la época.
buttonsDown El campo de bits (cada bit, comenzando por el bit 0) significa un estado de botón desactivado si se configura.
mouseX
mouseY
Posición del mouse en coordenadas de píxeles. Las coordenadas de posición tienen un rango de 0.0 respecto del ancho y el alto de la pantalla.
mouseScrollDeltaH
mouseScrollDeltaV
Cantidad de eventos de rueda del mouse acumulados desde la llamada anterior a Paddleboat_getMouseData. No se garantiza que estos valores sean precisos, sino que solo proporcionan una indicación de la actividad de la rueda del mouse en una dirección en particular. En la mayoría de los casos, un mouse tiene una rueda, lo cual se informa en mouseScrollDeltaV. Si un mouse tiene una rueda lateral, esto se informa en mouseScrollDeltaH. Estos valores se restablecen de forma interna a 0 después de una llamada a Paddleboat_getMouseData.

La biblioteca de controles para juegos define constantes de máscara de bits para los botones del mouse en el archivo de encabezado de interfaz 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)
};

Diferencias entre un mouse físico y uno virtual

Un Paddleboat_MouseStatus de PADDLEBOAT_MOUSE_CONTROLLER_EMULATED indica que no existe un mouse como dispositivo físico y que la biblioteca de controles para juegos está simulando un mouse virtual por medio de un control conectado. El índice más bajo de controles conectados con el conjunto de marcas PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE se usa como el mouse virtual. Solo se garantiza que los dispositivos de mouse virtuales informen las coordenadas mouseX y mouseY. Un mouse virtual puede informar la cantidad de presiones sobre un único botón (el de la izquierda) del mouse, pero esto no se garantiza.