ספריית בקרי המשחקים כוללת מסד נתונים פנימי של בקר מכשירים, שמשמשת להגדרת לחצנים, פריסה של צירי תנועה, מיפוי עבור בקרים מוכרים ומיפוי ברירת מחדל לבקרים לא מזוהים. מסד הנתונים כולל בקרים פופולריים רבים, אך עשוי שלא לכלול את כל המכשירים שרלוונטיות למשחק מסוים. הספרייה של בקר המשחקים תומכת בהתאמה אישית עם פונקציות שיכולות:
- מאחזרים את מסד נתוני המיפוי הנוכחי.
- מוסיפים את הרשומות למסד הנתונים הקיים.
- החלפת הרשומות הקיימות במסד הנתונים.
- מחליפים את כל מסד הנתונים הנוכחי במסד הנתונים החדש.
זיהוי מכשיר
מכשירים עם שלט רחוק מזוהים באמצעות הערכים productId
ו-vendorId
שלהם.
לכל מכשיר בקר מזוהה יש לפחות רשומה אחת במסד הנתונים עם מאפיין
תואמים productId
ו-vendorId
. מבנה המיפוי של הבקר כולל
שדות המציינים טווח מינימלי ומקסימלי ל-Android API עבור
רשומה. ייתכן שקיימים מספר רשומות עם אותם productId
ו-vendorId
ב-
במסד הנתונים, כל עוד יש להם טווחי API מינימליים ומקסימליים ייחודיים.
קריאת הנתונים הנוכחיים של המיפוי מחדש
להשתמש בפונקציה Paddleboat_getControllerRemapTableData
כדי
לאחזר את הנתונים הנוכחיים של המיפוי מחדש.
int32_t Paddleboat_getControllerRemapTableData(
const int32_t destRemapTableEntryCount,
Paddleboat_Controller_Mapping_Data* mappingData)
הפונקציה Paddleboat_getControllerRemapTableData
מחזירה את המספר הכולל של מיפוי מחדש.
שקיימים במסד הנתונים הפנימי.
פרמטר | תיאור |
---|---|
destRemapTableEntryCount
|
גודל המערך של
Paddleboat_Controller_Mapping_Data רכיבים
מועבר בפרמטר mappingData . |
mappingData
|
מצביע למערך של
רכיבי Paddleboat_Controller_Mapping_Data . |
אם destRemapTableEntryCount
קטן מהמספר הכולל של הרשומות למיפוי מחדש,
רק מספר הרשומות שצוין על ידי destRemapTableEntryCount
מועתק
אל mappingData
.
הוספה או החלפה של נתוני מיפוי מחדש
כדי להוסיף, משתמשים בפונקציה Paddleboat_addControllerRemapData
למפות מחדש את הרשומות או להחליף את מסד הנתונים הנוכחי למיפוי מחדש.
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
}
};