(ré-)ajout de la fonction de déplacement et fix d'un ptit bug lors de la sélectionnn
This commit is contained in:
parent
fea574195e
commit
db5d3c2762
4 changed files with 43 additions and 6 deletions
|
@ -21,16 +21,16 @@ protected:
|
||||||
// Couleur de la pièce ou type d'animal pour Safari par ex
|
// Couleur de la pièce ou type d'animal pour Safari par ex
|
||||||
std::string categorie;
|
std::string categorie;
|
||||||
|
|
||||||
// Indices où sont placés les pièces sur le plateau (quand elles le sont)
|
// Indices où sont placés les pièces sur le plateau
|
||||||
// (est-ce que c'est redondant ?)
|
|
||||||
// ---> Je crois que vu qu'on a un plateau qui est une liste 2D on en a pas
|
|
||||||
// besoin
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Piece(const std::string categorie); // constructor
|
Piece(const std::string categorie, const int x, const int y); // constructor
|
||||||
virtual ~Piece(); // destructor
|
virtual ~Piece(); // destructor
|
||||||
|
|
||||||
|
// Fonction de déplacement
|
||||||
|
void moveTo(const int destX, const int destY);
|
||||||
|
|
||||||
// Renvoie la couleur de la pièce pour l'affichage
|
// Renvoie la couleur de la pièce pour l'affichage
|
||||||
virtual sf::Color getScreenColor() const = 0;
|
virtual sf::Color getScreenColor() const = 0;
|
||||||
|
|
|
@ -31,6 +31,9 @@ public:
|
||||||
// Si piece = nullptr alors on retire la pièce du plateau
|
// Si piece = nullptr alors on retire la pièce du plateau
|
||||||
void modifierPlateau(const int x, const int y, Piece *piece) const;
|
void modifierPlateau(const int x, const int y, Piece *piece) const;
|
||||||
|
|
||||||
|
// Fonction pour bouger une pièce
|
||||||
|
void moveSelection(const int x, const int y);
|
||||||
|
|
||||||
// Renvoie une pièce à une position donnnée
|
// Renvoie une pièce à une position donnnée
|
||||||
Piece *getPiece(const int x, const int y) const;
|
Piece *getPiece(const int x, const int y) const;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,18 @@ std::ostream &operator<<(std::ostream &out, const Piece &data) {
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Piece::moveTo(const int destX, const int destY) {
|
||||||
|
if (destX < 0 || destY < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: On vérifie pas si la pièce sort du plateau par rapport à la taille
|
||||||
|
// du plateau (on a pas l'info ici?)
|
||||||
|
|
||||||
|
x = destX;
|
||||||
|
y = destY;
|
||||||
|
}
|
||||||
|
|
||||||
void Piece::changeSelection() {
|
void Piece::changeSelection() {
|
||||||
selected = !selected;
|
selected = !selected;
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,5 +132,27 @@ void Plateau::modifierSelection(const int x, const int y) {
|
||||||
// Si la sélection à changer alors changer l'état de la nouvelle pièce
|
// Si la sélection à changer alors changer l'état de la nouvelle pièce
|
||||||
p->changeSelection();
|
p->changeSelection();
|
||||||
selection = p;
|
selection = p;
|
||||||
|
} else {
|
||||||
|
// Si c'était la même alors on ne sélectionne plus rien
|
||||||
|
selection = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Plateau::moveSelection(const int x, const int y) {
|
||||||
|
if (selection == nullptr) {
|
||||||
|
// Ne fais rien si on a rien a bouger
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retire la pièce de là où elle est pour le plateau
|
||||||
|
plateau[selection->x][selection->y] = nullptr;
|
||||||
|
|
||||||
|
// Déplace la pièce sur le plateau
|
||||||
|
modifierPlateau(x, y, selection);
|
||||||
|
|
||||||
|
// Met à jour les coordonnées de la pièce
|
||||||
|
selection->moveTo(x, y);
|
||||||
|
|
||||||
|
// Déselectionne la pièce
|
||||||
|
modifierSelection(x, y);
|
||||||
|
}
|
||||||
|
|
Reference in a new issue