* 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:
parent
891f56d88d
commit
7f59b11975
5 changed files with 46 additions and 17 deletions
|
@ -3,8 +3,16 @@
|
|||
#include <SFML/Graphics/Color.hpp>
|
||||
#include <iostream>
|
||||
|
||||
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;
|
||||
};
|
||||
|
|
|
@ -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<int, int> 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);
|
||||
};
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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<int, int> 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;
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue