Activations d'objets
This commit is contained in:
parent
0057debdfe
commit
6ae0b14adf
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue