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 * Met à jour la vitesse de l'objet selon les
* forces qui lui sont appliquées * 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 * Met à jour la position de l'objet selon sa
* vitesse actuelle * vitesse actuelle
*/ */
void updatePosition(float delta); virtual void updatePosition(float delta);
/** /**
* Détecte s'il y a collision entre cet objet * Détecte s'il y a collision entre cet objet
* et l'objet passé en paramètre * 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 * Résolution de la collision entre cet objet
* et l'objet passé en paramètre selon la normale * et l'objet passé en paramètre selon la normale
* donnée * 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 * Application de la correction positionnelle sur
@ -91,7 +91,7 @@ public:
* les objets peuvent accumuler une erreur de positionnement * les objets peuvent accumuler une erreur de positionnement
* qui les fait "plonger" les uns dans les autres * 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 * Récupère la boîte englobante de l'objet

View File

@ -33,6 +33,12 @@ public:
* Dessine la balle dans la fenêtre donnée * Dessine la balle dans la fenêtre donnée
*/ */
virtual void draw(Manager& manager); 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 * 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 // déplacement du sprite à la position de la balle
sprite.rotate(getVelocity().x * Constants::PHYSICS_TIME.asSeconds() * .5f);
sprite.setPosition(getPosition()); sprite.setPosition(getPosition());
manager.getWindow().draw(sprite); 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 { std::unique_ptr<sf::FloatRect> Player::getAABB() const {
return std::unique_ptr<sf::FloatRect>(new sf::FloatRect( return std::unique_ptr<sf::FloatRect>(new sf::FloatRect(
getPosition().x - getRadius(), getPosition().x - getRadius(),