Arquitetura do fluxo de entrada
O GameInput é construído em torno do conceito de um fluxo de entrada: a entrada de todos os dispositivos conectados ao sistema é direcionada para um único fluxo contíguo de eventos de entrada, na ordem em que a entrada ocorreu. Quando vários dispositivos geram entrada simultaneamente, isso resulta em uma intercalação natural dos eventos de entrada. Veja a seguir um exemplo de fluxo de entrada de vários dispositivos de entrada.
- Tocar duas vezes em um botão pode ser mapeado para um combo/movimento diferente de um único toque.
- A ordem em que dois botões foram pressionados pode importar.
- O tempo decorrido entre dois pressionamentos de botão pode importar.
Interfaces
A API GameInput é exposta por meio de uma coleção de interfaces relacionadas, de forma semelhante às APIs de gráficos e áudio, conforme mostrado no diagrama a seguir.
-
IGameInputé a interface base obtida chamando a função de fábricaGameInputCreate. Ela contém métodos para recuperar leituras do fluxo de entrada, registrar retornos de chamada e acessar outras funcionalidades globais. -
IGameInputReadingrepresenta um único elemento no fluxo de entrada. Ela contém métodos para recuperar os dados de estado de entrada armazenados na leitura e para acessar o dispositivo que gerou a leitura. As leituras também são usadas como pontos de referência dentro do fluxo de entrada, ao avançar e retroceder pelas outras leituras do fluxo. -
IGameInputDevicerepresenta um único dispositivo de entrada conectado ao sistema. Ela contém métodos para recuperar as propriedades e o estado atual do dispositivo, além de métodos para controlar a resposta háptica e de força no dispositivo. Também contém métodos para executar E/S bruta de baixo nível no dispositivo.
Assim como as APIs de gráficos e áudio, o GameInput não é uma API COM verdadeira, embora exponha interfaces derivadas de IUnknown. Esse estilo de API às vezes é chamado de “COM lite” ou “nano-COM”. Embora IUnknown seja usado para contagem de referências e reflexão, a infraestrutura de runtime do COM não é usada pelo GameInput. Especificamente, isso significa o seguinte.
- Os aplicativos não chamam
CoInitializenemCoCreateInstancepara obter instâncias de objetos. - Recursos do COM, como agregação e implementações de interface fornecidas pelo chamador, não são suportados.
- Não há suporte a marshaling entre processos nem modelo de apartment/threading. Todos os objetos são ágeis.
- Os ponteiros de interface podem ser comparados diretamente para verificar a identidade do objeto, sem passar por IUnknown.
- Os métodos não precisam retornar códigos
HRESULT, o que geralmente leva a assinaturas de função mais simples.
