> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GameInputGamepadInfo

> Referência da struct GameInputGamepadInfo: descreve o layout do gamepad, os rótulos físicos de cada botão, a contagem de botões extras e a contagem de eixos extras.

# GameInputGamepadInfo

Descreve as propriedades de um gamepad.

<a id="syntaxSection" />

## Sintaxe

```cpp theme={null}
struct GameInputGamepadInfo
{
    GameInputGamepadButtons supportedLayout;
    GameInputLabel          menuButtonLabel;
    GameInputLabel          viewButtonLabel;
    GameInputLabel          aButtonLabel;
    GameInputLabel          bButtonLabel;
    GameInputLabel          cButtonLabel;
    GameInputLabel          xButtonLabel;
    GameInputLabel          yButtonLabel;
    GameInputLabel          zButtonLabel;
    GameInputLabel          dpadUpLabel;
    GameInputLabel          dpadDownLabel;
    GameInputLabel          dpadLeftLabel;
    GameInputLabel          dpadRightLabel;
    GameInputLabel          leftShoulderButtonLabel;
    GameInputLabel          rightShoulderButtonLabel;
    GameInputLabel          leftThumbstickButtonLabel;
    GameInputLabel          rightThumbstickButtonLabel;
    uint32_t                extraButtonCount;
    uint32_t                extraAxisCount;
};
```

<a id="membersSection" />

### Membros

*supportedLayout*<br />
Tipo: [GameInputGamepadButtons](/pt-BR/reference/input/gameinput/enums/gameinputgamepadbuttons)

Descreve o layout do gamepad. Como os eixos têm traduções para botões, elas podem ser usadas para determinar quais eixos estão presentes no gamepad.

*menuButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão Menu.

*viewButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão Exibir.

*aButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão **A**.

*bButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão **B**.

*cButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão **C**.

*xButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão **X**.

*yButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão **Y**.

*zButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão **Z**.

*dpadUpLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do direcional para cima.

*dpadDownLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do direcional para baixo.

*dpadLeftLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do direcional para a esquerda.

*dpadRightLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do direcional para a direita.

*leftShoulderButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão de ombro esquerdo.

*rightShoulderButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do botão de ombro direito.

*leftThumbstickButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do direcional analógico esquerdo.

*rightThumbstickButtonLabel*<br />
Tipo: [GameInputLabel](/pt-BR/reference/input/gameinput/enums/gameinputlabel)

Rótulo físico do direcional analógico direito.

*extraButtonCount*<br />
Tipo: uint32\_t

O número de botões do dispositivo que não estão mapeados para botões do gamepad.

*extraAxisCount*<br />
Tipo: uint32\_t

O número de eixos do dispositivo que não estão mapeados para eixos do gamepad.

<a id="remarksSection" />

## Comentários

Essa estrutura é usada na estrutura [GameInputDeviceInfo](/pt-BR/reference/input/gameinput/structs/gameinputdeviceinfo).

`GameInputDeviceInfo` é usada pelo método [IGameInputDevice::GetDeviceInfo](/pt-BR/reference/input/gameinput/interfaces/igameinputdevice/methods/igameinputdevice_getdeviceinfo).

Para obter mais informações, confira [Dispositivos GameInput](/pt-BR/build/core-features/common/input/overviews/input-devices).

### Layout do gamepad

