Skip to content

Commit

Permalink
Merge branch 'dev' 20-06-17
Browse files Browse the repository at this point in the history
  • Loading branch information
bestknighter committed Jun 21, 2017
2 parents 8071269 + 77d9cb8 commit 4cd38cb
Show file tree
Hide file tree
Showing 924 changed files with 23,126 additions and 20,214 deletions.
59 changes: 41 additions & 18 deletions Engine/include/Camera.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
#include "Vec2.h"
#include "ActionManager.h"

#define CAMERA_DEFAULT_MIN_ZOOM (0.075)
#define CAMERA_DEFAULT_MAX_ZOOM (1.0)
#define CAMERA_DEFAULT_MIN_LOG_ZOOM (-4.0)
#define CAMERA_DEFAULT_MAX_LOG_ZOOM (0.0)
#define CAMERA_DEFAULT_ZOOMABLE (true)
#define CAMERA_DEFAULT_ZOOM_SPEED (5.0/200.)
#define CAMERA_DEFAULT_LOG_ZOOM_SPEED (0.125)
#define CAMERA_DEFAULT_MIN_SPEED (200.)
#define CAMERA_DEFAULT_MAX_SPEED (1000.)
#define CAMERA_DEFAULT_MAX_SPEED (2000.)
#define CAMERA_DEFAULT_MOVE_SPEED (100.)
#define CAMERA_LOG_ZOOM_BASE 2

