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 | Atributos Privados Estáticos | Lista de todos os Membros
Referência da Classe Game

Classe que modela o todo-poderoso Jogo. Mais...

#include <Game.h>

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

Métodos Públicos

 Game (std::string title, int width, int height)
 Construtor. Mais...
 
 ~Game ()
 Destrutor. Mais...
 
SDL_Renderer * GetRenderer (void) const
 Obtém referência do SDL_Renderer. Mais...
 
StateGetCurrentState (void) const
 Obtém estado corrente do jogo. Mais...
 
void Push (State *state)
 Empilha um estado na pilha. Mais...
 
void Run (void)
 Realiza o loop principal. Mais...
 
float GetDeltaTime (void) const
 Retorna do tempo passado desde o último frame. Mais...
 
Vec2 GetWindowDimensions (void) const
 Informa as dimensões da janela corrente. Mais...
 
void SetMaxFramerate (signed long int newMaxFramerate)
 Altera o valor do limite de framerate. Mais...
 
unsigned int GetMaxFramerate (void) const
 Obtêm o valor de framerate máximo do controle de framerate. Mais...
 
float GetCurrentFramerate (void) const
 Obtêm o fps atual do jogo. Mais...
 
void LimitFramerate (bool limit)
 Seta se o framerate máximo deve ser utilizado ou não. Mais...
 
bool IsFramerateLimited (void) const
 Retorna se o framerate está sendo limitado ou não. Mais...
 
SDL_Window * GetWindow (void) const
 Obtém referência do SDL_Window. Mais...
 
void SetWindowDimensions (Vec2 size)
 Define as dimensões da janela corrente. Mais...
 
void SetWindowFullscreen (bool isFullScreen)
 Define a janela como tela cheia. Mais...
 
void SetWindowMaximized (void)
 Define se a janela deve ser maximizada. Mais...
 
void SetWindowBorderless (bool isBorderless)
 Define se a janela deve ter bordas. Mais...
 
void SetWindowCentered (void)
 Reposiciona a janela. Mais...
 
bool GetWindowFullscreen (void) const
 Informa se a janela está em tela cheia. Mais...
 
bool GetWindowMaximized (void) const
 Informa se a janela está em seu tamanho máximo. Mais...
 
bool GetWindowBorderless (void) const
 Informa se a janela tem bordas. Mais...
 
unsigned int GetTicks (void)
 Obtém timeStamp atual. Mais...
 

Métodos Públicos Estáticos

static GameGetInstance (void)
 Obtém referência do Game. Mais...
 

Métodos Privados

void CalculateDeltaTime (void)
 Calcula o tempo transcorrido desde a última chamada a essa função. Mais...
 
void UpdateStack (void)
 Atualiza a pilha de estados. Mais...
 

Atributos Privados

unsigned int frameStart
 
float dt
 
StatestoredState
 
SDL_Window * window
 
SDL_Renderer * renderer
 
std::stack< std::unique_ptr
< State > > 
stateStack
 
InputManagerinputManager
 
unsigned int maxFramerate
 
float frameDuration
 
bool capFramerate
 

Atributos Privados Estáticos

static Gameinstance = nullptr
 

Descrição Detalhada

Classe que modela o todo-poderoso Jogo.

Contém o loop principal do jogo, gerencia a pilha de estados do jogo, responsável por gerenciar a janela(no momento apenas informa as dimensões da janela). Também calcula é o que calcula o delta time que é enviado ao update de várias entidades do jogo.

Construtores & Destrutores

Game::Game ( std::string  title,
int  width,
int  height 
)

Construtor.

Parâmetros
titleNome da janela.
widthLargura da janela em pixels.
heightAltura da janela em pixels

Para fins de detecção de problemas futuros, a versão da SDL para a qual o jogo foi compilado e a versão na qual a SDL está sendo linkada no carregamento. A deferença entre essas versões podem ser a causa de alguns bugs. As seguintes tarefas são feitas:

  • O contador de ticks é inicado.
  • Verifica-se se já existe algum outra instância de jogo, se existir o jogo é fechado. Só deve haver uma instncia do jogo.
  • A SDL é iniciada.
  • A janela é criada com o o títlulo title, com dimensões width x width.
  • O SDL_Renderer é inicializado.
  • O mixer é inicializado.
  • O sistema de áudio é inicializado(é uma inicialização diferente do mixer)
  • O subsistema de fontes é inicializado.
  • A variável storedState é inicializada com nullptr.
Game::~Game ( )

Destrutor.

A pilha de estados é esvaziada. Se tiver algum estado em storedState ele será deletado. O ClearResources é chamado e os sistemas da SDL que foram inicializados são destruídos na ordem inversa em que foram inicializados. Par garantir que primeiro os subsistemas que não tem dependêntes sejam desalocados primeiros.

Métodos

void Game::CalculateDeltaTime ( void  )
private

Calcula o tempo transcorrido desde a última chamada a essa função.

Ela é chamada a cada frame para que seja calculado o tempo transcorrido desde o útimo frame. Esse cálculo é feito a partir da diferença entre o valor retornado em SDL_GetTicks com o valor em frameStart. Atribui-se ao dt o resultado dessa operação dividida por mil(os ticks contam milésimos). Depois atualiza-se o valor de frameStart com o que foi obitdo em SDL_GetTicks.

float Game::GetCurrentFramerate ( void  ) const

Obtêm o fps atual do jogo.

Retorna
Veja a descrição

Retorna a quantos frames por segundo o jogo está rodando. Se a limitação de framerate estiver ativada, o retorno dessa função será no máximo o valor obtido por GetMaxFramerate().

State & Game::GetCurrentState ( void  ) const

Obtém estado corrente do jogo.

Retorna
Estado corrente do jogo.

Retorna o Estado que est no topo da pilha de estados.

float Game::GetDeltaTime ( void  ) const

Retorna do tempo passado desde o último frame.

Retorna
Veja a descrição.

Retorna o intervalo de tempo do último frame ao atual calculado anteriormente pelo CalculateDeltaTime.

Game & Game::GetInstance ( void  )
static

Obtém referência do Game.

Retorna
Referência para Game

Esquema básico do singleton. Retorna instância do singleton. Não se faz a chegagem da existência da instancia por motivos cronológicos(A primeira linha da main deve criar uma instncia de Game).

unsigned int Game::GetMaxFramerate ( void  ) const

Obtêm o valor de framerate máximo do controle de framerate.

Retorna
Veja a descrição.

Retorna o valor que está sendo utilizado pelo controle de framerate como quantidade máxima de frames por segundo.

SDL_Renderer * Game::GetRenderer ( void  ) const

Obtém referência do SDL_Renderer.

Retorna
Referncia para SDL_Renderer

Retorna a referência do SDL_Renderer do Game

unsigned int Game::GetTicks ( void  )

Obtém timeStamp atual.

Retorna o timestamp atual.

SDL_Window * Game::GetWindow ( void  ) const

Obtém referência do SDL_Window.

Retorna
Referncia para SDL_Window

Retorna a referência do SDL_Window do Game

bool Game::GetWindowBorderless ( void  ) const

Informa se a janela tem bordas.

Retorna
Veja a descrição

Retorna true se a janela estiver sem bordas ou false se estiver com bordas.

Vec2 Game::GetWindowDimensions ( void  ) const

Informa as dimensões da janela corrente.

Retorna
Veja a descrição.

Retorna o intervalo de tempo do último frame ao atual calculado anteriormente pelo CalculateDeltaTime.

bool Game::GetWindowFullscreen ( void  ) const

Informa se a janela está em tela cheia.

Retorna
Veja a descrição

Retorna true se a janela estiver no modo tela cheia ou false se a janela não estiver em tela cheia.

bool Game::GetWindowMaximized ( void  ) const

Informa se a janela está em seu tamanho máximo.

Retorna
Veja a descrição

Retorna true se a janela maximizada ou false se não estiver maximizada.

bool Game::IsFramerateLimited ( void  ) const

Retorna se o framerate está sendo limitado ou não.

Retorna
Veja descrição

Retorna se o controle de framerate está limitando o framerate a um máximo ou não.

void Game::LimitFramerate ( bool  limit)

Seta se o framerate máximo deve ser utilizado ou não.

Parâmetros
limittrue para limitar. false para desbloquear

Seta se o controle de framerate deve garantir que o framerate não passe do máximo ou não.

void Game::Push ( State state)

Empilha um estado na pilha.

Parâmetros
stateestado a ser empilhado.

