गेम कंट्रोलर लाइब्रेरी, कंट्रोलर डिवाइसों का एक इंटरनल डेटाबेस बनाए रखती है. इसका इस्तेमाल बटन, मोशन ऐक्सिस लेआउट, पहचाने गए कंट्रोलर के लिए मैपिंग, और पहचाने नहीं गए कंट्रोलर के लिए डिफ़ॉल्ट मैपिंग को कॉन्फ़िगर करने के लिए किया जाता है. डेटाबेस में कई लोकप्रिय कंट्रोलर शामिल हैं. हालांकि, ऐसा हो सकता है कि इसमें किसी गेम से जुड़े सभी डिवाइस शामिल न हों. गेम कंट्रोलर लाइब्रेरी में, पसंद के मुताबिक बनाने की सुविधा उपलब्ध होती है. इसके लिए, ऐसे फ़ंक्शन इस्तेमाल किए जा सकते हैं जो ये काम कर सकते हैं:
- मौजूदा मैपिंग डेटाबेस को वापस पाएं.
- मौजूदा डेटाबेस में एंट्री जोड़ें.
- मौजूदा डेटाबेस एंट्री बदलें.
- मौजूदा पूरे डेटाबेस को नए डेटाबेस से बदलें.
किसी डिवाइस की पहचान करना
कंट्रोलर डिवाइसों की पहचान, उनकी productId
और vendorId
वैल्यू से होती है.
पहचाने गए हर कंट्रोलर डिवाइस के लिए, डेटाबेस में कम से कम एक एंट्री होनी चाहिए. साथ ही, उसमें productId
और vendorId
की वैल्यू मेल खानी चाहिए. कंट्रोलर मैपिंग स्ट्रक्चर में ऐसे फ़ील्ड शामिल होते हैं जो एंट्री के लिए, Android API की ज़रूरी कम से कम और ज़्यादा से ज़्यादा रेंज तय करते हैं. डेटाबेस में, एक ही productId
और vendorId
वाली कई एंट्री हो सकती हैं. हालांकि, ऐसा तब तक ही हो सकता है, जब तक उनकी एपीआई रेंज कम से कम और ज़्यादा से ज़्यादा यूनीक हो.
रीमैप किए गए मौजूदा डेटा को पढ़ना
रीमैप किए गए मौजूदा डेटा को वापस पाने के लिए, Paddleboat_getControllerRemapTableData
फ़ंक्शन का इस्तेमाल करें.
int32_t Paddleboat_getControllerRemapTableData(
const int32_t destRemapTableEntryCount,
Paddleboat_Controller_Mapping_Data* mappingData)
Paddleboat_getControllerRemapTableData
, इंटरनल डेटाबेस में मौजूद रीमैप की कुल एंट्री दिखाता है.
पैरामीटर | ब्यौरा |
---|---|
destRemapTableEntryCount
|
mappingData पैरामीटर में पास किए गए Paddleboat_Controller_Mapping_Data एलिमेंट का कलेक्शन साइज़. |
mappingData
|
Paddleboat_Controller_Mapping_Data एलिमेंट की कैटगरी का पॉइंटर. |
अगर destRemapTableEntryCount
, रीमैप की गई कुल एंट्री की संख्या से कम है, तो 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
|
mappingData पैरामीटर में पास किए गए Paddleboat_Controller_Mapping_Data एलिमेंट का कलेक्शन साइज़. |
mappingData
|
Paddleboat_Controller_Mapping_Data एलिमेंट की कैटगरी का पॉइंटर. |
जोड़ने के मोड
अगर addMode
में PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL
को तय किया गया है, तो मौजूदा डेटाबेस मिट जाएगा और उसकी जगह नए ऐरे का कॉन्टेंट आ जाएगा.
अगर addMode
में PADDLEBOAT_REMAP_ADD_MODE_DEFAULT
एट्रिब्यूट की वैल्यू दी गई है, तो 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
}
};