Projeto IDJ - Towers Of Madness
TowerDefenseLovecraftnianoZombicida
 Todos Classes Arquivos Funções Variáveis Definições de Tipos Enumerações Valores enumerados Definições e Macros Páginas
Métodos Públicos | Métodos Públicos Estáticos | Métodos Privados | Atributos Privados | Lista de todos os Membros
Referência da Classe InputManager

Classe que organiza entradas do usuário. Mais...

#include <InputManager.h>

Diagrama de colaboração para InputManager:
[legenda]

Métodos Públicos

void Update (void)
 Atualiza as informações internas. Mais...
 
bool KeyPress (int key) const
 Informa se uma tecla do teclado foi pressionada no frame corrente. Mais...
 
bool KeyRelease (int key) const
 Informa se uma tecla do teclado foi solta no frame corrente. Mais...
 
bool IsKeyDown (int key) const
 Informa se uma tecla do teclado está pressionada no momento. Mais...
 
bool IsKeyUp (int key) const
 Informa se uma tecla do teclado NÃO está pressionada no momento. Mais...
 
bool MousePress (int button) const
 Informa se um botão do mouse foi pressionado no frame corrente. Mais...
 
bool MouseRelease (int button) const
 Informa se um botão do mouse foi solto no frame corrente. Mais...
 
bool IsMouseDown (int button) const
 Informa se um botão do mouse está pressionada no momento. Mais...
 
bool IsMouseUp (int button) const
 Informa se um botão do mouse NÃO está pressionada no momento. Mais...
 
bool IsMouseScrolling (void) const
 Informa se o scroll dp do mouse foi acionado no frame atual. Mais...
 
int GetMouseX (void) const
 Informa o valor do eixo X do mouse. Mais...
 
int GetMouseY (void) const
 Informa o valor do eixo Y do mouse. Mais...
 
Vec2 GetMousePos (void) const
 Informa em um Vec2 a posição (x, y) do mouse. Mais...
 
Vec2 MouseScroll (void) const
 Informa em um Vec2 o último scrool do mouse feito. Mais...
 
bool QuitRequested (void) const
 Informa se o usuário solicitou a saída do programa. Mais...
 
bool ButtonPress (int button) const
 Informa se um botão do controle foi pressionado no frame corrente. Mais...
 
bool ButtonRelease (int button) const
 Informa se um botão do controle foi solto no frame corrente. Mais...
 
bool IsButtonDown (int button) const
 Informa se um botão do controle está pressionada no momento. Mais...
 
bool IsButtonUp (int button) const
 Informa se um botão do controle está NÃO pressionada no momento. Mais...
 
Vec2 GetControllerLeftStickState () const
 Calcula o deslocamento do sticker esquerdo de um controle. Mais...
 
Vec2 GetControllerRightStickState () const
 Calcula o deslocamento do sticker direito de um controle. Mais...
 
bool IsControllerSticking (void) const
 Informa se algum sticker do controle está sendo deslocado nesse frame. Mais...
 

Métodos Públicos Estáticos

static InputManagerGetInstance (void)
 Obtém referência para a instância estática do Inputmanager. Mais...
 

Métodos Privados

 InputManager ()
 Inicializa os atributos. Mais...
 
 ~InputManager ()
 Destrutor. Mais...
 

Atributos Privados

bool mouseState [6]
 
int mouseUpdate [6]
 
bool quitRequested
 
int updateCounter
 
int mouseX
 
int mouseY
 
std::unordered_map< int, bool > keyState
 
std::unordered_map< int, int > keyUpdate
 
std::unordered_map< int,
SDL_GameController * > 
padToController
 
std::unordered_map< int, bool > controllerState
 
std::unordered_map< int, int > controllerUpdate
 
Vec2 controllerLeftStickState
 
int controllerStickUpdate
 
Vec2 controllerRightStickState
 
int mouseScroolUpdate
 
Vec2 mouseScroolState
 

Descrição Detalhada

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:

Construtores & Destrutores

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.

Métodos

bool InputManager::ButtonPress ( int  button) const

Informa se um botão do controle foi pressionado no frame corrente.

Parâmetros
buttonBotã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
buttonBotã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.
InputManager & InputManager::GetInstance ( void  )
static

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
buttonBotã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
buttonBotã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
keyTecla 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
keyTecla 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
keyBotã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
keyBotã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
keyTecla 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
keyTecla 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
keyBotã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
keyBotã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.

Atributos

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.

int InputManager::mouseX
private

Armazena a posição X do mouse na janela.

int InputManager::mouseY
private

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: