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