diff --git a/includes/Piece.hpp b/includes/Piece.hpp index a7df200..df4aa97 100644 --- a/includes/Piece.hpp +++ b/includes/Piece.hpp @@ -3,8 +3,16 @@ #include #include +struct Plateau; + class Piece { friend std::ostream &operator<<(std::ostream &, const Piece &); + friend Plateau; + + bool selected; + + // Change l'état de la sélection + void changeSelection(); protected: // Couleur de la pièce ou type d'animal pour Safari par ex @@ -21,9 +29,9 @@ public: Piece(const std::string categorie); // constructor 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 virtual sf::Color getScreenColor() const = 0; + + // Renvoie si la pièce est selectionnée + bool isSelectionnee() const; }; diff --git a/includes/Plateau.hpp b/includes/Plateau.hpp index 36dd251..68cf2e7 100644 --- a/includes/Plateau.hpp +++ b/includes/Plateau.hpp @@ -12,6 +12,9 @@ protected: // Taille du plateau int taille; + // Piece actuellement selectionnée + Piece *selection; + public: Plateau(const int taille); // constructor virtual ~Plateau(); // destructor @@ -25,14 +28,18 @@ public: void afficherPlateau(std::ostream &, const bool debug = false) const; // 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; - // Renvoie une pièce à une position + // Renvoie une pièce à une position donnnée 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 trouveCoordonnees(const int x, const int y) const; // Renvoie la taille du plateau int getTaille() const; + + // Change la pièce selectionnée + void modifierSelection(const int x, const int y); }; diff --git a/src/Butin/Butin.cpp b/src/Butin/Butin.cpp index f4d1b24..7ee7792 100644 --- a/src/Butin/Butin.cpp +++ b/src/Butin/Butin.cpp @@ -107,6 +107,7 @@ void Butin::event(const int x, const int y) { } case EnJeu: { // TODO + plateau.modifierSelection(posCurseur.first, posCurseur.second); break; } case Fini: { diff --git a/src/Piece.cpp b/src/Piece.cpp index 0a2798a..7fd42c0 100644 --- a/src/Piece.cpp +++ b/src/Piece.cpp @@ -1,6 +1,6 @@ #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"; } @@ -11,15 +11,10 @@ std::ostream &operator<<(std::ostream &out, const Piece &data) { return out; } -bool Piece::moveTo(const int destX, const int destY) { - if (destX < 0 || destY < 0) { - return false; - } - - // 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; - return true; +void Piece::changeSelection() { + selected = !selected; +} + +bool Piece::isSelectionnee() const { + return selected; } diff --git a/src/Plateau.cpp b/src/Plateau.cpp index 8472892..8493db0 100644 --- a/src/Plateau.cpp +++ b/src/Plateau.cpp @@ -9,6 +9,7 @@ Plateau::Plateau(const int t) : plateau(new Piece **[t]), taille(t) { plateau[i][j] = nullptr; } } + selection = nullptr; } Plateau::~Plateau() { @@ -68,6 +69,9 @@ void Plateau::afficherPlateau(std::ostream &out, const bool d) const { // Dessine la pièce Piece *p = plateau[i][j]; if (p != nullptr) { + if (p->isSelectionnee()) { + piece.setOutlineColor(sf::Color::Green); + } piece.setFillColor(p->getScreenColor()); Ecran::window.draw(piece); } @@ -111,3 +115,17 @@ std::pair Plateau::trouveCoordonnees(const int x, const int y) const { int Plateau::getTaille() const { 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; + } +}