Meilleure implémentation pour la rotation visuelle des balles

This commit is contained in:
Mattéo Delabre 2016-04-03 20:36:07 +02:00
parent a40d724506
commit 5df9190c0a
3 changed files with 19 additions and 6 deletions

View File

@ -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<ObjectPtr>& objects, float delta);
virtual void updateVelocity(const Manager& manager, const std::vector<ObjectPtr>& 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

View File

@ -34,6 +34,12 @@ public:
*/
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
*/

View File

@ -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<sf::FloatRect> Player::getAABB() const {
return std::unique_ptr<sf::FloatRect>(new sf::FloatRect(
getPosition().x - getRadius(),