ไลบรารีเกมคอนโทรลเลอร์จะดูแลรักษาฐานข้อมูลภายในของตัวควบคุม อุปกรณ์ ซึ่งใช้เพื่อกำหนดค่าปุ่ม เลย์เอาต์แกนการเคลื่อนไหว การแมป ตัวควบคุมที่รู้จัก และการแมปเริ่มต้นสำหรับตัวควบคุมที่ไม่รู้จัก ฐานข้อมูลมีตัวควบคุมยอดนิยมหลายรายการ แต่อาจไม่รวมอุปกรณ์ทั้งหมด ที่เกี่ยวข้องกับเกมใดเกมหนึ่ง ไลบรารีเกมคอนโทรลเลอร์สนับสนุนการปรับแต่ง พร้อมด้วยฟังก์ชันที่ช่วยทำสิ่งต่อไปนี้ได้
- เรียกดูฐานข้อมูลการจับคู่ปัจจุบัน
- เพิ่มรายการลงในฐานข้อมูลที่มีอยู่
- แทนที่รายการฐานข้อมูลที่มีอยู่
- แทนที่ฐานข้อมูลปัจจุบันทั้งหมดด้วยฐานข้อมูลใหม่
ระบุอุปกรณ์
อุปกรณ์ตัวควบคุมจะระบุด้วยค่า productId
และ vendorId
อุปกรณ์ตัวควบคุมที่รู้จักแต่ละเครื่องมีข้อมูลอย่างน้อย 1 รายการในฐานข้อมูล
การจับคู่ productId
กับ vendorId
โครงสร้างการแมปตัวควบคุมประกอบด้วย
ที่ระบุช่วง 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 Controller:
#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
}
};