# -*- coding: utf-8 -*-
__projet__ = "Chenille animée"
__nom_fichier__ = "chenilleprocessionnaire"
__author__ = "AJ Tinet"
__date__ = "février 2026"


# Import des classes et bibliothèques utiles
from chenille import *
from turtle import *
from math import sin, pi

# =============================================================================

# Définition de la classe ChenilleProcessionnaire
class ChenilleProcessionnaire(Chenille):
    
    def __init__(self, nb_anneaux, rayon, couleur_fill, couleur_circ, position = None, periode = 5):
        """
        Constructeur de la classe ChenilleProcessionniare. 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
        :param periode: Période de la sinusoïde décrite par la chenille en nombre de rayons, defaults to 5
        :type periode: INT, optional

        """

        Chenille.__init__(self, nb_anneaux, rayon, couleur_fill, couleur_circ, position)
        
        self.periode_ = periode
        
        # Déplacement des anneaux selon la sinusoïde:
        for a in self.anneaux_:
            
            a.deplace(0,(a.diametre_//2)*sin(2.*pi*a.centre_.getx()/(self.periode_*a.diametre_//2 )))
            
            
    def deplace(self):
        """
        Méthode qui fait avancer la chenille d'un pas (un rayon) - spécialisation
        ----------------------------------------------------------------------
        """
        
        for a in self.anneaux_:
            
            # On récupère les valeurs de x et y
            x = a.centre_.getx()
            y = a.centre_.gety()
            
            # On calcule le déplacement selon x
            dx = a.diametre_//2
            
            # On cherche la nouvelle valeur de y sur la sinusoïde
            xnew = a.centre_.getx() + dx
            ynew =  (a.diametre_//2)*sin(2.*pi*xnew/(self.periode_*a.diametre_//2 ))
            
            # On déplace l'anneau
            a.deplace(dx ,ynew - y)
                
        
# =============================================================================
        
# Programme principal : Test de la classe ChenilleProcessionnaire   
if __name__ == "__main__":
    
    pro1 = ChenilleProcessionnaire(5, 20, 'white', 'black')
    pro1.dessiner()
    
    pro1.avancer_bord()
    
    exitonclick()