Activations d'objets

This commit is contained in:
Mattéo Delabre 2016-04-09 03:53:17 +02:00
parent 0057debdfe
commit 6ae0b14adf
6 changed files with 70 additions and 38 deletions

View File

@ -11,7 +11,7 @@ private:
public:
/**
* Identifiant unique du type d'objet
* Identifiant unique du type "bloc"
*/
static const unsigned int TYPE_ID;
@ -19,14 +19,14 @@ public:
virtual ~Block();
/**
* Clone cet objet en un objet avec les mêmes propriétés
* Clone ce bloc en un bloc avec les mêmes propriétés
*/
virtual ObjectPtr clone() const;
/**
* Chargement de l'objet depuis le fichier donné
* Récupère la boîte englobante du bloc
*/
static ObjectPtr load(std::ifstream& file);
virtual std::unique_ptr<sf::FloatRect> getAABB() const;
/**
* Dessin du bloc dans la fenêtre donnée
@ -34,14 +34,19 @@ public:
virtual void draw(Manager& manager);
/**
* Récupère la boîte englobante de l'objet
* Appelé lorsque le bloc est activé par un objet
*/
virtual std::unique_ptr<sf::FloatRect> getAABB() const;
virtual void activated(Object& object);
/**
* Récupère l'identifiant de type de cet objet
* Récupère l'identifiant de type des blocs
*/
virtual unsigned int getTypeId() const;
/**
* Chargement du bloc depuis le fichier donné
*/
static ObjectPtr load(std::ifstream& file);
};
#endif

View File

@ -52,16 +52,31 @@ public:
virtual ObjectPtr clone() const = 0;
/**
* Charge les propriétés communes à tous les objets
* depuis le fichier donné dans l'objet donné
* Récupère la boîte englobante de l'objet
*/
static void load(std::ifstream& file, ObjectPtr object);
virtual std::unique_ptr<sf::FloatRect> getAABB() const = 0;
/**
* Dessine l'objet dans la fenêtre donnée
*/
virtual void draw(Manager& manager) = 0;
/**
* Appelé lorsque l'objet est activé par un autre
*/
virtual void activated(Object& object) = 0;
/**
* Récupère l'identifiant de type de cet objet
*/
virtual unsigned int getTypeId() const = 0;
/**
* Charge les propriétés communes à tous les objets
* depuis le fichier donné dans l'objet donné
*/
static void load(std::ifstream& file, ObjectPtr object);
/**
* Met à jour la vitesse de l'objet selon les
* forces qui lui sont appliquées
@ -97,16 +112,6 @@ public:
*/
virtual void positionalCorrection(Object& obj, const sf::Vector2f& normal, float depth);
/**
* Récupère la boîte englobante de l'objet
*/
virtual std::unique_ptr<sf::FloatRect> getAABB() const = 0;
/**
* Récupère l'identifiant de type de cet objet
*/
virtual unsigned int getTypeId() const = 0;
/**
* Récupère l'accélération de l'objet
*/

View File

@ -11,13 +11,13 @@ private:
protected:
/**
* Calcule les forces appliquées à l'objet
* Calcule les forces appliquées au joueur
*/
virtual sf::Vector2f getForces(const Manager& manager, const std::vector<ObjectPtr>& objects) const;
public:
/**
* Identifiant unique du type d'objet
* Identifiant unique du type "joueur"
*/
static const unsigned int TYPE_ID;
@ -25,20 +25,35 @@ public:
virtual ~Player();
/**
* Clone cet objet en un objet avec les mêmes propriétés
* Clone ce joueur en un joueur avec les mêmes propriétés
*/
virtual ObjectPtr clone() const;
/**
* Chargement de l'objet depuis le fichier donné
* Récupère la boîte englobante du joueur
*/
static ObjectPtr load(std::ifstream& file);
virtual std::unique_ptr<sf::FloatRect> getAABB() const;
/**
* Dessine la balle dans la fenêtre donnée
* Dessine le joueur dans la fenêtre donnée
*/
virtual void draw(Manager& manager);
/**
* Appelé lorsque le joueur est activé par un objet
*/
virtual void activated(Object& object);
/**
* Récupère l'identifiant de type des joueurs
*/
virtual unsigned int getTypeId() const;
/**
* Chargement du joueur depuis le fichier donné
*/
static ObjectPtr load(std::ifstream& file);
/**
* Met à jour la position de l'objet selon sa
* vitesse actuelle
@ -46,17 +61,7 @@ public:
virtual void updatePosition(float delta);
/**
* Récupère la boîte englobante de l'objet
*/
virtual std::unique_ptr<sf::FloatRect> getAABB() const;
/**
* Récupère l'identifiant de type de cet objet
*/
virtual unsigned int getTypeId() const;
/**
* Renvoie le rayon de la balle
* Renvoie le rayon de la balle du joueur
*/
float getRadius() const;

View File

@ -58,6 +58,12 @@ void Block::draw(Manager& manager) {
}
}
void Block::activated(Object& object) {
// ne rien faire si le bloc est activé.
// Ceci est un bloc de base qui n'a pas a réagir
// aux activations
}
std::unique_ptr<sf::FloatRect> Block::getAABB() const {
return std::unique_ptr<sf::FloatRect>(new sf::FloatRect(
getPosition().x - Constants::GRID / 2,

View File

@ -174,6 +174,11 @@ void Object::solveCollision(Object& obj, const sf::Vector2f& normal) {
return;
}
// en ce point, on est bertins qu'une collision a eu lieu.
// activation réciproque des deux objets
activated(obj);
obj.activated(*this);
// on utilise le plus petit coefficient de friction entre les
// deux objets comme le coefficient de la collision
float restitution = std::min(getRestitution(), obj.getRestitution());

View File

@ -68,7 +68,7 @@ void Player::draw(Manager& manager) {
&manager.getResourceManager().getTexture("player.tga")
);
// si le joueur est sélectionné, on le colore en rouge vif
// si le joueur est sélectionné, on met sa bordure en rouge
// if (isSelected()) {
// sprite.setColor(sf::Color(255, 0, 0));
// } else {
@ -85,6 +85,12 @@ void Player::draw(Manager& manager) {
manager.getWindow().draw(sprite);
}
void Player::activated(Object& object) {
// ne rien faire si le joueur est activé.
// en règle générale, c'est l'objet activé par le joueur
// qui s'occupe de la réponse
}
void Player::updatePosition(float delta){
// calcul de la différence de position pour connaître
// (approximativement) la rotation de la balle