* on retire moveTo vu que c'est gérer par le plateau, la pièce en tant que telle a pas vraiment conscience de sa position vu que tout est gérer par le plateau

* rajout de la sélection
This commit is contained in:
Mylloon 2023-12-29 01:33:35 +01:00
parent 891f56d88d
commit 7f59b11975
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
5 changed files with 46 additions and 17 deletions

View file

@ -3,8 +3,16 @@
#include <SFML/Graphics/Color.hpp> #include <SFML/Graphics/Color.hpp>
#include <iostream> #include <iostream>
struct Plateau;
class Piece { class Piece {
friend std::ostream &operator<<(std::ostream &, const Piece &); friend std::ostream &operator<<(std::ostream &, const Piece &);
friend Plateau;
bool selected;
// Change l'état de la sélection
void changeSelection();
protected: 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
@ -21,9 +29,9 @@ public:
Piece(const std::string categorie); // constructor Piece(const std::string categorie); // constructor
virtual ~Piece(); // destructor virtual ~Piece(); // destructor
// Fonction de déplacement
bool 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;
// Renvoie si la pièce est selectionnée
bool isSelectionnee() const;
}; };

View file

@ -12,6 +12,9 @@ protected:
// Taille du plateau // Taille du plateau
int taille; int taille;
// Piece actuellement selectionnée
Piece *selection;
public: public:
Plateau(const int taille); // constructor Plateau(const int taille); // constructor
virtual ~Plateau(); // destructor virtual ~Plateau(); // destructor
@ -25,14 +28,18 @@ public:
void afficherPlateau(std::ostream &, const bool debug = false) const; void afficherPlateau(std::ostream &, const bool debug = false) const;
// Fonction pour modifier le plateau // Fonction pour modifier le 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;
// Renvoie une pièce à une position // 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;
// Prend des coordonnées écran et renvoie des coordonnées jeu // Prend des coordonnées-écran et renvoie des coordonnées-jeu
std::pair<int, int> trouveCoordonnees(const int x, const int y) const; std::pair<int, int> trouveCoordonnees(const int x, const int y) const;
// Renvoie la taille du plateau // Renvoie la taille du plateau
int getTaille() const; int getTaille() const;
// Change la pièce selectionnée
void modifierSelection(const int x, const int y);
}; };

View file

@ -107,6 +107,7 @@ void Butin::event(const int x, const int y) {
} }
case EnJeu: { case EnJeu: {
// TODO // TODO
plateau.modifierSelection(posCurseur.first, posCurseur.second);
break; break;
} }
case Fini: { case Fini: {

View file

@ -1,6 +1,6 @@
#include "../includes/Piece.hpp" #include "../includes/Piece.hpp"
Piece::Piece(const std::string cat) : categorie(cat) { Piece::Piece(const std::string cat) : selected(false), categorie(cat) {
std::cout << "pièce - " << cat << "\n"; std::cout << "pièce - " << cat << "\n";
} }
@ -11,15 +11,10 @@ std::ostream &operator<<(std::ostream &out, const Piece &data) {
return out; return out;
} }
bool Piece::moveTo(const int destX, const int destY) { void Piece::changeSelection() {
if (destX < 0 || destY < 0) { selected = !selected;
return false;
} }
// Note: On vérifie pas si la pièce sort du plateau par rapport à la taille bool Piece::isSelectionnee() const {
// du plateau (on a pas l'info ici?) return selected;
x = destX;
y = destY;
return true;
} }

View file

@ -9,6 +9,7 @@ Plateau::Plateau(const int t) : plateau(new Piece **[t]), taille(t) {
plateau[i][j] = nullptr; plateau[i][j] = nullptr;
} }
} }
selection = nullptr;
} }
Plateau::~Plateau() { Plateau::~Plateau() {
@ -68,6 +69,9 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const {
// Dessine la pièce // Dessine la pièce
Piece *p = plateau[i][j]; Piece *p = plateau[i][j];
if (p != nullptr) { if (p != nullptr) {
if (p->isSelectionnee()) {
piece.setOutlineColor(sf::Color::Green);
}
piece.setFillColor(p->getScreenColor()); piece.setFillColor(p->getScreenColor());
Ecran::window.draw(piece); Ecran::window.draw(piece);
} }
@ -111,3 +115,17 @@ std::pair<int, int> Plateau::trouveCoordonnees(const int x, const int y) const {
int Plateau::getTaille() const { int Plateau::getTaille() const {
return taille; return taille;
} }
void Plateau::modifierSelection(const int x, const int y) {
if (selection) {
// Déselectionne l'ancienne sélection
selection->changeSelection();
}
Piece *p = getPiece(x, y);
if (p != selection) {
// Si la sélection à changer alors changer l'état de la nouvelle pièce
p->changeSelection();
selection = p;
}
}