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 Estáticos | Atributos Estáticos Públicos | Métodos Privados | Atributos Privados Estáticos | Lista de todos os Membros
Referência da Classe Camera

Classe que modela a câmera. Mais...

#include <Camera.h>

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

Métodos Públicos Estáticos

static void Follow (GameObject *newFocus)
 Coloca a câmera para seguir o GameObject enviado. Mais...
 
static void Unfollow (void)
 Caso a câmera esteja seguindo um objeto, a câmera pare de seguir esse objeto. Mais...
 
static void Update (float dt)
 Atualiza o estado da câmera. Mais...
 
static void ForceLinearZoom (float newZoom)
 Força um valor para o zoom. Mais...
 
static void ForceLogZoom (float newZoom)
 Força um valor para o zoom. Mais...
 
static void SetZoomable (bool zoomable)
 Trava ou destrava o zoom. Mais...
 
static void Zoom (float deltaZoom)
 Altera o zoom corrente. Mais...
 
static void SetZoomLimits (float minZoom=CAMERA_DEFAULT_MIN_LOG_ZOOM, float maxZoom=CAMERA_DEFAULT_MAX_LOG_ZOOM)
 Estabelece os limites superior e inferior do zoom. Mais...
 
static float GetLinearZoom (void)
 Informa o valor do zoom corrente. Mais...
 
static float GetLogZoom (void)
 Informa o valor do zoom corrente na escala logarítmica. Mais...
 
static void SetSpeedLimits (float minSpeed=CAMERA_DEFAULT_MIN_SPEED, float maxSpeed=CAMERA_DEFAULT_MAX_SPEED)
 Estabelece os limites superior e inferior da velocidade da câmera. Mais...
 
static float GetMinSpeed (void)
 Retorna a velocidade mínima da câmera. Mais...
 
static float GetMaxSpeed (void)
 Retorna a velocidade máxima da câmera. Mais...
 
static void SetZoomSpeed (float newZoomSpeed)
 Altera a sensibilidade do zoom. Mais...
 
static Vec2 WorldToScreen (Vec2 world)
 Converte um ponto do espaço de coordenadas do mundo para o espaço de coordenadas da tela. Mais...
 
static Rect WorldToScreen (Rect world)
 Converte um retângulo do espaço de coordenadas do mundo para o espaço de coordenadas da tela. Mais...
 
static Vec2 ScreenToWorld (Vec2 screen)
 Converte um ponto do espaço de coordenadas da tela para o espaço de coordenadas do mundo. Mais...
 
static Rect ScreenToWorld (Rect screen)
 Converte um retângulo do espaço de coordenadas da tela para o espaço de coordenadas do mundo. Mais...
 

Atributos Estáticos Públicos

static Vec2 pos = Vec2(0,0)
 Ponto de início do que deve ser exibido na tela. Mais...
 

Métodos Privados

 Camera ()
 Construtor privado que não deve ser implementado. Mais...
 

Atributos Privados Estáticos

static GameObjectfocus = nullptr
 
static float currentLogZoom = 0.0
 
static float minLogZoom = CAMERA_DEFAULT_MIN_LOG_ZOOM
 
static float maxLogZoom = CAMERA_DEFAULT_MAX_LOG_ZOOM
 
static bool zoomFixed = !CAMERA_DEFAULT_ZOOMABLE
 
static float logZoomSpeed = CAMERA_DEFAULT_LOG_ZOOM_SPEED
 
static float minSpeed = CAMERA_DEFAULT_MIN_SPEED
 
static float maxSpeed = CAMERA_DEFAULT_MAX_SPEED
 
static float currentSpeed = CAMERA_DEFAULT_MIN_SPEED
 

Descrição Detalhada

Classe que modela a câmera.

A Câmera contém informações sobre qual posição da tela deve ser renderizada, qual objeto deve ficar centralizado(caso necessário). Também é responsável por lidar o Zoom, rastreando informações como:

O zoom é armazenado internamente de forma logarítmica para permitir um comportamento linear nas suas velocidades de zoom e movimentação da câmera, que dependem diretamente do nível atual de zoom. A base do zoom é representado em CAMERA_LOG_ZOOM_BASE e indica que, um zoom de 2, representa multiplicar as sprites por CAMERA_LOG_ZOOM_BASE^(2). Já um zoom de -2 representa CAMERA_LOG_ZOOM_BASE^(-2).

Construtores & Destrutores

Camera::Camera ( )
private

Construtor privado que não deve ser implementado.

Essa classe deve ser estática e se alguém tentar de alguma forma instanciar dará erro na compilação/ligação.

Métodos

void Camera::Follow ( GameObject newFocus)
static

Coloca a câmera para seguir o GameObject enviado.

Parâmetros
newFocusobjetos o qual a câmera deve acompanhar.

Basicamente atribui newFocus ao focus.

