Ajout des nouvelles textures joueurs

This commit is contained in:
Mattéo Delabre 2016-04-11 22:49:41 +02:00
parent 2036485b43
commit ded76a3527
6 changed files with 31 additions and 20 deletions

View File

@ -11,6 +11,9 @@ public:
private: private:
mutable sf::CircleShape sprite; mutable sf::CircleShape sprite;
sf::CircleShape shadow_sprite;
mutable sf::Vector2f previous_position;
unsigned int player_number; unsigned int player_number;
protected: protected:
@ -79,12 +82,6 @@ public:
*/ */
virtual void save(std::ofstream& file) const; 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 * Renvoie le numéro du joueur
*/ */

Binary file not shown.

BIN
res/textures/player_1.tga Normal file

Binary file not shown.

BIN
res/textures/player_2.tga Normal file

Binary file not shown.

Binary file not shown.

View File

@ -64,12 +64,34 @@ sf::Vector2f Player::getForces(const Game& game) const {
} }
void Player::draw(Level& level) { 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.setRadius(getRadius());
sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); sprite.setOrigin(sf::Vector2f(getRadius(), getRadius()));
sprite.setTexture( sprite.setPosition(getPosition());
&level.getResourceManager().getTexture("player.tga")
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 // si le joueur est sélectionné, on met sa bordure en rouge
if (isSelected()) { if (isSelected()) {
@ -87,9 +109,9 @@ void Player::draw(Level& level) {
sprite.setFillColor(sf::Color::Transparent); sprite.setFillColor(sf::Color::Transparent);
} }
// déplacement du sprite à la position de la balle // dessin des sprites
sprite.setPosition(getPosition());
level.getWindow().draw(sprite); level.getWindow().draw(sprite);
level.getWindow().draw(shadow_sprite);
} }
void Player::activate(Game& game, Object::Ptr object) { 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 // 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 { sf::FloatRect Player::getAABB() const {
return sf::FloatRect( return sf::FloatRect(
getPosition().x - getRadius(), getPosition().x - getRadius(),