Oyun Kumandası kitaplığının dahili bir denetleyici veritabanı vardır hareket ekseni düzenini, harita oluşturma hareketlerini ve hatta tanınan denetleyicileri ve tanınmayan denetleyiciler için varsayılan eşlemeyi kullanır. İlgili içeriği oluşturmak için kullanılan veritabanı birçok popüler kumanda içerir, ancak tüm cihazları kapsamayabilir olduğunu varsayalım. Oyun Kumandası kitaplığı özelleştirmeyi destekler Şu işlemleri yapabilen işlevlerle:
- Mevcut eşleme veritabanını alın.
- Mevcut veritabanına giriş ekleyin.
- Mevcut veritabanı girişlerini değiştirin.
- Mevcut veritabanının tamamını yenisiyle değiştirin.
Bir cihazı tanımlayın
Kumanda cihazları, productId
ve vendorId
değerleriyle tanımlanır.
Tanınan her kumanda cihazının, veritabanında
productId
ve vendorId
eşleşiyor. Denetleyici eşleme yapısında
Android API'leri için uygun bir minimum ve maksimum Android API aralığı belirten
girin. Aynı productId
ve vendorId
değerlerine sahip birden çok giriş olabilir
(benzersiz minimum ve maksimum API aralıklarına sahip oldukları sürece) veritabanını yeniden düzenleyebilir.
Mevcut yeniden harita verilerinizi okuma
Paddleboat_getControllerRemapTableData
işlevini kullanarak
mevcut yeniden eşleme verilerini alabilirsiniz.
int32_t Paddleboat_getControllerRemapTableData(
const int32_t destRemapTableEntryCount,
Paddleboat_Controller_Mapping_Data* mappingData)
Paddleboat_getControllerRemapTableData
, toplam yeniden eşleme sayısını döndürür
dahili veritabanında bulunan girişlerin sayısı.
Parametre | Açıklama |
---|---|
destRemapTableEntryCount
|
Dizi boyutu
Paddleboat_Controller_Mapping_Data öğe
mappingData parametresinde geçirildi. |
mappingData
|
İşaretçi:
Paddleboat_Controller_Mapping_Data öğeleri. |
destRemapTableEntryCount
, toplam yeniden eşleme girişlerinin sayısından azsa
yalnızca destRemapTableEntryCount
tarafından belirtilen giriş sayısı kopyalanır
mappingData
konumuna eklendi.
Yeniden eşleme verileri ekle veya değiştir
Şunu eklemek için Paddleboat_addControllerRemapData
işlevini kullanın:
girişleri yeniden eşleyebilir veya mevcut yeniden eşleme veritabanını değiştirebilirsiniz.
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 ekleme kuralları.
Geçerli değerler:
PADDLEBOAT_REMAP_ADD_MODE_DEFAULT veya
PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL |
remapTableEntryCount
|
Dizi boyutu
Paddleboat_Controller_Mapping_Data öğe
mappingData parametresinde geçirildi. |
mappingData
|
İşaretçi:
Paddleboat_Controller_Mapping_Data öğeleri. |
Ekleme modları
addMode
içinde PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL
belirtilirse
veritabanı silinir ve yerine yeni dizinin içeriğiyle değiştirilir.
addMode
içinde PADDLEBOAT_REMAP_ADD_MODE_DEFAULT
belirtilirse aşağıdaki
ölçüt, mappingData
hücresinde geçirilen dizideki her bir öğeye uygulanır:
Paddleboat_getControllerRemapTableData
benzersizse (diğer bir deyişlevendorId
veproductId
mevcut değil ya da mevcut ancak birminApi
veyamaxApi
aralığı varsa) giriş, örneğidir.Paddleboat_getControllerRemapTableData
benzersiz değilse (vendorId
productId
varsa veminApi
veyamaxApi
çakışması varsa) dahili veritabanındaki mevcut girişin yerine geçer.
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ğıda, şununla doldurulan bir Paddleboat_Controller_Mapping_Data
gösterilmektedir:
Google Stadia Kumanda tanımlayın:
#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
}
};