void Camera::ForceLinearZoom ( float  newZoom)
static

Força um valor para o zoom.

Parâmetros
newZoomnovo valor para o Zoom

O valor informado se torna o zoom corrente. O novo valor do zoom pode extrapolar os limites existentes. Esse valor, mesmo que fora dos limites, será convertido para a escala logarítmica e atribuído ao currentLogZoom.

void Camera::ForceLogZoom ( float  newZoom)
static

Força um valor para o zoom.

Parâmetros
newZoomnovo valor para o Zoom

O valor informado se torna o zoom corrente. O novo valor do zoom pode extrapolar os limites existentes. Esse valor, mesmo que fora dos limites, será atribuído ao currentLogZoom.

float Camera::GetLinearZoom ( void  )
static

Informa o valor do zoom corrente.

Se o valor for 1.0 significa que nenhum zoom está sendo aplicado. Se for maior que 1.0 significa que as imagens devem ser ampliadas. Se for menor que 1.0 significa que as imagens devem ser reduzidas.

float Camera::GetLogZoom ( void  )
static

Informa o valor do zoom corrente na escala logarítmica.

Se o valor for 0.0 significa que nenhum zoom está sendo aplicado. Se for maior que 0.0 significa que as imagens devem ser ampliadas. Se for menor que 0.0 significa que as imagens devem ser reduzidas.

float Camera::GetMaxSpeed ( void  )
static

Retorna a velocidade máxima da câmera.

O valor máximo é a velocidade que a câmera vai se mover quando estiver com o mínimo de zoom possível, ou seja, o mais afastado possível.

float Camera::GetMinSpeed ( void  )
static

Retorna a velocidade mínima da câmera.

O valor mínimo é a velocidade que a câmera vai se mover quando estiver com o máximo de zoom possível, ou seja, o mais próximo possível.

Vec2 Camera::ScreenToWorld ( Vec2  screen)
static

Converte um ponto do espaço de coordenadas da tela para o espaço de coordenadas do mundo.

Parâmetros
screeno ponto na tela a ser convertido
Retorna
o ponto no espaço do mundo

Essa função realiza o cálculo para se retornar onde, no espaço de coordenadas do mundo, um ponto na tela estaria localizado. O zoom é considerado nesse cálculo.

Rect Camera::ScreenToWorld ( Rect  screen)
static

Converte um retângulo do espaço de coordenadas da tela para o espaço de coordenadas do mundo.

Parâmetros
screeno retângulo na tela a ser convertido
Retorna
o retângulo no espaço do mundo

Essa função realiza o cálculo para se retornar onde, no espaço de coordenadas do mundo, um retângulo na tela estaria localizado. O zoom é considerado nesse cálculo.

void Camera::SetSpeedLimits ( float  minSpeed = CAMERA_DEFAULT_MIN_SPEED,
float  maxSpeed = CAMERA_DEFAULT_MAX_SPEED 
)
static

Estabelece os limites superior e inferior da velocidade da câmera.

Parâmetros
minSpeedNovo limite inferior.
maxSpeedNovo limite superior.

Se o valor de minSpeed ou maxSpeed não forem fornecidos, o valor default será atribuído no lugar.

void Camera::SetZoomable ( bool  zoomable)
static

Trava ou destrava o zoom.

Parâmetros
newZoomnovo valor para o Zoom

Caso o argumento da função seja true, as futuras chamadas à Zoom não terão mais efeito. Caso seja false as futuras chamadas à Zoom terão efeito. Esse efeito é obtido atribuindo à variável zoomFixed o oposto desse valor.

void Camera::SetZoomLimits ( float  minZoom = CAMERA_DEFAULT_MIN_LOG_ZOOM,
float  maxZoom = CAMERA_DEFAULT_MAX_LOG_ZOOM 
)
static

Estabelece os limites superior e inferior do zoom.

Parâmetros
minZoomNovo limite inferior.
maxZoomNovo limite superior.

Se o valor de minZoom ou maxZoom não forem fornecidos, o valor default será atribuído no lugar.

void Camera::SetZoomSpeed ( float  newZoomSpeed)
static

Altera a sensibilidade do zoom.

Parâmetros
newZoomSpeedNovo valor para sensibilidade o zoom.

Quanto maior o newZoomSpeed, mais sensível será o zoom. Quanto menor o newZoomSpeed, menos sensível será o zoom. Esse efeito é obtido atribuindo newZoomSpeed à zoomSpeed.

void Camera::Unfollow ( void  )
static

Caso a câmera esteja seguindo um objeto, a câmera pare de seguir esse objeto.

Basicamente atribui nullptr ao focus.

void Camera::Update ( float  dt)
static

Atualiza o estado da câmera.

Parâmetros
dtIntervalo de tempo transcorrido do frame anterior para o grame atual.

