# -*- coding: utf-8 -*-
__projet__ = "Chenille animée"
__nom_fichier__ = "chenille"
__author__ = "AJ Tinet"
__date__ = "février 2026"


# Import des classes et bibliothèques utiles
from turtle import *
from anneau import *
from tete import Tete

# =============================================================================

# Définition de la classe Chenille
class Chenille:
    
    def __init__(self, nb_anneaux, rayon, couleur_fill, couleur_circ, position = None):
        """
        Constructeur de la classe Chenille. Une chenille est définie par une liste
        d'anneaux dont le dernier est une tête.
        ----------------------------------------------------------------------
        :param nb_anneaux: Nombre d'anneaux, sans compter la tête
        :type nb_anneaux: INT
        :param rayon: Rayon des anneaux et de la tête
        :type rayon: INT
        :param couleur_fill: Couleur de remplissage des anneaux
        :type couleur_fill: STR
        :param couleur_circ: Couleur du tour des anneaux
        :type couleur_circ: STR
        :param position: Position de centre de l'anneau de queue (le plus à gauche), defaults to None
        :type position: Instance de POINT, optional

        """
        
        # Position par défaut
        if position == None:
            position = Point()
            
        # Position du centre de l'anneau de queue
        xo, yo = position.getx(), position.gety()
        
        # Création des anneaux de la gauche vers la droite
        self.anneaux_ = [Anneau(rayon*2, couleur_circ, couleur_fill,
                        Point(xo+i*rayon, yo)) for i in range(nb_anneaux)]
            
        # Création de la tête
        self.anneaux_.append(Tete(rayon*2, Point(xo+nb_anneaux*rayon, yo)))
        
        
    def dessiner(self):
        """
        Méthode qui dessine une chenille avec le module turtle
        ----------------------------------------------------------------------
        """
        for a in self.anneaux_:
            a.dessiner()
            
            
    def deplace(self):
        """
        Méthode qui fait avancer la chenille d'un pas (un rayon)
        ----------------------------------------------------------------------
        """
        
        for a in self.anneaux_:
            a.deplace(self.anneaux_[0].diametre_//2,0)
            
            
    def effacer(self):
        """
        Méthode qui efface la chenille, i.e. efface chaque anneau et la tête.
        ----------------------------------------------------------------------
        """
        tracer(0)
        for a in self.anneaux_:
            a.effacer()
            
        tracer(1)
            
            
    def avancer(self, nb_pas):
        """
        Méthode qui dessine l'avancement d'une chenille de nb_pas
        ----------------------------------------------------------------------       
        :param nb_pas: Nombre de pas de 1 rayon
        :type nb_pas: INT

        """
        
        # Dessin de la chenille à l'état initial
        self.dessiner()
        
        for pas in nb_pas:
            
            # On efface l'anneau de queue
            self.anneaux_[0].effacer()
            
            # On déplace la chenille d'un pas
            self.deplace()
            
            # On redessine toute la chenille
            self.dessiner()
            
            
    def avancer_bord(self):
        """
        Méthode qui dessine l'avancement d'une chenille jusqu'au bord de l'écran
        ----------------------------------------------------------------------  

        """
        
        # On stocke le rayon et le point le plus à droite de la chenille
        r = self.anneaux_[-1].diametre_//2
        bord_tete = self.anneaux_[-1].centre_.getx() + r
        
        # On avance jusqu'au bord de l'écran (sur le dernier pas la 
        # chenille atteint le bord ou s'en approche)
        
        while bord_tete < window_width()//2 - r:
            
            # On efface l'anneau de queue
            for a in self.anneaux_:
                a.effacer()
            
            # On déplace la chenille d'un pas
            self.deplace()
            bord_tete += r
            
            # On redessine toute la chenille
            self.dessiner()
            
            
# =============================================================================
        
# Programme principal : Test de la classe Chenille                     
if __name__ == "__main__":
    
    speed(0)
    
    c = Chenille(5, 25, "green","yellow")
    
    c.avancer_bord()
    
    exitonclick()


