Game Controller kitaplığı, düğmeleri, hareket ekseni düzenini, tanınan kontrol cihazları için eşlemeyi ve tanınmayan kontrol cihazları için varsayılan eşlemeyi yapılandırmak üzere kullanılan bir dahili kontrol cihazı veritabanını tutar. Veritabanında birçok popüler kumanda yer alır ancak belirli bir oyunla ilgili tüm cihazlar yer almayabilir. Oyun kumandası kitaplığı, aşağıdaki işlevlerle özelleştirmeyi destekler:
- Mevcut eşleme veritabanını alın.
- Mevcut veritabanına giriş ekleme
- Mevcut veritabanı girişlerini değiştirin.
- Mevcut veritabanının tamamını yenisiyle değiştirin.
Cihaz tanımlama
Denetleyici cihazlar, productId ve vendorId değerleriyle tanımlanır.
Tanınan her kontrol cihazının veritabanında eşleşen productId ve vendorId ile en az bir girişi olmalıdır. Denetleyici eşleme yapısı, giriş için uygun minimum ve maksimum Android API aralığını belirten alanlar içerir. Aynı productId ve vendorId değerlerine sahip birden fazla giriş, benzersiz minimum ve maksimum API aralıklarına sahip oldukları sürece veritabanında bulunabilir.
Mevcut yeniden eşleme verilerinizi okuma
Mevcut yeniden eşleme verilerini almak için Paddleboat_getControllerRemapTableData işlevini kullanın.
int32_t Paddleboat_getControllerRemapTableData(
const int32_t destRemapTableEntryCount,
Paddleboat_Controller_Mapping_Data* mappingData)
Paddleboat_getControllerRemapTableData, dahili veritabanında bulunan toplam yeniden eşleme giriş sayısını döndürür.
| Parametre | Açıklama |
|---|---|
destRemapTableEntryCount
|
mappingData parametresinde iletilen Paddleboat_Controller_Mapping_Data öğelerinin dizi boyutu. |
mappingData
|
Paddleboat_Controller_Mapping_Data öğeleri dizisinin işaretçisi. |
destRemapTableEntryCount, yeniden eşleme girişlerinin toplam sayısından küçükse yalnızca destRemapTableEntryCount ile belirtilen giriş sayısı mappingData'ye kopyalanır.
Yeniden haritalandırma verileri ekleme veya değiştirme
Yeniden eşleme girişleri eklemek veya mevcut yeniden eşleme veritabanını değiştirmek için Paddleboat_addControllerRemapData işlevini kullanın.
void Paddleboat_addControllerRemapData(
const Paddleboat_Remap_Addition_Mode addMode,
const int32_t remapTableEntryCount,
const Paddleboat_Controller_Mapping_Data* mappingData)
| Parametre | Açıklama |
|---|---|
addMode
|
İşlem için kullanılan toplama kuralları.
Geçerli değerler PADDLEBOAT_REMAP_ADD_MODE_DEFAULT veya PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL şeklindedir. |
remapTableEntryCount
|
mappingData parametresinde iletilen Paddleboat_Controller_Mapping_Data öğelerinin dizi boyutu. |
mappingData
|
Paddleboat_Controller_Mapping_Data öğeleri dizisinin işaretçisi. |
Toplama modları
addMode içinde PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL belirtilirse mevcut veritabanı silinir ve yeni dizinin içeriğiyle değiştirilir.
PADDLEBOAT_REMAP_ADD_MODE_DEFAULT, addMode içinde belirtilmişse mappingData içinde iletilen dizideki her öğeye aşağıdaki ölçütler uygulanır:
- Bir
Paddleboat_getControllerRemapTableDatabenzersizse (diğer bir deyişle,vendorIdveproductIdhenüz mevcut değilse veya mevcutsa ancak çakışmayan birminApiya damaxApiaralığına sahipse) giriş dahili veritabanına eklenir. Paddleboat_getControllerRemapTableDatabenzersiz değilse (vendorIdveproductIdmevcutsa veminApiveyamaxApiçakışması varsa) dahili veritabanındaki mevcut girişi değiştirir.
Paddleboat_Controller_Mapping_Data yapısı şöyledir:
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;
Eşleme örneği
Aşağıdaki örnekte, Google Stadia Kumanda'yı açıklamak için Paddleboat_Controller_Mapping_Data doldurulmuştur:
#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
}
};