Uma série de operações devem ser feitas:

  • Se o mouse estiver seguindo algum GameObject, deve-se fazer o cálculo para que esse gameobject seja renderizado no centro tela levando em conta o zoom. Isso é calculado pela diferença:
    • Do Vec2 relativo centro do box do GameObject
    • Com a metade das dimensões da tela vezes o inverso do zoom da câmera.
  • Caso contrário, devemos mover a câmera com base no input do usuário. Essa movimentação é feita da seguinte forma:
    • Se a seta para a cima ou o botão "w" for pressionado decrementa-se o y da posição da câmera em Camera::speed * dt.
    • Se a seta para a esquerda ou o botão "a" for pressionado decrementa-se o x da posição da câmera em Camera::speed * dt.
    • Se a seta para a baixo ou o botão "s" for pressionado incrementa-se o y da posição da câmera em Camera::speed * dt.
    • Se a seta para a direita ou o botão "d" for pressionado incrementa-se o x da posição da câmera em Camera::speed * dt.
  • Se a rodinha do mouse(scroll) estiver em movimentação, chamar o método Camera::Zoom enviando o valor y do movimento feito no scroll.
Vec2 Camera::WorldToScreen ( Vec2  world)
static

Converte um ponto do espaço de coordenadas do mundo para o espaço de coordenadas da tela.

Parâmetros
worldo ponto no mundo a ser convertido
Retorna
o ponto no espaço da tela

Essa função realiza o cálculo para se retornar onde, no espaço de coordenadas da tela, um ponto no mundo estaria localizado. O zoom é considerado nesse cálculo.

Rect Camera::WorldToScreen ( Rect  world)
static

Converte um retângulo do espaço de coordenadas do mundo para o espaço de coordenadas da tela.

Parâmetros
worldo retângulo no mundo a ser convertido
Retorna
o retângulo no espaço da tela

Essa função realiza o cálculo para se retornar onde, no espaço de coordenadas da tela, um retângulo no mundo estaria localizado. O zoom é considerado nesse cálculo.

void Camera::Zoom ( float  deltaZoom)
static

Altera o zoom corrente.

Parâmetros
deltaZoomVariação no zoom.

O zoom corrente é alterado logaritmicamente em deltaZoom*logZoomSpeed. Só tem efeito se o valor de zoomFixed for falso. Se o novo valor para o zoom extrapolar o limite superior, o valor do limite superior será usado. Se o novo valor para o zoom extrapolar o limite inferior, o valor do limite inferior será usado. Também ajusta a posição da câmera para que o ponto onde o mouse estava continue no mesmo lugar.

Atributos

float Camera::currentLogZoom = 0.0
staticprivate

Armazena o valor do zoom atual, informando em quantas vezes os objetos devem ser ampliados. Ele deve estar estre o minZoom e o maxZoom, a não ser que o método ForceZoom seja usado. Os métodos Zoom e ForceZoom alteram seu valor.

float Camera::currentSpeed = CAMERA_DEFAULT_MIN_SPEED
staticprivate

Armazena a velocidade atual de movimento da câmera quando não está focalizada em nenhum objeto.

GameObject * Camera::focus = nullptr
staticprivate

Gameobject que ficará centralizado na câmera. Caso seja nullptr a câmera se moverá pelas setinhas/WASD.

float Camera::logZoomSpeed = CAMERA_DEFAULT_LOG_ZOOM_SPEED
staticprivate

Armazena a velocidade com a qual o zoom deve ocorrer. O argumento do método Zoom é multiplicado por esse valor para depois ser somado ao currentZoom.

float Camera::maxLogZoom = CAMERA_DEFAULT_MAX_LOG_ZOOM
staticprivate

Armazena o valor mínimo que o zoom pode ter. Esse limite é ignorado pelo método ForceZoom. É alterado pelo SetZoomLimits.

float Camera::maxSpeed = CAMERA_DEFAULT_MAX_SPEED
staticprivate

Armazena o valor máximo da velocidade da câmera.

float Camera::minLogZoom = CAMERA_DEFAULT_MIN_LOG_ZOOM
staticprivate

Armazena o valor mínimo que o zoom pode ter. Esse limite é ignorado pelo método ForceZoom. É alterado pelo SetZoomLimits.

float Camera::minSpeed = CAMERA_DEFAULT_MIN_SPEED
staticprivate

Armazena o valor mínimo da velocidade da câmera.

Vec2 Camera::pos = Vec2(0,0)
static

Ponto de início do que deve ser exibido na tela.

Futuras Atividades:
Verificar viabilidade de tornar privado.

Contém a informação do ponto no jogo que corresponde ao (0,0) da janela do jogo.

bool Camera::zoomFixed = !CAMERA_DEFAULT_ZOOMABLE
staticprivate

Se for verdadeiro, o zoom não será alterado pelo método Zoom. Caso contrário o método Zoom pode mudar o valor corrente do zoom. É alterado pelo método SetZoomable.


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