Dodaj obsługę myszy

Aby dodać do gry obsługę myszy za pomocą biblioteki Game Controller, użyj tych funkcji. Określenie „urządzenia wskazujące” odnosi się do tradycyjnych myszy, a także trackpadów i trackballi.

Dodawanie wywołania zwrotnego stanu myszy

Biblioteka Game Controller używa wywołania zwrotnego stanu myszy, aby powiadamiać grę o podłączeniu lub odłączeniu myszy. Obsługuje tylko 1 wywołanie zwrotne stanu myszy naraz.

  • Aby zarejestrować wywołanie zwrotne stanu myszy lub zastąpić wcześniej zarejestrowane wywołanie zwrotne nową funkcją wywołania zwrotnego, wywołaj funkcję Paddleboat_setMouseStatusCallback.
  • Aby usunąć zarejestrowane wywołanie zwrotne, przekaż wartość NULL lub nullptr w parametrze statusCallback.
  • Parametr userData jest opcjonalnym wskaźnikiem danych zdefiniowanych przez użytkownika. Parametr userData zostanie przekazany do funkcji wywołania zwrotnego. Ten wskaźnik jest przechowywany wewnętrznie, dopóki nie zostanie zmieniony przez inne wywołanie funkcji Paddleboat_setMouseStatusCallback.
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
  statusCallback, void *userData)

Podpis funkcji wywołania zwrotnego stanu myszy jest następujący:

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

Parametr wyliczeniowy mouseStatus ma 3 możliwe wartości:

  • PADDLEBOAT_MOUSE_NONE: brak połączonych urządzeń wskazujących.
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED: Podłączony kontroler symuluje mysz.
  • PADDLEBOAT_MOUSE_PHYSICAL: podłączone są co najmniej 2 myszy. (Do tych urządzeń należą mysz, touchpad, trackball i inne podobne urządzenia).

Parametr userData zawiera wskaźnik userData określony w ostatnim wywołaniu funkcji Paddleboat_setMouseStatusCallback. Wartość userData może być równa NULL lub nullptr.

Nie wszystkie kontrolery symulują mysz. Kontrolery mogą symulować mysz za pomocą jednego z drążków analogowych lub zintegrowanego touchpada.

Biblioteka Game Controller zgłasza dane tylko z jednego urządzenia wskazującego. Fizyczne myszy mają wyższy priorytet niż wirtualne myszy kontrolera. Jeśli podłączysz mysz fizyczną, zastąpi ona wcześniej aktywną mysz wirtualnego kontrolera.

Odczytywanie danych myszy

Wywołaj funkcję Paddleboat_getMouseStatus, aby uzyskać stan urządzenia wskazującego.

Paddleboat_MouseStatus Paddleboat_getMouseStatus()

Użyj funkcji Paddleboat_getMouseData, aby uzyskać bieżące dane myszy. Jeśli dane zostaną odczytane, funkcja zwraca wartość PADDLEBOAT_NO_ERROR. W przeciwnym razie zwracany jest odpowiedni kod błędu.

bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)

Struktura Paddleboat_Mouse_Data zawiera informacje o:

  • Sygnatura czasowa ostatniego zdarzenia wejścia myszy
  • bieżące położenie wskaźnika,
  • Stan przycisków myszy
  • Stan kółek myszy
struct Paddleboat_Mouse_Data {
    uint64_t timestamp;
    uint32_t buttonsDown;
    int32_t mouseScrollDeltaH;
    int32_t mouseScrollDeltaV;
    float mouseX;
    float mouseY;
}
Członek struktury Opis
timestamp Sygnatura czasowa ostatniego zdarzenia związanego z wejściem z myszy. Wartość sygnatury czasowej jest podana w mikrosekundach od początku epoki zegara.
buttonsDown Pole bitowe, w którym każdy bit, począwszy od bitu 0, oznacza stan naciśnięcia przycisku, jeśli jest ustawiony.
mouseX
mouseY
Położenie myszy we współrzędnych pikseli. Współrzędne pozycji mieszczą się w zakresie od 0.0 do szerokości i wysokości ekranu.
mouseScrollDeltaH
mouseScrollDeltaV
Liczba zdarzeń przewijania kółkiem myszy od poprzedniego wywołania funkcji Paddleboat_getMouseData. Wartości te nie muszą być dokładne, a jedynie wskazywać aktywność kółka przewijania w określonym kierunku. Większość myszy ma 1 kółko przewijania, co jest zgłaszane w polu mouseScrollDeltaV. Jeśli mysz ma boczne kółko przewijania, jest ono zgłaszane w mouseScrollDeltaH. Wartości te są resetowane wewnętrznie do 0 po wywołaniu Paddleboat_getMouseData.

Biblioteka Game Controller definiuje stałe masek bitowych dla przycisków myszy w pliku nagłówkowym interfejsu 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)
};

Fizyczne i wirtualne urządzenia wskazujące

Wartość Paddleboat_MouseStatus w przypadku PADDLEBOAT_MOUSE_CONTROLLER_EMULATED oznacza, że nie ma fizycznej myszy, a biblioteka Game Controller symuluje wirtualną mysz za pomocą podłączonego kontrolera. Najniższy indeks podłączonego kontrolera z ustawioną flagą PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE jest używany jako wirtualna mysz. Wirtualne urządzenia wskazujące gwarantują tylko raportowanie współrzędnychmouseXmouseY. Wirtualne urządzenia wskazujące mogą zgłaszać naciśnięcia tylko jednego (lewego) przycisku myszy, ale nie jest to gwarantowane.