Die Game Controller-Bibliothek verwaltet eine interne Controller-Datenbank. Geräte, mit denen Schaltflächen, das Layout der Bewegungsachsen, die Zuordnung von erkannte Controller und eine Standardzuordnung für nicht erkannte Controller. Die Datenbank viele gängige Controller enthält, aber möglicherweise nicht alle Geräte die für ein bestimmtes Spiel relevant sind. Die Game Controller-Bibliothek unterstützt Anpassungen Funktionen, die folgende Möglichkeiten bieten:
- Rufen Sie die aktuelle Zuordnungsdatenbank ab.
- Fügen Sie der vorhandenen Datenbank Einträge hinzu.
- Ersetzen Sie vorhandene Datenbankeinträge.
- Die gesamte aktuelle Datenbank durch eine neue ersetzen.
Gerät identifizieren
Controller werden anhand ihrer Werte für productId
und vendorId
identifiziert.
Für jedes erkannte Controller-Gerät ist mindestens ein Eintrag in der Datenbank mit einem
Übereinstimmung mit productId
und vendorId
. Die Controller-Zuordnungsstruktur umfasst
Felder, die einen geeigneten minimalen und maximalen Android API-Bereich für die
zu erstellen. Mehrere Einträge mit den gleichen productId
und vendorId
können vorhanden sein in
solange sie eindeutige minimale und maximale API-Bereiche haben.
Aktuelle Daten für neu kartierte Karten lesen
Mit der Funktion Paddleboat_getControllerRemapTableData
können Sie
um die aktuellen Daten
für die Neuzuordnung abzurufen.
int32_t Paddleboat_getControllerRemapTableData(
const int32_t destRemapTableEntryCount,
Paddleboat_Controller_Mapping_Data* mappingData)
Paddleboat_getControllerRemapTableData
gibt die Gesamtzahl der neu kartierten Elemente zurück.
die in der internen Datenbank
vorhanden sind.
Parameter | Beschreibung |
---|---|
destRemapTableEntryCount
|
Die Array-Größe von
Paddleboat_Controller_Mapping_Data -Elemente
mappingData übergeben wird. |
mappingData
|
Ein Zeiger auf ein Array von
Paddleboat_Controller_Mapping_Data -Elemente. |
Wenn destRemapTableEntryCount
kleiner als die Gesamtzahl der Einträge in der Neuzuordnung ist,
nur die durch destRemapTableEntryCount
angegebene Anzahl von Einträgen wird kopiert.
in mappingData
ein.
Neuzuordnungsdaten hinzufügen oder ersetzen
Verwenden Sie die Funktion Paddleboat_addControllerRemapData
, um
neu zuordnen oder die aktuelle Datenbank für die Neuzuordnung ersetzen.
void Paddleboat_addControllerRemapData(
const Paddleboat_Remap_Addition_Mode addMode,
const int32_t remapTableEntryCount,
const Paddleboat_Controller_Mapping_Data* mappingData)
Parameter | Beschreibung |
---|---|
addMode
|
Die für den Vorgang verwendeten Additionsregeln.
Gültige Werte:
PADDLEBOAT_REMAP_ADD_MODE_DEFAULT oder
PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL |
remapTableEntryCount
|
Die Array-Größe von
Paddleboat_Controller_Mapping_Data -Elemente
mappingData übergeben wird. |
mappingData
|
Ein Zeiger auf ein Array von
Paddleboat_Controller_Mapping_Data -Elemente. |
Hinzufügungsmodi
Wenn PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL
in addMode
angegeben ist,
vorhandene Datenbank gelöscht und durch den Inhalt des neuen Arrays ersetzt.
Wenn PADDLEBOAT_REMAP_ADD_MODE_DEFAULT
in addMode
angegeben ist, gilt Folgendes:
Kriterien werden auf jedes Element im Array angewendet, das in mappingData
übergeben wird:
- Wenn eine
Paddleboat_getControllerRemapTableData
eindeutig ist (d. h. der WertvendorId
undproductId
sind nicht bereits vorhanden oder existieren, haben jedoch einen nicht überlappenderminApi
- odermaxApi
-Bereich), wird der Eintrag zum der internen Datenbank. - Wenn
Paddleboat_getControllerRemapTableData
nicht eindeutig ist (vendorId
undproductId
vorhanden und es eine Überschneidung vonminApi
odermaxApi
gibt, gilt Folgendes: ersetzt den vorhandenen Eintrag in der internen Datenbank.
Die Struktur Paddleboat_Controller_Mapping_Data
sieht so aus:
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;
Zuordnungsbeispiel
Im Folgenden sehen Sie ein Paddleboat_Controller_Mapping_Data
, das für
beschreiben Sie einen 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
}
};