O GameInput é compatível com uma variedade de formatos de gamepad, em vez de limitar o suporte a um único layout padrão. Isso é exposto por meio do membro `supportedLayout` dessa estrutura como um campo de bits do tipo [GameInputGamepadButtons](/pt-BR/reference/input/gameinput/enums/gameinputgamepadbuttons). Os eixos também estão presentes nessa enumeração por meio das traduções de eixo para botão, como `GameInputGamepadLeftTriggerButton`. Para obter mais informações sobre essas traduções, confira [GameInputGamepadButtons](/pt-BR/reference/input/gameinput/enums/gameinputgamepadbuttons#remarks).

Não há um layout mínimo obrigatório para um gamepad, e ele pode ter qualquer combinação dos eixos e botões compatíveis. Espera-se que os botões ou eixos não compatíveis sejam deixados de lado e acessados como eixos ou botões extras.

Definimos alguns agrupamentos comuns de elementos de gamepad e layouts comuns como constantes. Eles podem ser usados para identificar rapidamente um layout comum, filtrar entradas específicas ou criar layouts personalizados. Para obter mais informações, confira [GameInputGamepadButtons](/pt-BR/reference/input/gameinput/enums/gameinputgamepadbuttons#constantsSection).

Como a variedade esperada de layouts e formatos compatíveis é ilimitada, há um pequeno conjunto de considerações e comportamentos que esperamos que os mapeamentos e os usuários de gamepad sigam:

* Para elementos que existem em pares, como direcionais analógicos, botões de ombro ou gatilhos, se houver apenas um presente no centro, o padrão deve ser tratá-lo como o elemento esquerdo. Se ele estiver posicionado à esquerda ou à direita do dispositivo, deverá ser mapeado de acordo.

* Para evitar ambiguidade devido a glifos diferentes, espera-se que os botões frontais sejam mapeados e lidos de acordo com sua posição física, independentemente do glifo, da seguinte forma:

<img src="https://mintcdn.com/microsoft-4404708b/5IpvKlT-jmAaVkeY/images/input-gamepad-facebutton-layouts.png?fit=max&auto=format&n=5IpvKlT-jmAaVkeY&q=85&s=37ae6f7821291d3118275f019d27685d" alt="Diretrizes de layout dos botões frontais do gamepad" height="600" data-path="images/input-gamepad-facebutton-layouts.png" />

O exemplo de código a seguir demonstra como determinar se um gamepad é compatível com um layout ou com uma entrada ou módulo específico.

```cpp theme={null}
bool IsStandardLayout(const GameInputGamepadInfo& gamepadInfo) noexcept
{
    // Supports the standard layout and no more
    return (gamepadInfo.supportedLayout & GameInputGamepadLayoutStandard) == GameInputGamepadLayoutStandard;
}

bool IsDpadSupported(const GameInputGamepadInfo& gamepadInfo) noexcept
{
    // Supports the D-pad module and more
    return gamepadInfo.supportedLayout & GameInputGamepadModuleDpad;
}

bool IsXButtonSupported(const GameInputGamepadInfo& gamepadInfo) noexcept
{
    return gamepadInfo.supportedLayout & GameInputGamepadX;
}
```

O exemplo de código a seguir demonstra como criar um layout personalizado e determinar se o gamepad é compatível com ele.

```cpp theme={null}
bool IsCustomLayoutSupported(const GameInputGamepadInfo& gamepadInfo) noexcept
{
    static const GameInputGamepadButtons customLayout =
        GameInputGamepadA |
        GameInputGamepadB |
        GameInputGamepadC |
        GameInputGamepadX |
        GameInputGamepadY |
        GameInputGamepadZ |
        GameInputGamepadModuleShoulders |
        GameInputGamepadModuleDpad;

    return (gamepadInfo.supportedLayout & customLayout) == GameInputGamepadLayoutCustom;
}
```

<a id="requirementsSection" />

## Requisitos

**Cabeçalho:** GameInput.h

**Plataformas compatíveis:** Windows, consoles da família XBOX One e consoles XBOX Series

<a id="seealsoSection" />

## Confira também

[Visão geral do GameInput](/pt-BR/build/core-features/common/input/overviews/input-overview)\
[GameInput](/pt-BR/reference/input/gameinput/gameinput_members)

## Histórico de versões

| Versão | Alterações |
| - | - |
| **v3** | **Adicionados** `supportedLayout` (bitmask GameInputGamepadButtons), `cButtonLabel`, `zButtonLabel`, `extraButtonCount`, `extraAxisCount`. |
| **v0** | Introduzido. |

## Apêndice: versões anteriores

### v0, v1, v2

```cpp theme={null}
struct GameInputGamepadInfo
{
    GameInputLabel menuButtonLabel;
    GameInputLabel viewButtonLabel;
    GameInputLabel aButtonLabel;
    GameInputLabel bButtonLabel;
    GameInputLabel xButtonLabel;
    GameInputLabel yButtonLabel;
    GameInputLabel dpadUpLabel;
    GameInputLabel dpadDownLabel;
    GameInputLabel dpadLeftLabel;
    GameInputLabel dpadRightLabel;
    GameInputLabel leftShoulderButtonLabel;
    GameInputLabel rightShoulderButtonLabel;
    GameInputLabel leftThumbstickButtonLabel;
    GameInputLabel rightThumbstickButtonLabel;
};
```


## Related topics

- [GameInputGamepadInfo](/reference/input/gameinput/structs/gameinputgamepadinfo.md)
- [GameInput](/reference/input/gameinput/gameinput_members.md)
- [GameInputDeviceInfo](/reference/input/gameinput/structs/gameinputdeviceinfo.md)
- [GameInputGamepadAxes](/reference/input/gameinput/enums/gameinputgamepadaxes.md)
- [IGameInputMapper::GetGamepadAxisMappingInfo](/reference/input/gameinput/interfaces/igameinputmapper/methods/igameinputmapper_getgamepadaxismappinginfo.md)
