Aggiungi il supporto del mouse

Utilizza le seguenti funzioni per aggiungere il supporto dei mouse al tuo gioco utilizzando la raccolta di controller per videogiochi. Qui utilizziamo il termine mouse per descrivere i mouse tradizionali, nonché i trackpad e le trackball.

Aggiungi un callback di stato del mouse

La raccolta del controller di gioco utilizza un callback dello stato del mouse per inviare una notifica a un gioco quando il mouse è connesso o disconnesso. Supporta un solo callback di stato del mouse alla volta.

  • Per registrare un callback dello stato del mouse o sostituire qualsiasi callback registrato in precedenza con una nuova funzione di callback, chiama la funzione Paddleboat_setMouseStatusCallback.
  • Per rimuovere i callback attualmente registrati, trasmetti NULL o nullptr nel parametro statusCallback.
  • Il parametro userData è un puntatore facoltativo ai dati definiti dall'utente. Il parametro userData verrà passato alla funzione di callback. Questo puntatore viene conservato internamente fino a quando non viene modificato da un'altra chiamata a Paddleboat_setMouseStatusCallback.
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
  statusCallback, void *userData)

La firma della funzione di callback dello stato del mouse è:

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

Il parametro enum mouseStatus ha tre valori possibili:

  • PADDLEBOAT_MOUSE_NONE: nessun mouse collegato al momento.
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED: un controller collegato sta simulando un mouse.
  • PADDLEBOAT_MOUSE_PHYSICAL: uno o più mouse fisici sono connessi. Questi dispositivi includono mouse, touchpad, trackball o altri dispositivi simili.

Il parametro userData contiene il puntatore userData specificato nell'ultima chiamata a Paddleboat_setMouseStatusCallback. userData può essere NULL o nullptr.

Non tutti i controller simulano un mouse. I controller possono simulare un mouse utilizzando una levetta analogica o un touchpad integrato.

La libreria del controller di gioco riporta solo i dati provenienti da un singolo mouse. I mouse fisici hanno la priorità sui dispositivi mouse con controller virtuale. Se è collegato un mouse fisico, sostituisce qualsiasi mouse controller virtuale precedentemente attivo.

Lettura dei dati del mouse

Richiama la funzione Paddleboat_getMouseStatus per conoscere lo stato del mouse.

Paddleboat_MouseStatus Paddleboat_getMouseStatus()

Utilizza la funzione Paddleboat_getMouseData per ottenere i dati correnti del mouse. Questa funzione restituisce PADDLEBOAT_NO_ERROR se i dati vengono letti correttamente, altrimenti viene restituito un codice di errore appropriato.

bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)

La struttura Paddleboat_Mouse_Data contiene informazioni su:

  • Timestamp più recente dell'evento di input del mouse
  • La posizione attuale del puntatore
  • Stato dei pulsanti del mouse
  • Stato delle rotelline del mouse
struct Paddleboat_Mouse_Data {
    uint64_t timestamp;
    uint32_t buttonsDown;
    int32_t mouseScrollDeltaH;
    int32_t mouseScrollDeltaV;
    float mouseX;
    float mouseY;
}
Membro della struttura Descrizione
timestamp Timestamp dell'evento di input del mouse più recente. Il valore del timestamp è espresso in microsecondi dall'epoca dell'orologio.
buttonsDown Bitfield, ogni bit a partire dal bit 0 indica uno stato "button down" se impostato.
mouseX
mouseY
Posizione del mouse nelle coordinate in pixel. Le coordinate di posizione hanno un intervallo compreso tra 0.0 e larghezza e altezza dello schermo.
mouseScrollDeltaH
mouseScrollDeltaV
Un conteggio cumulativo di eventi rotellina del mouse a partire dalla chiamata precedente a Paddleboat_getMouseData. La precisione di questi valori non è garantita, ma solo per fornire un'indicazione dell'attività della rotellina di scorrimento in una determinata direzione. La maggior parte dei mouse ha una rotellina di scorrimento, riportata in mouseScrollDeltaV. Se il mouse è dotato della rotellina di scorrimento laterale, viene indicato in mouseScrollDeltaH. Questi valori vengono reimpostati internamente su 0 dopo una chiamata a Paddleboat_getMouseData.

La libreria del controller di gioco definisce le costanti della maschera di bit per i pulsanti del mouse nel file di intestazione dell'interfaccia 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)
};

mouse fisici e dispositivi virtuali

Un Paddleboat_MouseStatus pari a PADDLEBOAT_MOUSE_CONTROLLER_EMULATED indica che non è presente un mouse fisico e che la libreria del controller di gioco simula un mouse virtuale utilizzando un controller collegato. L'indice del controller connesso più basso con il flag PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE impostato viene utilizzato come mouse virtuale. I dispositivi mouse virtuali possono registrare solo le coordinate mouseX e mouseY. I dispositivi mouse virtuali potrebbero segnalare la pressione di un singolo pulsante del mouse (sinistra), ma questo non è garantito.