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: public:
/** /**
* Identifiant unique du type d'objet * Identifiant unique du type "bloc"
*/ */
static const unsigned int TYPE_ID; static const unsigned int TYPE_ID;
@ -19,14 +19,14 @@ public:
virtual ~Block(); 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; 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 * Dessin du bloc dans la fenêtre donnée
@ -34,14 +34,19 @@ public:
virtual void draw(Manager& manager); 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; virtual unsigned int getTypeId() const;
/**
* Chargement du bloc depuis le fichier donné
*/
static ObjectPtr load(std::ifstream& file);
}; };
#endif #endif

View File

@ -52,16 +52,31 @@ public:
virtual ObjectPtr clone() const = 0; virtual ObjectPtr clone() const = 0;
/** /**
* Charge les propriétés communes à tous les objets * Récupère la boîte englobante de l'objet
* depuis le fichier donné dans l'objet donné
*/ */
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 * Dessine l'objet dans la fenêtre donnée
*/ */
virtual void draw(Manager& manager) = 0; 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 * Met à jour la vitesse de l'objet selon les
* forces qui lui sont appliquées * forces qui lui sont appliquées
@ -97,16 +112,6 @@ public:
*/ */
virtual void positionalCorrection(Object& obj, const sf::Vector2f& normal, float depth); 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 * Récupère l'accélération de l'objet
*/ */

View File

@ -11,13 +11,13 @@ private:
protected: 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; virtual sf::Vector2f getForces(const Manager& manager, const std::vector<ObjectPtr>& objects) const;
public: public:
/** /**
* Identifiant unique du type d'objet * Identifiant unique du type "joueur"
*/ */
static const unsigned int TYPE_ID; static const unsigned int TYPE_ID;
@ -25,20 +25,35 @@ public:
virtual ~Player(); 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; 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); 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 * Met à jour la position de l'objet selon sa
* vitesse actuelle * vitesse actuelle
@ -46,17 +61,7 @@ public:
virtual void updatePosition(float delta); virtual void updatePosition(float delta);
/** /**
* Récupère la boîte englobante de l'objet * Renvoie le rayon de la balle du joueur
*/
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
*/ */
float getRadius() const; 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 { std::unique_ptr<sf::FloatRect> Block::getAABB() const {
return std::unique_ptr<sf::FloatRect>(new sf::FloatRect( return std::unique_ptr<sf::FloatRect>(new sf::FloatRect(
getPosition().x - Constants::GRID / 2, getPosition().x - Constants::GRID / 2,

View File

@ -174,6 +174,11 @@ void Object::solveCollision(Object& obj, const sf::Vector2f& normal) {
return; 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 // on utilise le plus petit coefficient de friction entre les
// deux objets comme le coefficient de la collision // deux objets comme le coefficient de la collision
float restitution = std::min(getRestitution(), obj.getRestitution()); float restitution = std::min(getRestitution(), obj.getRestitution());

View File

@ -68,7 +68,7 @@ void Player::draw(Manager& manager) {
&manager.getResourceManager().getTexture("player.tga") &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()) { // if (isSelected()) {
// sprite.setColor(sf::Color(255, 0, 0)); // sprite.setColor(sf::Color(255, 0, 0));
// } else { // } else {
@ -85,6 +85,12 @@ void Player::draw(Manager& manager) {
manager.getWindow().draw(sprite); 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){ void Player::updatePosition(float delta){
// calcul de la différence de position pour connaître // calcul de la différence de position pour connaître
// (approximativement) la rotation de la balle // (approximativement) la rotation de la balle