O estado recebido como parâmetro é atribuído à storedState. Para que se torne o corrente no início do próximo frame. Isso não é feito no exato momento da chamado pois pode gerar inconsistência no processamento do frame atual.

void Game::Run ( void  )

Realiza o loop principal.

As seguintes oerações são feitas:

  1. Se o storedState tiver algum estado para empilhar, esse estado é empilhado.
  2. Se a pilha estiver vazia, o método retorna. É necessário ter algum estado para ser rodado.
  3. Enquanto a pilha de estados não estiver vazia(loop principal):
    • Se o estado no topo da pilha pedir para o programa seja encerrado, esse loop é interrompido.
    • Calcula-se o intervalo de tempo entre o últimoframe e o frame atual.
    • O estado do inputManager é atualizado.
    • O estado do State é atualizado.
    • Renderiza-se o estado corrente.
    • Força que o que foi renderizado apareça na tela
    • Atualiza a pilha de estados.
  4. Desempilha todos os estados da pilha de estados. Nesse ponto o jogo já terminou e estamos desalocando o que já foi alocado.
  5. O ClearResources é chamado. Espera-se que nesse ponto não haja nenhuma outra referência para qualquer recurso gerenciado pelo Resources.
void Game::SetMaxFramerate ( signed long int  newMaxFramerate)

Altera o valor do limite de framerate.

Parâmetros
newMaxFramerateo novo valor máximo a ser usado controle de framerate

Altera as variáveis do controle de framerate de acordo com o argumento passado. Se o valor informado for menor que 1, o frame rate máximo será 1.

void Game::SetWindowBorderless ( bool  isBorderless)

Define se a janela deve ter bordas.

Parâmetros
isBorderlessDefine se a janela deve ter bordas(false) ou não (true) de acordo com a flag recebida.
void Game::SetWindowCentered ( void  )

Reposiciona a janela.

Posiciona a janela no centro da tela.

void Game::SetWindowDimensions ( Vec2  size)

Define as dimensões da janela corrente.

Parâmetros
sizeVec2(x, y) que representa os novos tamanhos da janela.

Altera as dimensões da janela de acordo com o tamanho (width, height) recebido.

void Game::SetWindowFullscreen ( bool  isFullScreen)

Define a janela como tela cheia.

Parâmetros
isFullScreenFlag que determina se a janela deve ser fullscreen ou windowed.

Define a janela como tela cheia (true) ou windowed (false) dependendo da flag recebida.

void Game::SetWindowMaximized ( void  )

Define se a janela deve ser maximizada.

Define se a janela deve ter seu tamanho máximo sem torná-la tela cheia.

void Game::UpdateStack ( void  )
private

Atualiza a pilha de estados.

Primeiro verifica-se o estado no topo da pilha pediu para ser desempilhado e se tiver solicitado, essa ação é feita e o ClearResources é chamado. Depois verifica-se se tem algum estado esperando para ser empilhado em storedState, se tiver, ele é empilhado.

Atributos

bool Game::capFramerate
private

Flag para decidir se o framerate do jogo será limitado a um valor máximo ou não.

float Game::dt
private

Armazena o intervalo de tempo em segundos desde o último frame. Esse valor é calculado a partir da diferença entre o frameStart com o SDL_GetTicks.

float Game::frameDuration
private

Duração mínima de cada frame

unsigned int Game::frameStart
private

Armazena a quantidade de ticks no momento do início do frame. Usado para calcular intervalos de tempo através de diferença da quantidade de ticks atual com o valor armazenado nessa variável.

InputManager& Game::inputManager
private

Gerenciador de entradas do usuário.

Game * Game::instance = nullptr
staticprivate

Instância estática do Game. Esquema básico de singleton.

unsigned int Game::maxFramerate
private

Armazena o limite superior do framerate

SDL_Renderer* Game::renderer
private

Ponteiro para o SDL_renderer do jogo.

std::stack<std::unique_ptr<State> > Game::stateStack
private

Pilha de estados.

State* Game::storedState
private

Armazena o estado que deve ser empilhado no fim do frame atual. Isso não pode acontecer no meio do frame para não gerar inconsistências.

SDL_Window* Game::window
private

Ponteiro para SDL_Window do game.


A documentação para esta classe foi gerada a partir dos seguintes arquivos: