From 5df9190c0ab27f51ee51d8652091a8a00c41925a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Sun, 3 Apr 2016 20:36:07 +0200 Subject: [PATCH] =?UTF-8?q?Meilleure=20impl=C3=A9mentation=20pour=20la=20r?= =?UTF-8?q?otation=20visuelle=20des=20balles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/object.hpp | 10 +++++----- include/player.hpp | 6 ++++++ src/player.cpp | 9 ++++++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/include/object.hpp b/include/object.hpp index 04a0b2f..a3e3741 100644 --- a/include/object.hpp +++ b/include/object.hpp @@ -62,26 +62,26 @@ public: * Met à jour la vitesse de l'objet selon les * forces qui lui sont appliquées */ - void updateVelocity(const Manager& manager, const std::vector& objects, float delta); + virtual void updateVelocity(const Manager& manager, const std::vector& objects, float delta); /** * Met à jour la position de l'objet selon sa * vitesse actuelle */ - void updatePosition(float delta); + virtual void updatePosition(float delta); /** * Détecte s'il y a collision entre cet objet * et l'objet passé en paramètre */ - bool detectCollision(const Object& obj, CollisionData& data) const; + virtual bool detectCollision(const Object& obj, CollisionData& data) const; /** * Résolution de la collision entre cet objet * et l'objet passé en paramètre selon la normale * donnée */ - void solveCollision(Object& obj, const sf::Vector2f& normal); + virtual void solveCollision(Object& obj, const sf::Vector2f& normal); /** * Application de la correction positionnelle sur @@ -91,7 +91,7 @@ public: * les objets peuvent accumuler une erreur de positionnement * qui les fait "plonger" les uns dans les autres */ - 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 diff --git a/include/player.hpp b/include/player.hpp index 2f40528..766705e 100644 --- a/include/player.hpp +++ b/include/player.hpp @@ -33,6 +33,12 @@ public: * Dessine la balle dans la fenêtre donnée */ virtual void draw(Manager& manager); + + /** + * Met à jour la position de l'objet selon sa + * vitesse actuelle + */ + virtual void updatePosition(float delta); /** * Récupère la boîte englobante de l'objet diff --git a/src/player.cpp b/src/player.cpp index 93e171a..997ad8d 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -65,11 +65,18 @@ void Player::draw(Manager& manager) { ); // déplacement du sprite à la position de la balle - sprite.rotate(getVelocity().x * Constants::PHYSICS_TIME.asSeconds() * .5f); sprite.setPosition(getPosition()); manager.getWindow().draw(sprite); } +void Player::updatePosition(float delta) { + // calcul de la différence de position pour connaître + // (approximativement) la rotation de la balle + sf::Vector2f last_position = getPosition(); + Object::updatePosition(delta); + sprite.rotate((getPosition() - last_position).x * 3.f); +} + std::unique_ptr Player::getAABB() const { return std::unique_ptr(new sf::FloatRect( getPosition().x - getRadius(),