Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mashdev #34

Open
wants to merge 51 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
289ef73
Criado Tile
Anders1232 Jul 25, 2017
597067f
Criando novo tileMap
Anders1232 Jul 25, 2017
9fa4cee
Definido interface do novo tileMap
Anders1232 Sep 7, 2017
ba6982f
Generalizado o NearestGOFinder para buscar não apenas GameObjects
Anders1232 Sep 8, 2017
0ee122f
TileMap v2 no camihno certo, mas para continuar estou refazendo o Til…
Anders1232 Sep 8, 2017
f1329de
Adando com o desenvolviment do TileSet, Colocado sprite da branch das…
Anders1232 Sep 9, 2017
8fa98ea
Adicionado tile básico, é necessário ver como faremos parallaxe
Anders1232 Sep 9, 2017
1b630cb
Chegamos no estágio q agora a UI tem q ser componente para conseguir …
Anders1232 Sep 14, 2017
467e57d
xo testar uns trem
mashiro11 Oct 2, 2017
8c996f5
Nao sei bem oq é, mas ta funcionando
mashiro11 Oct 2, 2017
935aead
so guardando alteracoes
mashiro11 Oct 2, 2017
8b4fe93
misturando dev e mashdev
mashiro11 Oct 2, 2017
784dcd9
Compila, mas tem erros de renderização
mashiro11 Oct 2, 2017
0287ffb
Arrumando modo debug
mashiro11 Oct 2, 2017
0fb0770
voltou a aparecer tudo
mashiro11 Oct 2, 2017
d93ff7f
Tentativa com bug em RectTransform
mashiro11 Oct 3, 2017
7d54507
Adição de EarlyUpdate
mashiro11 Oct 3, 2017
3e80b3b
overload de RectTransform::SetAnchors, ajuste na sprite
mashiro11 Oct 6, 2017
73fb191
pequenas alteracoes
mashiro11 Oct 14, 2017
0dfd48b
Algumas modificações para flexibilizar sprite e gameObject
mashiro11 Oct 15, 2017
ec55a74
Alteracao pra dedeu, principalmente em Button
mashiro11 Oct 25, 2017
016deb0
Tentar ajustar button
mashiro11 Oct 25, 2017
500832e
deixa o button assim por enquanto, ja ja tem q dar uma limpada
mashiro11 Oct 25, 2017
c1d18d9
Tentativa inicial de merge dev -> mashdev
mashiro11 Dec 18, 2017
61252b0
Compilando. Musica toca, nada aparece.
mashiro11 Dec 18, 2017
03e9a26
Compilado na mao
mashiro11 Dec 19, 2017
e19b66e
Arrumando funcionalidades de objeto pai-filho em GameObject
mashiro11 Dec 23, 2017
5a6ebae
Arrumando event-listener dos botões
mashiro11 Dec 23, 2017
8e67de0
Agora podemos lançar e notificar eventos
mashiro11 Dec 27, 2017
45591bd
Is de componentType agora trabalha com inteiros para permitir uso de …
Anders1232 Dec 28, 2017
8cf4f11
adequação de tilemap
mashiro11 Jan 20, 2018
98752c9
agora ta bonito - arrumando tilemap
mashiro11 Jan 20, 2018
a624e3e
Correções para renderizar o tilemap
mashiro11 Jan 25, 2018
4020301
sprites e gameObjects mostram rects no modo debug
mashiro11 Jan 25, 2018
762911a
iniciando comunicação de personagens com tilemap
mashiro11 Jan 25, 2018
44eb3a8
algumas coisas a mais
mashiro11 Feb 6, 2018
a213d67
perdi não sei quantas horas pq esqueci a função Is de CHaracterStatus
mashiro11 Feb 8, 2018
6ec63aa
tentando colocar o dynamic_cast dentro do GetComponent
mashiro11 Feb 8, 2018
582eca6
Resolvido problemas de compilação
Anders1232 Feb 8, 2018
afe087d
adicionado sobrecarga de GameObject::GetComponent que usa template
Anders1232 Feb 8, 2018
c647cf9
Refatorando using
mashiro11 Feb 16, 2018
6963509
Refatorando includes: dependência cíclica entre GameObject e Componen…
mashiro11 Feb 16, 2018
a680ebf
removidas warnings
mashiro11 Feb 16, 2018
8c6a6cd
Novo GetComponent<Type>() criado
mashiro11 Mar 11, 2018
f02d5f1
Erro em addComponent corrigido
mashiro11 Mar 11, 2018
1adcb94
simplificando componentes com herança
mashiro11 Mar 12, 2018
e2f17fa
nao lembro no que mexi
mashiro11 Mar 15, 2018
9714d2b
utilizando centro de rect
mashiro11 Mar 19, 2018
ebcac12
uma função a mais
mashiro11 Mar 19, 2018
6a8c0fb
mudanças em getComponent(): ao buscar uma classe base, verifica-se se…
mashiro11 Mar 22, 2018
41fc018
modificação na condição de click do botão
mashiro11 Mar 23, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions include/BaseTile.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ class BaseTile{
public:
/**
\brief Construtor
É necessário que o tile tenha possua um contrutor cujo argumento é um inteiro, esse construtor é utilizado durante a leitura do arquivo para construir o tileMap

É necessário que o tile tenha possua um construtor cujo argumento é um inteiro, esse construtor é utilizado durante a leitura do arquivo para construir o tileMap
*/
BaseTile(int tileSetIndex);
~BaseTile();
/**
\brief Obtém o índice da imagem do tileset

É utilizado dentro do Método render do tileMap.
*/
int GetTileSetIndex(void) const;
Expand Down
24 changes: 17 additions & 7 deletions include/Button.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
#ifndef BUTTON_H
#define BUTTON_H

#include <algorithm> //find()
#include <vector>
#include "Component.h"
#include "ComponentType.h"
#include "GameObject.h"
#include "RectTransform.h"
#include "InputManager.h"
//#include "Event.h"

class Button : public Component {
public:
Expand All @@ -20,25 +25,30 @@ class Button : public Component {
void* caller;
void Call();
};
Button(GameObject& associated, Button::State initialState = Button::State::ENABLED, bool interactOnBoundingBox = true);

Button(GameObject& associated, std::string name = "", Button::State initialState = Button::State::ENABLED, bool interactOnBoundingBox = true);
~Button();

void EarlyUpdate( float dt );
void Update( float dt );
void LateUpdate( float dt );
void Render() const;
bool Is( ComponentType type ) const;
bool Is( unsigned int type ) const;

void SetCallback(Button::State stateToSet, Button::Callback calldata);
void SetReleaseCallback(Button::Callback calldata);
void SetState(Button::State newState);
Button::State GetState(void) const;
void Click();


bool AddObserver(Component* observer);
bool interactOnBoundingBox;

std::string name;
//Event<PlayerUnityPath, int&> buttonClicked;

private:
bool Notify();
std::vector<Component*> observers;
Button::State actualState;
Callback disabled;
Callback enabled;
Expand Down
1 change: 1 addition & 0 deletions include/Color.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ struct Color {
Essa struct representa uma cor de 8 bits. Ou seja, cada canal pode receber um número entre 0 (inclusive) e 255 (inclusive).
*/
Color( unsigned char r, unsigned char g, unsigned char b, unsigned char a = 255 );
Color(){};
operator SDL_Color();
};

Expand Down
33 changes: 14 additions & 19 deletions include/Component.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
#define COMPONENT_H

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

#include "GameComponentType.h"

/**
\brief Tipos de Componentes
Expand All @@ -13,77 +11,74 @@
*/


#ifndef GAME_OBJECT
class GameObject;
#endif


#define COMPONENT
/**
\brief Modela os componentes.

Componentes são objetos variados que adicionam funcionalidades variadas ao GameObject que os contém.
*/
class Component{
public:
Component(GameObject &associated);
Component(GameObject &associated);
/**
\brief Atualiza estado do componente.

Deve conter a lógica principal provida pelo componente, utilizando o GameObject que o contém sempre que necessário.
Sugere-se que qualquer lógica que que possa solicitar remoção de um GameObject fique no método EarlyUpdate.
*/
virtual void Update(float dt)=0;
/**
\brief Atualiza estado do componente.

Recomendado para conter lógica que solicita reoção de GameObjects. É executado todo frame antes do Update.
*/
virtual void EarlyUpdate(float dt){};
/**
\brief Atualiza estado do componente.

É executado todo frame após o Render.
*/
virtual void LateUpdate(float dt){};
/**
\brief Ativa ou desativa o Componente.

Essa modificação só passa a valer a partir do frame seguinte.
Em componentes desativados os métodos EarlyUpdate, Update, Render e LateUpdate não são chamados.
*/
void SetEnable(bool newValue);
/**
\brief Informa se o componente está ativo.

Em componentes desativados os métodos EarlyUpdate, Update, Render e LateUpdate não são chamados.
*/
bool IsEnabled(void) const;
/**
\brief Atualiza enable.

Esse método não deve ser sobrescrevido.
Em componentes desativados os métodos EarlyUpdate, Update, Render e LateUpdate não são chamados.
*/
void UpdateEnable(void);
/**
\brief Verifica o subtipo de componente.
\param type Tipo que deseja verificar se o componente é.

Retorna verdadeiro se o componente for do tipo type, falso caso contrário.
*/
virtual bool Is(ComponentType type) const =0;
virtual bool Is(unsigned int type) const =0;
/**
\brief Destrutor

Declaração necessária para que não houvesse undefined behaviour na deleção dos filhos de Component, pois não estando declarado seria assumido a existência do construtor default aqui(que não seria virtual)
*/
virtual ~Component(void){};
virtual void Render(void){};
virtual void Render(void) const {};
virtual void ButtonObserver(Component* btn);

protected:
GameObject &associated;
bool enabled;/**<Informa Se o gameObject está ativo ou não*/
bool newEnabled;/**< Informa se esse GO estará ativo no próximo frame. Feito para que o GO não mude de ativo para inativo no decorrer de um frame*/
};

#endif
2 changes: 1 addition & 1 deletion include/DragAndDrop.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ void DragAndDrop<T>::Update(float dt) {
}

template <class T>
bool DragAndDrop<T>::Is(ComponentType type) const {
bool DragAndDrop<T>::Is(uint type) const {
return ComponentType::DRAG_AND_DROP == type;
}

Expand Down
64 changes: 45 additions & 19 deletions include/Error.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,35 +12,61 @@

//#define USE_AT

using std::endl;

#ifndef DEBUG
#define DEBUG 0
#endif
#define CONVERSAO_GRAUS_RADIANOS 57.324840764

#define Error(msg)std::cerr<<"[ERROR] "<<WHERE<<"\t\t"<<msg<<END_LINE;exit(1);
#define ASSERT(exp)if(!(exp)){std::cerr<<"[ERROR] "<<WHERE<<"\t\tAssertion Failed."<<END_LINE;exit(1);}
#define ASSERT2(exp,msg)if(!(exp)){std::cerr<<"[ERROR] "<<WHERE<<"\t\tAssertion Failed." <<msg<< "\n";exit(1);}
#define SDL_ASSERT(exp)if(!(exp)){std::cerr<<"[ERROR] "<<WHERE<<"\t\tAssertion Failed:" << SDL_GetError()<<END_LINE;exit(1);}
#define DEBUG true
#define DEBUG_R false
#define DEBUG_U false
#define DEBUG_C true
#ifdef DEBUG
#define HEADER "[DEBUG] "
#define CLASS typeid(*this).name()
#define WHERE __FILE__<<"::"<<__func__<<"():"<<__LINE__
#define WHERE2 CLASS<<"::"<<__func__<<"():"

#define Error(msg)std::cerr<<HEADER<<WHERE<<"\t\t"<<msg<<END_LINE;exit(1);
#define ASSERT(exp)if(!(exp)){std::cerr << HEADER << std::endl;}
#define ASSERT2(exp,msg)if(!(exp)){std::cerr<<HEADER<<WHERE<<"\t\tAssertion Failed." <<msg<< "\n";exit(1);}
#define SDL_ASSERT(exp)if(!(exp)){std::cerr<<HEADER<<WHERE<<"\t\tAssertion Failed:" << SDL_GetError()<<END_LINE;exit(1);}

#define WHERE __FILE__<<" | "<<__func__<<":"<<__LINE__
#define CHECK_SDL_ERROR std::cerr<<HEADER<<WHERE<<"\t\t"<<SDL_GetError()<<END_LINE

#define CHECK_SDL_ERROR std::cerr<<"[ERROR] "<<WHERE<<"\t\t"<<SDL_GetError()<<END_LINE
#define REPORT_DEBUG(msg) if(DEBUG == 1){std::cout<<HEADER<<WHERE<<msg<<END_LINE;}
#define REPORT_DEBUG2(cond, msg) if(cond||DEBUG){std::cout<<HEADER<<WHERE<<msg<<END_LINE;}

#define REPORT_DEBUG(msg) if(DEBUG){std::cout<<"[DEBUG]"<<WHERE<<msg<<END_LINE;}
#define REPORT_DEBUG2(cond, msg) if(cond||DEBUG){std::cout<<"[DEBUG]"<<WHERE<<msg<<END_LINE;}
#define DEBUG_PRINT(msg) if(DEBUG){std::cout<<WHERE2 << msg << END_LINE;}
#define DEBUG_RENDER(msg) if(DEBUG_R){std::cout<<WHERE2 << msg << END_LINE;}
#define DEBUG_UPDATE(msg) if(DEBUG_U){std::cout<<WHERE2 << msg << END_LINE;}
#define DEBUG_CONSTRUCTOR(msg) if(DEBUG_C){std::cout<<WHERE2 << msg <<END_LINE;}

#define REPORT_I_WAS_HERE if(DEBUG){std::cout <<"[DEBUG] I was here!\t"<<WHERE<<END_LINE;}

#define TEMP_REPORT_I_WAS_HERE if(1){std::cout<<"[DEBUG] I was here!\t"<<WHERE<<END_LINE;}
#define REPORT_I_WAS_HERE if(DEBUG){std::cout <<HEADER <<" I was here!\t"<<WHERE<<END_LINE;}

#ifdef USE_AT
#define ELEMENT_ACESS(container, position) container.at(position)
#define TEMP_REPORT_I_WAS_HERE if(1){std::cout<< HEADER <<" I was here!\t"<<WHERE<<END_LINE;}

#ifdef USE_AT
#define ELEMENT_ACESS(container, position) container.at(position)
#else
#define ELEMENT_ACESS(container, position) container[position]
#endif
#else
#define ELEMENT_ACESS(container, position) container[position]
#endif
#define DEBUG_PRINT(x)
#define REPORT_DEBUG2(cond, msg)
#define Error(msg)
#define REPORT_I_WAS_HERE
#define WHERE ""
#define REPORT_DEBUG(msg)
#define ASSERT(exp)
#define ASSERT2(exp,msg)
#define SDL_ASSERT(exp)
#define CHECK_SDL_ERROR
#define TEMP_REPORT_I_WAS_HERE

#define DEBUG_UPDATE(class, msg)
#define DEBUG_RENDER(class, msg)
#define DEBUG_CONSTRUCTOR(class, arg2)

#endif // DEBUG
typedef unsigned int uint;

//void Error(char const * errMsg);
Expand Down
3 changes: 3 additions & 0 deletions include/Error_footer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#ifdef DEBUG
#undef DEBUG
#endif // DEBUG
76 changes: 76 additions & 0 deletions include/Event.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/**
Esse código foi feito com base em exemplo presente no artigo:
https://www.codeproject.com/Articles/35230/Observer-Pattern-as-C-Component
*/

#include <vector>
#include <algorithm>//find()

#include "Error.h"

template<typename SourceType, typename EventArgType>
class Event{
protected:
typedef void (*EventHandler)(SourceType *source, EventArgType eventArg, void* context);

//SubscriberRecord encapsula:
// - qual objeto que se inscreveu,
// - qual o método que deve ser chamado
class SubscriberRecord{
private:
EventHandler handlerProc;//método a ser chamado
void* handlerContext; //ponteiro ao objeto que contem o método

SubscriberRecord(EventHandler handler, void* context = 0):
handlerProc(handler),
handlerContext(context)
{}

friend class Event; //Agora, a classe Event pode acessar os atributos privados e protegidos de SubscrierRecord
};

std::vector<SubscriberRecord> Subscribers; //objetos e respectivos métodos cadastrados no evento
SourceType *eventSource;//ponteiro ao objeto que gerou o evento

public:
Event(SourceType *source):
eventSource(source)
{}
~Event(){};

//Adiciona uma função (desligada de objeto) a lista de inscrições
void operator +=(EventHandler handler){
Subscribers.push_back(SubscriberRecord(handler));
}

//Remove uma função (desligada de objeto) a lista de inscrições
void operator -=(EventHandler handler){
//vector<Event<SourceType,EventArgType>::SubscribeRecord>::iterator é um escopo dependente
typename std::vector<SubscriberRecord>::iterator it = find(Subscribers.begin(), Subscribers.end(), handler);
if(it != Subscribers.end()){
Subscribers.erase(it);
}
}

//Adiciona método e (opcional) objeto à lista de inscrições
void Subscribe(EventHandler handler, void* context = 0){
Subscribers.push_back(SubscriberRecord(handler, context));
}

//Remove método e (opcional) objeto à lista de inscrições
void Unsubscribe(EventHandler handler, void* context = 0){
typename std::vector<SubscriberRecord>::iterator it = find(Subscribers.begin(), Subscribers.end(), SubscriberRecord(handler, context));
if(it != Subscribers.end()){
Subscribers.erase(it);
}
}

//Momento da chamada dos métodos inscritos
void FireEvent(EventArgType eventArg){
DEBUG_PRINT("inicio");
for(unsigned int i = 0; i < Subscribers.size(); i++){
Subscribers[i].handlerProc(eventSource, eventArg, Subscribers[i].handlerContext);
}
DEBUG_PRINT("fim");
}
};
Loading