Projeto IDJ - Towers Of Madness
TowerDefenseLovecraftnianoZombicida
|
Classe que modela o todo-poderoso Jogo. Mais...
#include <Game.h>
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... | |
State & | GetCurrentState (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 Game & | GetInstance (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 |
State * | storedState |
SDL_Window * | window |
SDL_Renderer * | renderer |
std::stack< std::unique_ptr < State > > | stateStack |
InputManager & | inputManager |
unsigned int | maxFramerate |
float | frameDuration |
bool | capFramerate |
Atributos Privados Estáticos | |
static Game * | instance = nullptr |
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.
Game::Game | ( | std::string | title, |
int | width, | ||
int | height | ||
) |
Construtor.
title | Nome da janela. |
width | Largura da janela em pixels. |
height | Altura 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:
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.
|
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 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 o Estado que est no topo da pilha de estados.
float Game::GetDeltaTime | ( | void | ) | const |
Retorna do tempo passado desde o último frame.
Retorna o intervalo de tempo do último frame ao atual calculado anteriormente pelo CalculateDeltaTime.
|
static |
unsigned int Game::GetMaxFramerate | ( | void | ) | const |
Obtêm o valor de framerate máximo do controle de framerate.
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 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 a referência do SDL_Window do Game
bool Game::GetWindowBorderless | ( | void | ) | const |
Informa se a janela tem bordas.
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 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 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 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 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.
limit | true 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.
state | estado 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:
void Game::SetMaxFramerate | ( | signed long int | newMaxFramerate | ) |
Altera o valor do limite de framerate.
newMaxFramerate | o 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.
isBorderless | Define 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.
size | Vec2(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.
isFullScreen | Flag 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.
|
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.
|
private |
Flag para decidir se o framerate do jogo será limitado a um valor máximo ou não.
|
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.
|
private |
Duração mínima de cada frame
|
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.
|
private |
Gerenciador de entradas do usuário.
|
staticprivate |
Instância estática do Game. Esquema básico de singleton.
|
private |
Armazena o limite superior do framerate
|
private |
Ponteiro para o SDL_renderer do jogo.
|
private |
Pilha de estados.
|
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.
|
private |
Ponteiro para SDL_Window do game.