Aggiungi il supporto del mouse

Utilizza le seguenti funzioni per aggiungere il supporto del mouse al tuo gioco utilizzando la libreria Game Controller. Qui utilizziamo il termine dispositivi di tipo mouse per descrivere mouse tradizionali, trackpad o trackball.

Aggiungere un callback dello stato del mouse

La libreria Game Controller utilizza un callback di stato del mouse per notificare a un gioco quando un mouse è connesso o disconnesso. Supporta una sola 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 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 finché 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: al momento non è connesso alcun mouse.
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED: Un controller connesso sta simulando un mouse.
  • PADDLEBOAT_MOUSE_PHYSICAL: Uno o più mouse fisici sono collegati. 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 delle levette analogiche o un touchpad integrato.

La libreria Game Controller segnala 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, questo sostituisce qualsiasi mouse virtuale del controller attivo in precedenza.

Lettura dei dati del mouse

Chiama la funzione Paddleboat_getMouseStatus per ottenere lo stato del dispositivo mouse.

Paddleboat_MouseStatus Paddleboat_getMouseStatus()

Utilizza la funzione Paddleboat_getMouseData per ottenere i dati attuali 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:

  • Il timestamp dell'evento di input del mouse più recente
  • La posizione attuale del puntatore
  • Stato dei tasti 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 a partire dall'epoca dell'orologio.
buttonsDown Bitfield, ogni bit a partire dal bit 0 indica lo stato di pressione di un pulsante se impostato.
mouseX
mouseY
Posizione del mouse in coordinate pixel. Le coordinate di posizione hanno un intervallo compreso tra 0.0 e la larghezza e l'altezza dello schermo.
mouseScrollDeltaH
mouseScrollDeltaV
Un conteggio degli eventi cumulativi della rotellina del mouse: dall'ultima chiamata a Paddleboat_getMouseData. Non è garantita la precisione di questi valori, che forniscono solo un'indicazione dell'attività della rotellina di scorrimento in una determinata direzione. La maggior parte dei mouse ha una rotellina di scorrimento, che viene segnalata in mouseScrollDeltaV. Se un mouse ha una rotellina di scorrimento laterale, viene segnalata in mouseScrollDeltaH. Questi valori vengono reimpostati internamente su 0 dopo una chiamata a Paddleboat_getMouseData.

La libreria Game Controller definisce le costanti 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 di PADDLEBOAT_MOUSE_CONTROLLER_EMULATED indica che un dispositivo mouse fisico è assente e la libreria Game Controller sta simulando un mouse virtuale utilizzando un controller connesso. 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 garantiscono solo la segnalazione delle coordinate mouseX e mouseY. I dispositivi mouse virtuali potrebbero segnalare le pressioni di un singolo tasto del mouse (sinistro), ma non è garantito.