diff --git a/include/player.hpp b/include/player.hpp index 856606d..3fa412b 100644 --- a/include/player.hpp +++ b/include/player.hpp @@ -11,6 +11,9 @@ public: private: mutable sf::CircleShape sprite; + sf::CircleShape shadow_sprite; + + mutable sf::Vector2f previous_position; unsigned int player_number; protected: @@ -79,12 +82,6 @@ public: */ virtual void save(std::ofstream& file) const; - /** - * Met à jour la position de l'objet selon sa - * vitesse actuelle - */ - virtual void updatePosition(); - /** * Renvoie le numéro du joueur */ diff --git a/res/textures/player.tga b/res/textures/player.tga deleted file mode 100644 index 7954ab3..0000000 Binary files a/res/textures/player.tga and /dev/null differ diff --git a/res/textures/player_1.tga b/res/textures/player_1.tga new file mode 100644 index 0000000..5d78731 Binary files /dev/null and b/res/textures/player_1.tga differ diff --git a/res/textures/player_2.tga b/res/textures/player_2.tga new file mode 100644 index 0000000..0e027ad Binary files /dev/null and b/res/textures/player_2.tga differ diff --git a/res/textures/player_shadow.tga b/res/textures/player_shadow.tga new file mode 100644 index 0000000..ff54028 Binary files /dev/null and b/res/textures/player_shadow.tga differ diff --git a/src/player.cpp b/src/player.cpp index b20c034..5952cdb 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -64,12 +64,34 @@ sf::Vector2f Player::getForces(const Game& game) const { } void Player::draw(Level& level) { - // utilisation de la texture + // on charge la texture selon le numéro du joueur + std::string texture_name; + + if (getPlayerNumber() == 0) { + texture_name = "player_1.tga"; + } else { + texture_name = "player_2.tga"; + } + + sprite.setTexture(&level.getResourceManager().getTexture(texture_name)); sprite.setRadius(getRadius()); sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); - sprite.setTexture( - &level.getResourceManager().getTexture("player.tga") - ); + sprite.setPosition(getPosition()); + + shadow_sprite.setTexture(&level.getResourceManager().getTexture("player_shadow.tga")); + shadow_sprite.setRadius(getRadius() - 1); + shadow_sprite.setOrigin(sf::Vector2f(getRadius() - 1, getRadius() - 1)); + shadow_sprite.setPosition(getPosition()); + + // on fait tourner le sprite selon la différence de position + if (previous_position != sf::Vector2f(0, 0)) { + sprite.rotate( + (getPosition() - previous_position).x * + level.getRightDirection().x * .015f + ); + } + + previous_position = getPosition(); // si le joueur est sélectionné, on met sa bordure en rouge if (isSelected()) { @@ -87,9 +109,9 @@ void Player::draw(Level& level) { sprite.setFillColor(sf::Color::Transparent); } - // déplacement du sprite à la position de la balle - sprite.setPosition(getPosition()); + // dessin des sprites level.getWindow().draw(sprite); + level.getWindow().draw(shadow_sprite); } void Player::activate(Game& game, Object::Ptr object) { @@ -98,14 +120,6 @@ void Player::activate(Game& game, Object::Ptr object) { // qui s'occupe de la réponse } -void Player::updatePosition() { - // calcul de la différence de position pour connaître - // (approximativement) la rotation de la balle - sf::Vector2f last_position = getPosition(); - Object::updatePosition(); - sprite.rotate((getPosition() - last_position).x * 3.f); -} - sf::FloatRect Player::getAABB() const { return sf::FloatRect( getPosition().x - getRadius(),