Classe que organiza entradas do usuário.
Mais...
#include <InputManager.h>
Classe que organiza entradas do usuário.
O InputManager organiza internamente as várias formas om as quais o usuário pode interafir com o programa. Sendo elas:
- Botões do teclado
- Posição do mouse
- Cliques do mouse
- Scroll do mouse Observação: Os métodos que trabalham com o teclado precisam ter seus índices ajustados conforme o documentado em keyState. Para tal a função macro AJUST_KEY foi feita.
InputManager::InputManager |
( |
| ) |
|
|
private |
Inicializa os atributos.
Todos os atributos internos não iniciados com zero ou falso, dependendo do tipo.
InputManager::~InputManager |
( |
| ) |
|
|
private |
Destrutor.
Como todos os atributos dessa classe são alocados estaticamente, nada precisa ser feito.
bool InputManager::ButtonPress |
( |
int |
button | ) |
const |
Informa se um botão do controle foi pressionado no frame corrente.
- Parâmetros
-
button | Botão do controle cujo o estado é requerido |
- Retorna
- Booleano que informa se o botão foi pressionado ou não no frame corrente.
Retorna verdadeiro se o controllerState do botão for falso E o mouseUpdate do botão for igual ao updateCounter. Caso contrário retorna-se o valor falso.
bool InputManager::ButtonRelease |
( |
int |
button | ) |
const |
Informa se um botão do controle foi solto no frame corrente.
- Parâmetros
-
button | Botão do controle cujo o estado é requierido |
- Retorna
- Booleano que informa se o botão foi solto ou não no frame corrente.
Retorna verdadeiro se o controllerState do botao for falso E o controllerUpdate do botão for igual ao updateCounter. Caso contrário retorna-se o valor falso.
Vec2 InputManager::GetControllerLeftStickState |
( |
| ) |
const |
Calcula o deslocamento do sticker esquerdo de um controle.
- Retorna
- Vetor bidimensional que informa a posição (x,y) do analógico esquerdo.
Vec2 InputManager::GetControllerRightStickState |
( |
| ) |
const |
Calcula o deslocamento do sticker direito de um controle.
- Retorna
- Vetor bidimensional que informa a posição (x,y) do analógico direito.
Obtém referência para a instância estática do Inputmanager.
- Retorna
- Referência para a instância estática do InputManager
O InputManager é um singleton, esse método retorna a instância estática do mesmo. Dentro do corpo desse método está a declaração dessa instância que é estática(no sentido de programação em C). Essa instância estática é retornada.
Vec2 InputManager::GetMousePos |
( |
void |
| ) |
const |
Informa em um Vec2 a posição (x, y) do mouse.
- Retorna
- Valor (x, y) do mouse
O eixo horizontal cresce para a direira e o eixo vertical cresce para baixo. O eixo horizontal decresce para a esquerda e o eixo vertical decresce para cima.
int InputManager::GetMouseX |
( |
void |
| ) |
const |
Informa o valor do eixo X do mouse.
- Retorna
- valor X do mouse na janela
Esse valor é zero na borda esquerda da janela, cresce para a direita, decresce para a esquerda.
int InputManager::GetMouseY |
( |
void |
| ) |
const |
Informa o valor do eixo Y do mouse.
- Retorna
- valor Y do mouse na janela
Esse valor é zero na borda superior da janela, cresce para a baixo, decresce para a cima.
bool InputManager::IsButtonDown |
( |
int |
button | ) |
const |
Informa se um botão do controle está pressionada no momento.
- Parâmetros
-
button | Botão do mouse cujo o estado é requierido |
- Retorna
- Booleano que informa se o botão está pressionado ou não.
Retorna verdadeiro se o controllerState do botão for verdadeiro. Caso contrário retorna-se o valor falso.
bool InputManager::IsButtonUp |
( |
int |
button | ) |
const |
Informa se um botão do controle está NÃO pressionada no momento.
- Parâmetros
-
button | Botão do mouse cujo o estado é requierido |
- Retorna
- Booleano que informa se o botão está pressionado ou não.
Retorna verdadeiro se o controllerState do botão for falso. Caso contrário retorna-se o valor falso.
bool InputManager::IsControllerSticking |
( |
void |
| ) |
const |
Informa se algum sticker do controle está sendo deslocado nesse frame.
- Retorna
- Booleano que informa se algum sticker está em uso ou não.
Retorna verdadeiro se o mouseScroolUpdate for igual a updateCounter. Caso contrário retorna-se o valor falso.
bool InputManager::IsKeyDown |
( |
int |
key | ) |
const |
Informa se uma tecla do teclado está pressionada no momento.
- Parâmetros
-
key | Tecla do teclado cujo o estado é requierido |
- Retorna
- Booleano que informa se a tecla está pressionada ou não.
Primeiramente, converte-se o argumento a um válido no vetor através da função macro AJUST_KEY. Retorna verdadeiro se o keyState da tecla for verdadeiro e isso ocorrer nesse frame. Caso contrário retorna-se o valor falso.
bool InputManager::IsKeyUp |
( |
int |
key | ) |
const |
Informa se uma tecla do teclado NÃO está pressionada no momento.
- Parâmetros
-
key | Tecla do teclado cujo o estado é requierido |
- Retorna
- Booleano que informa se a tecla está pressionada ou não.
Primeiramente, converte-se o argumento a um válido no vetor através da função macro AJUST_KEY. Retorna verdadeiro se o keyState da tecla for falso. Caso contrário retorna-se o valor falso.
bool InputManager::IsMouseDown |
( |
int |
button | ) |
const |
Informa se um botão do mouse está pressionada no momento.
- Parâmetros
-
key | Botão do mouse cujo o estado é requierido |
- Retorna
- Booleano que informa se o botão está pressionado ou não.
Retorna verdadeiro se o mouseState do botão for verdadeiro. Caso contrário retorna-se o valor falso. Recomenda-se o uso das macros LEFT_MOUSE_BUTTON, RIGHT_MOUSE_BUTTON e MIDDLE_MOUSE_BUTTON.
bool InputManager::IsMouseScrolling |
( |
void |
| ) |
const |
Informa se o scroll dp do mouse foi acionado no frame atual.
- Retorna
- Booleano que informa se o scroll está em uso ou não.
Retorna verdadeiro se o mouseScroolUpdate for igual a updateCounter. Caso contrário retorna-se o valor falso.
bool InputManager::IsMouseUp |
( |
int |
button | ) |
const |
Informa se um botão do mouse NÃO está pressionada no momento.
- Parâmetros
-
key | Botão do mouse cujo o estado é requierido |
- Retorna
- Booleano que informa se o botão está pressionado ou não.
Retorna verdadeiro se o mouseState do botão for falso. Caso contrário retorna-se o valor falso. Recomenda-se o uso das macros LEFT_MOUSE_BUTTON, RIGHT_MOUSE_BUTTON e MIDDLE_MOUSE_BUTTON.
bool InputManager::KeyPress |
( |
int |
key | ) |
const |
Informa se uma tecla do teclado foi pressionada no frame corrente.
- Parâmetros
-
key | Tecla do teclado cujo o estado é requierido |
- Retorna
- Booleano que informa se a tecla foi pressionada ou não no frame corrente.
Primeiramente, converte-se o argumento a um válido no vetor através da função macro AJUST_KEY. Retorna verdadeiro se o keyState da tecla for verdadeiro E o keyUpdate da tecla for igual ao updateCounter. Caso contrário retorna-se o valor falso.
bool InputManager::KeyRelease |
( |
int |
key | ) |
const |
Informa se uma tecla do teclado foi solta no frame corrente.
- Parâmetros
-
key | Tecla do teclado cujo o estado é requierido |
- Retorna
- Booleano que informa se a tecla foi solta ou não no frame corrente.
Primeiramente, converte-se o argumento a um válido no vetor através da função macro AJUST_KEY. Retorna verdadeiro se o keyState da tecla for falso E o keyUpdate da tecla for igual ao updateCounter. Caso contrário retorna-se o valor falso.
bool InputManager::MousePress |
( |
int |
button | ) |
const |
Informa se um botão do mouse foi pressionado no frame corrente.
- Parâmetros
-
key | Botão do mouse cujo o estado é requierido |
- Retorna
- Booleano que informa se o botão foi pressionado ou não no frame corrente.
Retorna verdadeiro se o keyState da tecla for verdadeiro E o mouseUpdate do botão for igual ao updateCounter. Caso contrário retorna-se o valor falso. Recomenda-se o uso das macros LEFT_MOUSE_BUTTON, RIGHT_MOUSE_BUTTON e MIDDLE_MOUSE_BUTTON.
bool InputManager::MouseRelease |
( |
int |
button | ) |
const |
Informa se um botão do mouse foi solto no frame corrente.
- Parâmetros
-
key | Botão do mouse cujo o estado é requierido |
- Retorna
- Booleano que informa se o botão foi solta ou não no frame corrente.
Retorna verdadeiro se o keyState da tecla for falso E o mouseUpdate do botão for igual ao updateCounter. Caso contrário retorna-se o valor falso. Recomenda-se o uso das macros LEFT_MOUSE_BUTTON, RIGHT_MOUSE_BUTTON e MIDDLE_MOUSE_BUTTON.
Vec2 InputManager::MouseScroll |
( |
void |
| ) |
const |
Informa em um Vec2 o último scrool do mouse feito.
- Retorna
- Valor (x, y) do scroll do mouse
- Futuras Atividades:
- Fazer a correção dos sentidos de acordo com a direções. Essa correção só pode ser feita após a versão 2.0.4 da SDL2. Veja https://wiki.libsdl.org/SDL_MouseWheelEvent
O eixo horizontal cresce para a direira e o eixo vertical cresce para baixo. O eixo horizontal decresce para a esquerda e o eixo vertical decresce para cima.
bool InputManager::QuitRequested |
( |
void |
| ) |
const |
Informa se o usuário solicitou a saída do programa.
- Retorna
- Booleano com a informação solicitada.
Retorna verdadeiro se o evento SDL_QUIT ocorreu no frame atual. Caso contrário retorna falso.
void InputManager::Update |
( |
void |
| ) |
|
Atualiza as informações internas.
- Futuras Atividades:
- Verificar se o keyUpdate e o mouseUpdate devem ser atualizados nos casos de SDL_KEYUP e SDL_MOUSEBUTTONUP, respectivamente.
As seguintes ações são feitas:
- As coordenas do mouse na tela são atualizadas atraveś da chamada à SDL_GetMouseState passando como argumentos o endereço de mouseX e o endereço mouseY.
- quitRequested é setado para falso, pois se ele armazenava o valor verdadeiro ele pedido para fechar já foi tratado no frame anterior.
- o updateCounter é incrementado, o que faz que os inputs de frames anteriores sejam tratados como tal ao se comparar o valor de updateCounter com <input>Update.
- Faz-se um loop de SDL_Event passando por todos os eventos que ocorram no último frame, nesse loop interno faz-se as seguintes computações:
- Se o evento for SDL_KEYDOWN e não for repetido de algum frame anterior; atribui-se verdadeiro para o keyState da tecla correspondente e o keyUpdate de tecla em questão recebe o valor de updateCounter.
- Se o evento for SDL_KEYUP e não for repetido de algum frame anterior; atribui-se false para o keyState da tecla correspondente e o keyUpdate de tecla em questão recebe o valor de updateCounter.
- Se o evento for SDL_MOUSEBUTTONDOWN e não for repetido de algum frame anterior; atribui-se verdadeiro para o mouseState do botão correspondente e o mouseUpdate do botão em questão recebe o valor de updateCounter.
- Se o evento for SDL_MOUSEBUTTONUP e não for repetido de algum frame anterior; atribui-se false para o mouseState do botão correspondente e o mouseUpdate do botão em questão recebe o valor de updateCounter.
- Se o evento for SDL_QUIT o valor verdadeiro é atribuído para quitRequested.
- Se o evento for SDL_MOUSEWHEEL atribui-se o deslocamente feito no scrool à mouseScroolState e o mouseScroolUpdate de tecla em questão recebe o valor de updateCounter.
Vec2 InputManager::controllerLeftStickState |
|
private |
Armazena a informação de em qual timestamp(updateCounter) o controllerLeftStickState foi alterado.
Vec2 InputManager::controllerRightStickState |
|
private |
Armazena a informação de em qual timestamp(updateCounter) o controllerStickState foi alterado.
std::unordered_map<int,bool> InputManager::controllerState |
|
private |
Armazena as informações de quais botões do controle estão pressionados.
int InputManager::controllerStickUpdate |
|
private |
Armazena a informação do último stick feito no controle.
std::unordered_map<int,int> InputManager::controllerUpdate |
|
private |
Armazena as informações de quando os estados dos botões do controle no respectivo keyState foram modificadas. É usado junto com o updateCounter para saber quão recente a informação é.
std::unordered_map<int,bool> InputManager::keyState |
|
private |
Armazena as informações de quais botões do teclado estão pressionados. As 127 primeiras posições são relativas às suas correspondentes ASCII. As outras posições rastreiam o estado das teclas não-ASCII, como ctrl, shift, caps lock, F1...F12, etc.
std::unordered_map<int,int> InputManager::keyUpdate |
|
private |
Armazena as informações de quando os estados dos botões no respectivo keyState foram modificadas. É usado junto com o updateCounter para saber quão recente a informação é.
Vec2 InputManager::mouseScroolState |
|
private |
Armazena a informação do último scroll feito no mouse.
int InputManager::mouseScroolUpdate |
|
private |
Armazena a informação de em qual timestamp(updateCounter) o mouseScrollState foi alterado.
bool InputManager::mouseState[6] |
|
private |
Armazena a informação dos estados botões do mouse(pressionado ou não pressionado).
int InputManager::mouseUpdate[6] |
|
private |
Armazena a informação de quando houve alguma modificação em cada posição do mouseState.
Armazena a posição X do mouse na janela.
Armazena a posição Y do mouse na janela.
std::unordered_map<int,SDL_GameController*> InputManager::padToController |
|
private |
Armazena a relação entre o indice de um controle e o seu referente ponteiro do tipo SDL_GameController
bool InputManager::quitRequested |
|
private |
Armazena a informação se botão de sair ou Alt+F4 foi pressionado.
int InputManager::updateCounter |
|
private |
Armazena a informação de quantas vezes o update foi chamada. É usado nos <input>Update para saber se a modificação no estado foi detectada no frame corrente.
A documentação para esta classe foi gerada a partir dos seguintes arquivos: