diff --git a/src/Safari/PlateauSafari.cpp b/src/Safari/PlateauSafari.cpp index 974e3a2..3a11f72 100644 --- a/src/Safari/PlateauSafari.cpp +++ b/src/Safari/PlateauSafari.cpp @@ -155,10 +155,37 @@ bool PlateauSafari::deplacementValide(const int x, const int y) const { Position posInitiale = selection->getPos(); - // TODO: Vérifier qu'il n'y a pas de barrière sur le chemin + // Vérifier qu'il n'y a pas de barrière sur le chemin + // TODO: Ya des bugs a fix ici + for (PieceSafari *barriere : barrieres) { + Position pos1 = barriere->getPos(); + Position pos2 = barriere->getPos2(); - return std::abs(x - posInitiale.first) == 0 || - std::abs(y - posInitiale.second) == 0; + // Plus lointaine position en fonction de l'orientation + PositionMutable posBarriere; // todo + + // Verticale + if (pos1.first == pos2.first) { + posBarriere = + std::make_pair(pos1.first, std::max(pos1.second, pos2.second)); + } + // Horizontale + else { + posBarriere = + std::make_pair(std::max(pos1.first, pos2.first), pos1.second); + } + + // Vérifier les conditions pour le point posBarriere sur + // le segment posInitiale - (x, y) + if (posBarriere.first >= std::min(posInitiale.first, x) && + posBarriere.first <= std::max(posInitiale.first, x) && + posBarriere.second >= std::min(posInitiale.second, y) && + posBarriere.second <= std::max(posInitiale.second, y)) { + return false; + } + } + + return (x == posInitiale.first || y == posInitiale.second); } Position PlateauSafari::getPlaceholderBarriere() {