کتابخانه Game Controller یک پایگاه داده داخلی از دستگاههای کنترلکننده را نگهداری میکند که برای پیکربندی دکمهها، طرحبندی محور حرکت، نقشهبرداری برای کنترلکنندههای شناختهشده، و یک نقشه پیشفرض برای کنترلکنندههای ناشناس استفاده میشود. پایگاه داده شامل بسیاری از کنترلرهای محبوب است، اما ممکن است شامل همه دستگاه های مربوط به یک بازی خاص نباشد. کتابخانه Game Controller از سفارشی سازی با توابعی پشتیبانی می کند که می توانند:
- پایگاه داده نقشه برداری فعلی را بازیابی کنید.
- ورودی ها را به پایگاه داده موجود اضافه کنید.
- ورودی های پایگاه داده موجود را جایگزین کنید.
- کل پایگاه داده فعلی را با یک پایگاه داده جدید جایگزین کنید.
یک دستگاه را شناسایی کنید
دستگاه های کنترل کننده با مقادیر productId
و vendorId
آنها شناسایی می شوند. هر دستگاه کنترل کننده شناخته شده حداقل یک ورودی در پایگاه داده با productId
و vendorId
منطبق دارد. ساختار نگاشت کنترلر شامل فیلدهایی است که حداقل و حداکثر محدوده API Android واجد شرایط را برای ورودی مشخص می کند. چندین ورودی با productId
و vendorId
یکسان ممکن است در پایگاه داده وجود داشته باشند تا زمانی که دارای حداقل و حداکثر محدوده API منحصر به فرد باشند.
داده های remap فعلی خود را بخوانید
از تابع Paddleboat_getControllerRemapTableData
برای بازیابی داده های remap فعلی استفاده کنید.
int32_t Paddleboat_getControllerRemapTableData(
const int32_t destRemapTableEntryCount,
Paddleboat_Controller_Mapping_Data* mappingData)
Paddleboat_getControllerRemapTableData
تعداد کل ورودی های remap موجود در پایگاه داده داخلی را برمی گرداند.
پارامتر | توضیحات |
---|---|
destRemapTableEntryCount | اندازه آرایه عناصر Paddleboat_Controller_Mapping_Data در پارامتر mappingData ارسال شده است. |
mappingData | اشاره گر به آرایه ای از عناصر Paddleboat_Controller_Mapping_Data . |
اگر destRemapTableEntryCount
کوچکتر از تعداد کل ورودی های remap باشد، فقط تعداد ورودی های مشخص شده توسط destRemapTableEntryCount
در mappingData
کپی می شود.
داده های remap را اضافه یا جایگزین کنید
از تابع Paddleboat_addControllerRemapData
برای افزودن ورودی های remap یا جایگزینی پایگاه داده remap فعلی استفاده کنید.
void Paddleboat_addControllerRemapData(
const Paddleboat_Remap_Addition_Mode addMode,
const int32_t remapTableEntryCount,
const Paddleboat_Controller_Mapping_Data* mappingData)
پارامتر | توضیحات |
---|---|
addMode | قوانین اضافه مورد استفاده برای عملیات. مقادیر معتبر PADDLEBOAT_REMAP_ADD_MODE_DEFAULT یا PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL هستند |
remapTableEntryCount | اندازه آرایه عناصر Paddleboat_Controller_Mapping_Data در پارامتر mappingData ارسال شده است. |
mappingData | اشاره گر به آرایه ای از عناصر Paddleboat_Controller_Mapping_Data . |
حالت های اضافه
اگر PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL
در addMode
مشخص شده باشد، پایگاه داده موجود حذف شده و با محتوای آرایه جدید جایگزین می شود.
اگر PADDLEBOAT_REMAP_ADD_MODE_DEFAULT
در addMode
مشخص شده باشد، معیارهای زیر برای هر عنصر در آرایه ارسال شده در mappingData
اعمال می شود:
- اگر
Paddleboat_getControllerRemapTableData
منحصر به فرد باشد (به عبارت دیگر،vendorId
وproductId
از قبل وجود ندارد، یا وجود دارد اما دارای محدودهminApi
یاmaxApi
غیر همپوشانی است)، ورودی به پایگاه داده داخلی اضافه می شود. - اگر
Paddleboat_getControllerRemapTableData
منحصربهفرد نباشد (vendorId
وproductId
وجود دارد و یک همپوشانیminApi
یاmaxApi
وجود دارد)، ورودی موجود در پایگاه داده داخلی را جایگزین میکند .
ساختار Paddleboat_Controller_Mapping_Data
عبارت است از:
typedef struct Paddleboat_Controller_Mapping_Data {
int16_t minimumEffectiveApiLevel; /** Min. API level for this entry */
int16_t maximumEffectiveApiLevel; /** Max. API level, 0 = no max */
int32_t vendorId; /** VendorID of the controller device for this entry */
int32_t productId; /** ProductID of the controller device for this entry */
int32_t flags; /** Flag bits, will be ORed with
* Paddleboat_Controller_Info.controllerFlags */
/** AMOTION_EVENT_AXIS value for the corresponding Paddleboat control axis,
* or PADDLEBOAT_AXIS_IGNORED if unsupported. */
uint16_t axisMapping[PADDLEBOAT_MAPPING_AXIS_COUNT];
/** Button to set on positive or negative axis value,
* PADDLEBOAT_AXIS_BUTTON_IGNORED if none. */
uint8_t axisPositiveButtonMapping[PADDLEBOAT_MAPPING_AXIS_COUNT];
uint8_t axisNegativeButtonMapping[PADDLEBOAT_MAPPING_AXIS_COUNT];
/** AKEYCODE_ value corresponding with the corresponding Paddleboat button.
* PADDLEBOAT_BUTTON_IGNORED if unsupported. */
uint16_t buttonMapping[PADDLEBOAT_BUTTON_COUNT];
} Paddleboat_Controller_Mapping_Data;
نمونه نقشه برداری
موارد زیر یک Paddleboat_Controller_Mapping_Data
را نشان می دهد که برای توصیف یک کنترلر Google Stadia پر شده است:
#define PADDLEBOAT_AXIS_BUTTON_DPAD_UP 0
#define PADDLEBOAT_AXIS_BUTTON_DPAD_LEFT 1
#define PADDLEBOAT_AXIS_BUTTON_DPAD_DOWN 2
#define PADDLEBOAT_AXIS_BUTTON_DPAD_RIGHT 3
#define PADDLEBOAT_AXIS_BUTTON_L2 9
#define PADDLEBOAT_AXIS_BUTTON_R2 12
static const Paddleboat_Controller_Mapping_Data stadia_controller_map[] = {
16, 0, 0x18d1, 0x9400, PADDLEBOAT_CONTROLLER_LAYOUT_STANDARD,
{
/* LX */ AMOTION_EVENT_AXIS_X,
/* LY */ AMOTION_EVENT_AXIS_Y,
/* RX */ AMOTION_EVENT_AXIS_Z,
/* RY */ AMOTION_EVENT_AXIS_RZ,
/* L1 */ PADDLEBOAT_AXIS_IGNORED,
/* L2 */ AMOTION_EVENT_AXIS_BRAKE,
/* R1 */ PADDLEBOAT_AXIS_IGNORED,
/* R2 */ AMOTION_EVENT_AXIS_GAS,
/* HX */ AMOTION_EVENT_AXIS_HAT_X,
/* HY */ AMOTION_EVENT_AXIS_HAT_Y,
},
{
/* LX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* LY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* RX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* RY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* L1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* L2 */ PADDLEBOAT_AXIS_BUTTON_L2,
/* R1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* R2 */ PADDLEBOAT_AXIS_BUTTON_R2,
/* HX */ PADDLEBOAT_AXIS_BUTTON_DPAD_RIGHT,
/* HY */ PADDLEBOAT_AXIS_BUTTON_DPAD_DOWN,
},
{
/* LX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* LY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* RX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* RY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* L1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* L2 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* R1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* R2 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
/* HX */ PADDLEBOAT_AXIS_BUTTON_DPAD_LEFT,
/* HY */ PADDLEBOAT_AXIS_BUTTON_DPAD_UP,
},
{
/* UP */ AKEYCODE_DPAD_UP,
/* LEFT */ AKEYCODE_DPAD_LEFT,
/* DOWN */ AKEYCODE_DPAD_DOWN,
/* RIGHT */ AKEYCODE_DPAD_RIGHT,
/* A */ AKEYCODE_BUTTON_A,
/* B */ AKEYCODE_BUTTON_B,
/* X */ AKEYCODE_BUTTON_X,
/* Y */ AKEYCODE_BUTTON_Y,
/* L1 */ AKEYCODE_BUTTON_L1,
/* L2 */ AKEYCODE_BUTTON_L2,
/* L3 */ AKEYCODE_BUTTON_THUMBL,
/* R1 */ AKEYCODE_BUTTON_R1,
/* R2 */ AKEYCODE_BUTTON_R2,
/* R3 */ AKEYCODE_BUTTON_THUMBR,
/* SELECT */ AKEYCODE_BUTTON_SELECT,
/* START */ AKEYCODE_BUTTON_START,
/* SYSTEM */ AKEYCODE_BUTTON_MODE,
/* TOUCHP */ PADDLEBOAT_BUTTON_IGNORED,
/* AUX1 */ PADDLEBOAT_BUTTON_IGNORED,
/* AUX2 */ PADDLEBOAT_BUTTON_IGNORED,
/* AUX3 */ PADDLEBOAT_BUTTON_IGNORED,
/* AUX4 */ PADDLEBOAT_BUTTON_IGNORED
}
};