マウスデバイスのサポートを追加する

Game Controller ライブラリを使用して、ゲームにマウスデバイスのサポートを追加するには、以下に示す関数を使用します。ここでは、従来のマウスに加え、トラックパッドやトラックボールも含めてマウスデバイスと呼びます。

マウス ステータス コールバックを追加する

Game Controller ライブラリは、マウス ステータス コールバックを使用して、マウスが接続または切断されたときにゲームに通知します。一度にサポートされるマウス ステータス コールバックは 1 つだけです。

  • マウス ステータス コールバックを登録するか、以前登録したコールバックを新しいコールバック関数に置き換えるには、Paddleboat_setMouseStatusCallback 関数を呼び出します。
  • 現在登録されているコールバックを削除するには、statusCallback パラメータで NULL または nullptr を渡します。
  • userData パラメータは、ユーザー定義データへのポインタです(省略可能)。userData パラメータはコールバック関数に渡されます。このポインタは、次回の Paddleboat_setMouseStatusCallback 呼び出しによって変更されるまで、内部的に保持されます。
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
  statusCallback, void *userData)

マウス ステータス コールバック関数の関数シグネチャを次に示します。

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

mouseStatus 列挙型パラメータには、次の 3 つの値があります。

  • PADDLEBOAT_MOUSE_NONE: マウスデバイスは現在接続されていません。
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED: 接続されたコントローラがマウスをシミュレートしています。
  • PADDLEBOAT_MOUSE_PHYSICAL: 1 つ以上の物理マウスデバイスが接続されています(このデバイスには、マウス、タッチパッド、トラックボール、またはそれらに似たデバイスが含まれます)。

userData パラメータには、前回の Paddleboat_setMouseStatusCallback 呼び出しで指定された userData ポインタが含まれています。userData は NULL または nullptr である可能性があります。

すべてのコントローラがマウスをシミュレートするとは限りません。コントローラは、アナログ スティックの 1 つまたは統合されたタッチパッドを使用して、マウスをシミュレートすることがあります。

Game Controller ライブラリは、単一のマウスデバイスからのデータのみを報告します。物理マウスデバイスは、仮想コントローラ マウスデバイスより優先されます。物理マウスが接続されている場合は、以前アクティブだった任意の仮想コントローラ マウスを引き継ぎます。

マウスデータを読み取る

マウスデバイスのステータスを取得するには、Paddleboat_getMouseStatus 関数を呼び出します。

Paddleboat_MouseStatus Paddleboat_getMouseStatus()

現在のマウスデータを取得するには、Paddleboat_getMouseData 関数を使用します。データが正常に読み取られた場合、この関数は PADDLEBOAT_NO_ERROR を返します。それ以外の場合は、適切なエラーコードを返します。

bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)

Paddleboat_Mouse_Data 構造体には以下に関する情報が含まれています。

  • 最新のマウス入力イベントのタイムスタンプ
  • 現在のポインタ位置
  • マウスボタンのステータス
  • マウスホイールのステータス
struct Paddleboat_Mouse_Data {
    uint64_t timestamp;
    uint32_t buttonsDown;
    int32_t mouseScrollDeltaH;
    int32_t mouseScrollDeltaV;
    float mouseX;
    float mouseY;
}
構造体メンバー 説明
timestamp 最新のマウス入力イベントのタイムスタンプ。タイムスタンプの値は、クロックのエポックからの経過時間(マイクロ秒)です。
buttonsDown ビットフィールド。ビット 0 から始まる各ビットはボタンの押下状態を示します(設定されている場合)。
mouseX
mouseY
ピクセル座標におけるマウスの位置。位置座標の範囲は、0.0 から画面の幅と高さまでです。
mouseScrollDeltaH
mouseScrollDeltaV
前回の Paddleboat_getMouseData 呼び出し以降のマウス スクロール ホイール イベントの累積数。これらの値は、特定の方向へのスクロール ホイール アクティビティを示すことのみを目的としており、正確性は保証されていません。ほとんどのマウスはスクロール ホイールを 1 つ備えており、これは mouseScrollDeltaV で報告されます。マウスの側面にスクロール ホイールがある場合は、mouseScrollDeltaH で報告されます。これらの値は、Paddleboat_getMouseData 呼び出しの後で、内部的に 0 にリセットされます。

Game Controller ライブラリは、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)
};

物理マウスデバイスと仮想マウスデバイス

PADDLEBOAT_MOUSE_CONTROLLER_EMULATEDPaddleboat_MouseStatus は、物理マウスデバイスが存在せず、Game Controller ライブラリが接続済みのコントローラを使用して仮想マウスをシミュレートしていることを示します。PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE フラグが設定された最小の接続済みコントローラ インデックスが、仮想マウスとして使用されます。仮想マウスデバイスは、mouseX 座標と mouseY 座標のみを報告することが保証されています。仮想マウスデバイスは、単一の(左)マウスボタンの押下を報告することがありますが、この動作は保証されていません。