Aggiungi il supporto del mouse

Utilizza le seguenti funzioni per aggiungere il supporto per i mouse al tuo gioco utilizzando la libreria del controller di gioco. In questo caso utilizziamo il termine mouse per descrivere i mouse tradizionali, nonché i trackpad e le trackball.

Aggiungi un callback dello stato del mouse

La raccolta del controller di gioco utilizza un callback dello stato del mouse per inviare una notifica a un gioco quando un mouse è collegato o disconnesso. Supporta un solo callback dello 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 qualsiasi callback attualmente registrato, 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)

Per il parametro enum mouseStatus sono possibili tre valori:

  • 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. ad esempio 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 usando una delle levette analogiche o un touchpad integrato.

La libreria del controller di gioco riporta solo i dati di un singolo dispositivo mouse. I dispositivi mouse fisici hanno la priorità sui dispositivi mouse controller virtuali. Se è collegato un mouse fisico, prende il posto di qualsiasi mouse controller virtuale attivo in precedenza.

Leggi i dati del mouse

Richiama la funzione Paddleboat_getMouseStatus per ottenere 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 di pulsante down, se impostato.
mouseX
mouseY
Posizione del mouse nelle coordinate in pixel. Le coordinate di posizione hanno un intervallo compreso tra 0.0 e la larghezza e l'altezza dello schermo.
mouseScrollDeltaH
mouseScrollDeltaV
Un conteggio di eventi cumulativi della rotellina di scorrimento 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 un mouse è dotato della rotellina di scorrimento laterale, è 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 di bitmask 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)
};

Dispositivi mouse fisici e 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 sta simulando un mouse virtuale mediante un controller collegato. L'indice del controller connesso più basso con il flag PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE impostato viene utilizzato come mouse virtuale. Ai dispositivi mouse virtuali viene garantita solo la segnalazione delle coordinate mouseX e mouseY. I mouse virtuali potrebbero segnalare la pressione di un singolo pulsante del mouse (sinistra), ma ciò non è garantito.