/**
\brief Classe que modela a câmera
Expand All @@ -20,6 +23,10 @@
- Zoom atual
- Velocidade de zoom
- Zoom mínimo e máximo
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).
*/
class Camera {
public:
Expand Down Expand Up @@ -63,9 +70,16 @@ class Camera {
\brief Força um valor para o zoom.
\param newZoom novo 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 currentZoom.,
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.
*/
static void ForceLinearZoom(float newZoom);
/**
\brief Força um valor para o zoom.
\param newZoom novo 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.
*/
static void ForceZoom(float newZoom);
static void ForceLogZoom(float newZoom);
/**
\brief Trava ou destrava o zoom.
\param newZoom novo valor para o Zoom
Expand All @@ -77,35 +91,44 @@ class Camera {
\brief Altera o zoom corrente.
\param deltaZoom Variação no zoom.
O zoom corrente é alterado linearmente em deltaZoom*zoomSpeed. 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á atribuído ao currentZoom.
Se o novo valor para o zoom extrapolar o limite inferior, o valor do limite inferior será atribuído ao currentZoom.
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.
*/
static void Zoom(float deltaZoom);
/**
\brief Estabelece os limites superior e inferior do zoom.
\param minZoom Novo limite inferior.
\param maxZoom Novo limite superior.
Se o valor de minZoom ou maxZoom for zero, o valor default será atribuído no lugar.
Se o valor de minZoom ou maxZoom não forem fornecidos, o valor default será atribuído no lugar.
*/
static void SetZoomLimits(float minZoom=0, float maxZoom=0);// set to 0 is to set to default
static void SetZoomLimits(float minZoom=CAMERA_DEFAULT_MIN_LOG_ZOOM, float maxZoom=CAMERA_DEFAULT_MAX_LOG_ZOOM);// No args to set to default
/**
\brief 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.
*/
static float GetZoom(void);
static float GetLinearZoom(void);
/**
\brief 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.
*/
static float GetLogZoom(void);
/**
\brief Estabelece os limites superior e inferior da velocidade da câmera.
\param minSpeed Novo limite inferior.
\param maxSpeed Novo limite superior.
Se o valor de minSpeed ou maxSpeed for zero, o valor default será atribuído no lugar.
Se o valor de minSpeed ou maxSpeed não forem fornecidos, o valor default será atribuído no lugar.
*/
static void SetSpeedLimits(float minSpeed=0, float maxSpeed=0);
static void SetSpeedLimits(float minSpeed=CAMERA_DEFAULT_MIN_SPEED, float maxSpeed=CAMERA_DEFAULT_MAX_SPEED);
/**
\brief Retorna a velocidade mínima da câmera.
Expand Down Expand Up @@ -170,11 +193,11 @@ class Camera {
*/
Camera();
static GameObject* focus;/**< Gameobject que ficará centralizado na câmera. Caso seja nullptr a câmera se moverá pelas setinhas/WASD.*/
static float currentZoom;/**< 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.*/
static float minZoom;/**< Armazena o valor mínimo que o zoom pode ter. Esse limite é ignorado pelo método ForceZoom. É alterado pelo SetZoomLimits.*/
static float maxZoom;/**< Armazena o valor mínimo que o zoom pode ter. Esse limite é ignorado pelo método ForceZoom. É alterado pelo SetZoomLimits.*/
static float currentLogZoom;/**< 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.*/
static float minLogZoom;/**< Armazena o valor mínimo que o zoom pode ter. Esse limite é ignorado pelo método ForceZoom. É alterado pelo SetZoomLimits.*/
static float maxLogZoom;/**< Armazena o valor mínimo que o zoom pode ter. Esse limite é ignorado pelo método ForceZoom. É alterado pelo SetZoomLimits.*/
static bool zoomFixed;/**< 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.*/
static float zoomSpeed;/**< 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.*/
static float logZoomSpeed;/**< 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.*/
static float minSpeed;/**< Armazena o valor mínimo da velocidade da câmera.*/
static float maxSpeed;/**< Armazena o valor máximo da velocidade da câmera.*/
static float currentSpeed;/**< Armazena a velocidade atual de movimento da câmera quando não está focalizada em nenhum objeto.*/
Expand Down
15 changes: 1 addition & 14 deletions Engine/include/Component.h
Original file line number Diff line number Diff line change
@@ -1,22 +1,9 @@
#ifndef COMPONENT_H
#define COMPONENT_H

#include "ComponentType.h"
#include "GameObject.h"

/**
\brief Tipos de Componentes
Enumeração com os tipos de componentes possíveis, usado no método Is que todo componente deve implementar.
*/
enum ComponentType{
DRAG_AND_DROP=0,
HIT_POINTS,
AI_GO_DOWN,
WAVE_MANAGER,
SIZE,
COMPONENT_TYPE_SIZE
};

#ifndef GAME_OBJECT
class GameObject;
#endif
Expand Down
19 changes: 19 additions & 0 deletions Engine/include/ComponentType.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#ifndef COMPONENTTYPE_H
#define COMPONENTTYPE_H

/**
\brief Tipos de Componentes
Enumeração com os tipos de componentes possíveis, usado no método Is que todo componente deve implementar.
Foi colocado em um arquivo separado por problemas de inclusão circular entre GameObject e Component.
*/
enum ComponentType{
DRAG_AND_DROP=0,
HIT_POINTS,
AI_GO_DOWN,
WAVE_MANAGER,
SIZE,
COMPONENT_TYPE_SIZE
};

#endif // COMPONENTTYPE_H
8 changes: 5 additions & 3 deletions Engine/include/DragAndDrop.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ class DragAndDrop : public Component{
\brief Construtor.
\param map Usado para inserir o objeto no tileMap.
\param draggin Informa se o objeto esta sendo arrastado.
\param redrag Verdadeiro se for um redrag, falso caso seja um drag inicial.
\param dragOnActionHold Variável não utilizada, tem como objetivo verificar se o arrastar é enquanto o botão da ação é segurado ou se pressiona uma vez para arrastar e outra vez para soltar.
\todo Implementar o dragOnActionHold.
Instancia o DragAndDrop, informando se o objeto está sendo arrastado.
*/
DragAndDrop(TileMap *map, bool dragging= false, bool dragOnActionHold= true);
DragAndDrop(TileMap &map, Vec2 associatedInitialPos, bool redrag= true, bool dragOnActionHold= true);
/**
\brief Atualiza o estado do objeto em arrasto.
\param associated GameObject que possui esse componente.
Expand All @@ -35,9 +36,10 @@ class DragAndDrop : public Component{
*/
bool Is(ComponentType) const;
private:
bool isDragging;/**< Indica se o objeto esta sendo arrastado.*/
bool dragOnHold;/**< [Não utilizado no momento] Armazena a informação se o botão deve ser segurado para arrastar, ou apenas pressiona uma vez para arrastar e outra vez para soltar.*/
TileMap *tileMap;/**< TileMap no qual o GameObject será inserido após o drag.*/
Vec2 associatedInitialPos;/**<Vec2 no qual o será armazenada a posição do objeto associado no instante do drag.*/
TileMap &tileMap;/**< TileMap no qual o GameObject será inserido após o drag.*/
bool redrag;/**<Informa se é um drag inicial ou um redrag*/
};

#endif // DRAGANDDROP_H
30 changes: 22 additions & 8 deletions Engine/include/GameObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <vector>

#include "Component.h"
#include "ComponentType.h"
#include "Rect.h"

using std::string;
Expand All @@ -34,63 +35,76 @@ class GameObject{
Não é virtual, sua implementação inicializa a rotação com o valor zero. Pode ser usado pelos herdeiros.
*/
GameObject(void);
/**
\brief Adiciona componente a um gameobjet.
\param component componente a ser adicionado.
*/
void AddComponent(Component* component);
/**
\brief Remove componente a um gameobjet.
\param type tipo do componente a ser adicionado.
*/
void RemoveComponent(ComponentType type);
/**
\brief Destrutor
Basicamente é para obrigar quem implementar de usar um destrutor.
*/
virtual ~GameObject(void);
~GameObject(void);
/**
\brief Atualizar estado.
\param dt tempo transcorrido desde a última chamada ao método.
No corpo método o GameObject deve atualizar seu estado, utilizando o argumento passado e quaisquer outras funcionalidades que necessitar.
*/
virtual void Update(float dt)=0;
virtual void Update(float dt);
/**
\brief Renderiza o GameObject.
Esse método deve ter a lógica necessário para ser renderizado na tela.
*/
virtual void Render(void)=0;
virtual void Render(void);
/**
\brief Informa se esse gameObject não precisa mais existir.
\return Verdadeiro se esse GameObject não é mais necessário, false caso contrário.
Deve ser usado no State que o contém para o eliminar da sua estrutura de manipulação de gameObject e destruí-lo.
*/
virtual bool IsDead(void)=0;
bool IsDead(void);
/**
\brief Solicita que o GameObject seja destruído.
Uma vez que esse método é chamado, futuras chamadas ao IsDead devem retornar verdadeiro.
*/
virtual void RequestDelete(void)=0;
void RequestDelete(void);
/**
\brief Notifica Colisão
\param other Referência para o gameobject com o qual se colidiu.
Deve realizar as ações para tratamento da colisão.
*/
virtual void NotifyCollision(GameObject &other)=0;
virtual void NotifyCollision(GameObject &other);
/**
\brief Informa que tipo de GameObject é.
\param type Tipo com o qual quer se verificar que esse GameObject é.
\return Verdadeiro se for do tipo perguntado, falso caso contrário;
É usado no tratamento de colisão para que se identifique com quem colidiu.
*/
virtual bool Is(string type)=0;
virtual bool Is(string type);
/**
\brief Obtém Rect informando a posição renderizada da animação.
Obtém Rect informando a posição renderizada, computando zoom, escala e posição da câmera.
*/
virtual Rect GetWorldRenderedRect(void) const=0;
virtual Rect GetWorldRenderedRect(void) const;
Rect box;/**< Posição do GameObject na tela.*/
float rotation;/**< Rotação do GameObject.*/
protected:
std::vector<Component* > components;/**< Vetor de componentes, que provêem funcionalidades adicionais.*/
bool dead;
};

#endif // GAMEOBJECT_H
37 changes: 33 additions & 4 deletions Engine/include/InputManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,19 @@ class InputManager {
\param key Tecla do teclado cujo o estado é requierido
\return 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.
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 IsKeyDown(int key) const;
/**
\brief Informa se uma tecla do teclado NÃO está pressionada no momento
\param key Tecla do teclado cujo o estado é requierido
\return 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 IsKeyUp(int key) const;
/**
\brief Informa se um botão do mouse foi pressionado no frame corrente
\param key Botão do mouse cujo o estado é requierido
Expand Down Expand Up @@ -108,6 +117,16 @@ class InputManager {
Recomenda-se o uso das macros LEFT_MOUSE_BUTTON, RIGHT_MOUSE_BUTTON e MIDDLE_MOUSE_BUTTON.
*/
bool IsMouseDown(int button) const;
/**
\brief Informa se um botão do mouse NÃO está pressionada no momento
\param key Botão do mouse cujo o estado é requierido
\return 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 IsMouseUp(int button) const;
/**
\brief Informa se o scroll dp do mouse foi acionado no frame atual
\return Booleano que informa se o scroll está em uso ou não.
Expand Down Expand Up @@ -149,7 +168,7 @@ class InputManager {
Vec2 MouseScroll(void) const;
/**
\brief Informa se o usuário solicitou a saída do programa.
\return Booleano com a informação solicitada.
\return Booleano com a informação solicitada.
Retorna verdadeiro se o evento SDL_QUIT ocorreu no frame atual.
Caso contrário retorna falso.
Expand Down Expand Up @@ -193,15 +212,25 @@ class InputManager {
*/
bool IsButtonDown(int button) const;
/**
\brief Informa se um botão do controle está NÃO pressionada no momento
\param button Botão do mouse cujo o estado é requierido
\return 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 IsButtonUp(int button) const;
/**
\brief Calcula o deslocamento do sticker esquerdo de um controle
\return Vetor bidimensional que informa se o botão está pressionado ou não.
\return Vetor bidimensional que informa a posição (x,y) do analógico esquerdo.
*/
Vec2 GetControllerLeftStickState() const;
/**
\brief Calcula o deslocamento do sticker direito de um controle
\return Vetor bidimensional que informa se o botão está pressionado ou não.
\return Vetor bidimensional que informa a posição (x,y) do analógico direito.
*/
Vec2 GetControllerRightStickState() const;
Expand Down
8 changes: 4 additions & 4 deletions Engine/include/Resources.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class Resources {
\param file Nome do arquivo da imagem que se deseja abrir.
\return Imagem carregada em memória
Se a imagem em questão já estiver em memória, um ponteiro para ela é enviado. Caso contrário ela é carregada, colocada no hash e então retornada.
Se a imagem em questão já estiver em memória, um ponteiro para ela é enviado. Caso contrário ela é carregada, colocada no hash e então retornada.
Ao se colocar a imagem no hash, criando o shared_ptr, um destrutor desse ponteiro é enviado como uma função lambda. Esse destrutor desaloca a imagem da memória.
*/
static std::shared_ptr<SDL_Texture> GetImage(string file);
Expand All @@ -36,7 +36,7 @@ class Resources {
\param file Nome do arquivo de música que se deseja abrir.
\return Música carregada em memória
Se a música em questão já estiver em memória, um ponteiro para ela é enviado. Caso contrário ela é carregada, colocada no hash e então retornada.
Se a música em questão já estiver em memória, um ponteiro para ela é enviado. Caso contrário ela é carregada, colocada no hash e então retornada.
Ao se colocar a música no hash, criando o shared_ptr, um destrutor desse ponteiro é enviado como uma função lambda. Esse destrutor desaloca a música da memória.
*/
static std::shared_ptr<Mix_Music> GetMusic(string file);
Expand All @@ -45,7 +45,7 @@ class Resources {
\param file Nome do arquivo de áudio que se deseja abrir.
\return Áudio carregado em memória
Se o áudio em questão já estiver em memória, um ponteiro para ele é enviado. Caso contrário ele é carregada, colocado no hash e então retornado.
Se o áudio em questão já estiver em memória, um ponteiro para ele é enviado. Caso contrário ele é carregada, colocado no hash e então retornado.
Ao se colocar o áudio no hash, criando o shared_ptr, um destrutor desse ponteiro é enviado como uma função lambda. Esse destrutor desaloca o áudio da memória.
*/
static std::shared_ptr<Mix_Chunk> GetSound(string file);
Expand All @@ -55,7 +55,7 @@ class Resources {
\param fontsize O tamanho requerido para a fonte.
\return Fonte carregada em memória
Se a fonte em questão já estiver em memória no tamanho requerido, um ponteiro para ela é enviado. Caso contrário ela é carregada, colocada no hash e então retornada.
Se a fonte em questão já estiver em memória no tamanho requerido, um ponteiro para ela é enviado. Caso contrário ela é carregada, colocada no hash e então retornada.
Ao se colocar a fonte no hash, criando o shared_ptr, um destrutor desse ponteiro é enviado como uma função lambda. Esse destrutor desaloca a fonte da memória.
*/
static std::shared_ptr<TTF_Font> GetFont(string file, int fontSize);
Expand Down
Loading

0 comments on commit 4cd38cb

Please sign in to comment.