Entrada, áudio e interface
Associação de ações, controles, atalhos globais, reprodução de áudio e widgets TGUI.
Nesta página
Uma ação, várias entradas
O InputManager usa identificadores inteiros de ação e um unordered_multimap de bindings. Uma ação pode ser associada a mais de uma entrada. Pressed(action) retorna verdadeiro quando alguma das associações está pressionada.
Os tipos de binding da revisão de referência são:
struct Keyboard {
sf::Keyboard::Scan key;
};
struct Mouse {
sf::Mouse::Button button;
};
struct Gamepad {
GamepadButton button;
int id = 0;
};
struct Axis {
sf::Joystick::Axis axis;
float threshold = 0.5f;
int id = 0;
};
using Binding = std::variant<Keyboard, Mouse, Gamepad, Axis>;
Esses tipos pertencem ao namespace Input. A consulta verifica o estado atual, não detecta automaticamente o instante em que um botão foi pressionado. Para eventos discretos, as cenas também dispõem de OnEvent.
Os eixos são normalizados dividindo seu valor por 100 e comparados com o limiar positivo ou negativo configurado. O Engine limpa os bindings ao mudar de cena; cada jogo deve configurar os seus novamente ao iniciar.
Controles e cursor
O código contém tabelas de botões lógicos para Xbox e PlayStation. Ele seleciona a tabela Xbox ao identificar o fabricante Microsoft e usa a tabela PlayStation nos demais casos. Essa heurística não garante o mesmo mapeamento para todos os controles.
Os gatilhos L2/R2 não têm botão na tabela Xbox: sua entrada aparece como indisponível nesse mapeamento de botões. Eixos são um tipo de binding independente.
O CursorManager permite mover o cursor com o analógico, respeitando joystickDeadzone. Ele também converte a posição do mouse para as coordenadas de uma vista. O GuiManager transforma o botão lógico South em eventos de clique para os widgets.
Atalhos globais
| Entrada | Ação |
|---|---|
| F12 | Salvar uma captura PNG. |
| R | Reiniciar a cena ativa. |
| Escape / Start do controle | Alternar a sobreposição de pausa. |
| M / Select do controle | Solicitar Menu; essa cena não está registrada na revisão documentada. |
Os atalhos são processados em EngineVisitor. A perda de foco pausa a cena. Ao recuperar o foco, ela só é retomada se a sobreposição não continuar aberta.
Áudio da revisão de referência
O AudioManager expõe volume global e posição/direção do listener por meio do SFML. O ResourceManager fornece buffers de som e objetos de música; a cena possui as fontes e controla sua reprodução.
void AudioManager::SetGlobalVolume(float volume) {
sf::Listener::setGlobalVolume(volume);
}
Nesta revisão, os jogos coordenam seu próprio áudio durante OnPause e OnCleanup. Não há um mixer de barramentos configurável nem um editor de áudio documentado.
Trabalho local em desenvolvimento
Durante a auditoria, foram encontrados AudioGroup.h e AudioGroup.cpp como arquivos ainda não incluídos no commit de referência. Eles agrupam fontes por cena, distinguem canais Music/Effect e lembram quais estavam reproduzindo antes da pausa.
Também há alterações locais para um relógio compartilhado de cooldowns. São implementações observadas, mas não fazem parte dos exemplos públicos deste guia. Não use essas APIs esperando encontrá-las no commit vinculado.
Interface TGUI
O GuiManager conecta o TGUI à janela SFML. Ele carrega Content/Themes/Dark.txt, aplica a fonte Relidux.otf, habilita a navegação por Tab e fornece métodos para adicionar ou remover widgets.
A sobreposição cria botões a partir de OverlaySelection usando magic_enum. A seleção é consumida uma vez, e o Engine executa a ação correspondente. A GUI é desenhada após o pós-processamento da cena.