# -*- coding:utf-8 -*-

__projet__ = "CoursS6"
__nom_fichier__ = "classeChenille"
__author__ = "A-J. Tinet"
__date__ = "février 2023"

# =====================================================================================================================

#                                               Les chenilles animées
#                                                   Classe CHENILLE

# =====================================================================================================================

# Import des bibliothèques
from classeAnneau import *
from classeTete import *
from copy import copy
from lire_ligne import *

# Définition de la classe

class Chenille:

    def __init__(self, filename): #nb_anneaux, rayon, remplissage, circonference, tete, position):
        """
        Méthode constructeur. Créé une liste d'anneau + tête composant la chenille
        :param nb_anneaux: int, nombre d'anneaux
        :param rayon: int, rayon des anneaux et de la tête
        :param remplissage: string, couleur de remplissage des anneaux
        :param circonference: string, couleur de la circonférence des anneaux
        :param tete: string, couleur de remplissage de la tête
        :param position: objet Point, position du centre de l'anneau le plus à gauche
        """

        fdat = open(filename, 'r', encoding = 'utf-8')

        # Lecture du fichier
        x, y = lire_ligne(fdat).split()
        position = Point(int(x), int(y))

        rayon = int(lire_ligne(fdat))

        nb_anneaux = int(lire_ligne(fdat))

        # Création de la liste d'anneaux
        self.anneaux_ = []

        for _ in range(nb_anneaux):

            # Lecture des données de l'anneau
            circonference, couleur = lire_ligne(fdat).split()

            centre = Point(position.getx(), position.gety())
            self.anneaux_.append(Anneau(2*rayon, couleur, circonference, centre))
            position.deplacer(rayon)

        centre = Point(position.getx(), position.gety())
        self.anneaux_.append(Tete(2*rayon, centre))

        fdat.close()


    def dessiner(self):
        """
        Dessin d'une chenille à l'aide du module turtle
        :return:
        """

        for elt in self.anneaux_:
            elt.dessiner()


    def deplacer(self, dx):
        """
        Modifie la chenille en la faisant avancer d'un pas dx
        :param dx: int, longueur du pas (en pixels)
        :return:
        """

        for elt in self.anneaux_:
            elt.deplacer(dx)


    def avancer(self, nbp = 0):
        """
        Déplacement d'une chenille (de 1 rayon à chaque pas)
        :param nbp: int, nombre de pas, si 0 se déplace jusqu'au bord de la fenêtre
        :return:
        """

        rayon = self.anneaux_[0].d_//2
        self.dessiner()

        if nbp > 0:

            for pas in range(nbp):

                self.anneaux_[0].effacer()
                self.deplacer(rayon)
                self.dessiner()

        else:

            xmax = window_width() // 2

            while self.anneaux_[-1].centre_.getx() + rayon < xmax:
                self.anneaux_[0].effacer()
                self.deplacer(rayon)
                self.dessiner()


# Programme principal
if __name__ == '__main__':

    che = Chenille('donnees_chenilles.dta')
    che.avancer(12)

    exitonclick()






