پشتیبانی از دستگاه ماوس را اضافه کنید

از عملکردهای زیر برای افزودن پشتیبانی از دستگاه ماوس به بازی خود با استفاده از کتابخانه Game Controller استفاده کنید. ما در اینجا از اصطلاح دستگاه های موس برای توصیف موش های سنتی و همچنین پدهای لمسی یا گوی های حرکتی استفاده می کنیم.

یک پاسخ تماس وضعیت ماوس را اضافه کنید

کتابخانه Game Controller از پاسخ تماس وضعیت ماوس برای اطلاع دادن به بازی هنگام اتصال یا قطع ارتباط ماوس استفاده می کند. در هر زمان تنها از یک پاسخ وضعیت ماوس پشتیبانی می کند.

  • برای ثبت پاسخ تماس وضعیت ماوس یا جایگزینی هر پاسخ تماس قبلی ثبت شده با یک تابع پاسخ به تماس جدید، تابع Paddleboat_setMouseStatusCallback را فراخوانی کنید.
  • برای حذف هر پاسخ تماس ثبت شده فعلی، NULL یا nullptr را در پارامتر statusCallback ارسال کنید.
  • پارامتر userData یک اشاره گر اختیاری به داده های تعریف شده توسط کاربر است. پارامتر userData به تابع callback ارسال می شود. این اشاره گر به صورت داخلی حفظ می شود تا زمانی که با تماس دیگری به Paddleboat_setMouseStatusCallback تغییر یابد.
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
  statusCallback, void *userData)

امضای تابع تابع تماس وضعیت ماوس به صورت زیر است:

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

پارامتر mouseStatus enum دارای سه مقدار ممکن است:

  • PADDLEBOAT_MOUSE_NONE : هیچ دستگاه ماوسی در حال حاضر متصل نیست.
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED : یک کنترلر متصل در حال شبیه سازی یک ماوس است.
  • PADDLEBOAT_MOUSE_PHYSICAL : یک یا چند دستگاه فیزیکی ماوس متصل هستند. (این دستگاه ها شامل ماوس، پد لمسی، گوی یا سایر دستگاه های مشابه هستند.)

پارامتر userData حاوی نشانگر userData است که در آخرین تماس با Paddleboat_setMouseStatusCallback مشخص شده است. userData ممکن است NULL یا nullptr باشد.

همه کنترلرها ماوس را شبیه سازی نمی کنند. کنترلرها ممکن است یک ماوس را با استفاده از یکی از میله های آنالوگ یا با یک پد لمسی یکپارچه شبیه سازی کنند.

کتابخانه 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 Bitfield، هر بیتی که از بیت 0 شروع می‌شود، در صورت تنظیم، نشان‌دهنده یک حالت دکمه پایین است.
mouseX
mouseY
موقعیت ماوس در مختصات پیکسل. مختصات موقعیت دارای محدوده 0.0 تا عرض و ارتفاع صفحه است.
mouseScrollDeltaH
mouseScrollDeltaV
تعداد تجمعی از رویدادهای چرخ اسکرول ماوس: از زمان تماس قبلی با Paddleboat_getMouseData . این مقادیر تضمین نمی شوند که دقیق باشند، فقط برای نشان دادن فعالیت چرخ اسکرول در یک جهت خاص. اکثر موش ها دارای یک چرخ اسکرول هستند که در 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_MouseStatus از PADDLEBOAT_MOUSE_CONTROLLER_EMULATED نشان می‌دهد که یک دستگاه فیزیکی ماوس وجود ندارد و کتابخانه Game Controller در حال شبیه‌سازی یک ماوس مجازی با استفاده از یک کنترل‌کننده متصل است. پایین ترین شاخص کنترلر متصل با مجموعه پرچم PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE به عنوان ماوس مجازی استفاده می شود. دستگاه‌های ماوس مجازی فقط مختصات mouseX و mouseY را گزارش می‌کنند. دستگاه های ماوس مجازی ممکن است فشارهای یک دکمه (سمت چپ) ماوس را گزارش دهند، اما این تضمین نمی شود.