# -*- coding:utf-8 -*-

__projet__ = "Colle_session_1_2025-05-12"
__nom_fichier__ = "Robot"
__author__ = "Christine Fay-Varnier"
__date__ = "mai 2025"

"""
Projet - Les robots pompiers

Classe Robot et sous-classes affiliées

"""

# Imports
import turtle as tu
from Parcelles import Parcelle
from Incendie import Incendie
from dessins_turtle import trace_texte

class Robot:

    def __init__(self, ligne, colonne, carte, code, reservoir = 1000, puissance = 100):
        """
        Constructeur de la classe Robot.
        """

    def est_valide(self, lcible, ccible):
        """
        Autorise un déplacement sur une case cible
        :param lcible: int, position verticale de la case cible
        :param ccible: int, position horizontale de la case cible
        :return: bool
        """
        # pour un Robot de base, on regarde simplement si on reste dans le périmètre de la carte
        if self.lig_ < 0 or self.lig_ > (len(self.carte_) - 1):
            # on sort de la carte
            return False

        if self.col_ < 0 or self.col_ > (len(self.carte_[0]) - 1):
            # on sort de la carte
            return False

        return True

"""
On doit modifier le comportement des drones, ils ne peuvent pas se déplacer sur une parcelle sur laquelle il y a déjà un robot.
Pour ce faire, en plus des attributs habituels, il faut fournir à chaque robot de la classe Drone la liste des robots présents sur la carte.
"""

class Drone(Robot):

    def __init__(self, ligne, colonne, carte, lrobots):
        """
        Constructeur de la classe Drone, sous-classe de Robot.
        :param carte: matrice de Parcelle sur laquelle le Robot se déplace
        :param ligne: int, position verticale du robot
        :param colonne: int, position horizontale du robot
        # ON AJOUTE LA LISTE DES ROBOTS
        """
        Robot.__init__(self, ligne, colonne, carte, "D", 400, 100)
        self.lrobots_ = lrobots


    def est_valide(self, lcible, ccible):
        """

        @return: True si aucun robot n'est placé sur la position ciblée
        """
        if Robot.est_valide(self, lcible, ccible):
            # si le robot ne sort pas de la carte
            # et si aucun robot d'est placé sur la position ciblée
            for robot in self.lrobots_:
                if robot.l_==lcible and robot.c_==ccible:
                    return False
            return True

        return False