~kredh/kassie/kassie_sup

« back to all changes in this revision

Viewing changes to src/primaires/perso/squelette.py

  • Committer: kredh
  • Date: 2011-06-06 12:27:25 UTC
  • Revision ID: kredh@free.fr-20110606122725-ekho4i1t4yy7y7g5
Stabilisation des races et squelettes :
A présent, quand on modifie un squelette, tous les équipements construits
sur ce squelette sont mis à jour
Cela a été testé en changeant
le nom d'un membre (les membres des équipements dérivés du squelette
sont également renommés).
Cette fonctionnalité est à tester avec le changement de flag d'un
membre, la suppression et l'ajout d'un membre à un squelette.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
"""Fichier contenant la classe Squelette, détaillée plus bas."""
32
32
 
33
 
from collections import OrderedDict
34
 
 
35
33
from abstraits.id import ObjetID
 
34
from bases.collections.liste_id import ListeID
36
35
from primaires.format.description import Description
37
36
from primaires.format.fonctions import supprimer_accents
38
37
from .membre import Membre
63
62
        self.cle = cle
64
63
        self.nom = "un squelette"
65
64
        self.description = Description(parent=self)
66
 
        self.__membres = OrderedDict()
 
65
        self.__membres = []
 
66
        
 
67
        # Liste des personnages dont l'équipement dérive de ce squelette
 
68
        self.personnages = ListeID(parent=self)
67
69
    
68
70
    def __getnewargs__(self):
69
71
        return ("", )
83
85
    @property
84
86
    def membres(self):
85
87
        """Retourne une copie du dicitonnaire des membres"""
86
 
        return OrderedDict(self.__membres)
 
88
        return list(self.__membres)
87
89
    
88
90
    @property
89
91
    def presentation_indentee(self):
90
92
        """Retourne une présentation indentée des membres"""
91
 
        membres = [membre.nom for membre in self.__membres.values()]
 
93
        membres = [membre.nom for membre in self.__membres]
92
94
        if not membres:
93
95
            membres = ["Aucun"]
94
96
        
101
103
        
102
104
        """
103
105
        membre = Membre(nom, *args, parent=self, **kwargs)
104
 
        nom = supprimer_accents(nom).lower()
105
 
        self.__membres[nom] = membre
 
106
        self.__membres.append(membre)
 
107
        
 
108
        for personnage in self.personnages:
 
109
            personnage.equipement.ajouter_membre(membre)
 
110
        
106
111
        self.enregistrer()
107
112
        return membre
108
113
    
109
114
    def supprimer_membre(self, nom):
110
115
        """Supprime le membre du dictionnaire."""
111
116
        nom = supprimer_accents(nom).lower()
112
 
        if nom not in self.__membres.keys():
113
 
            raise KeyError("Le membre {} n'existe pas dans ce " \
 
117
        noms = [(supprimer_accents(membre.nom), i) for i, membre in \
 
118
                enumerate(self.__membres)]
 
119
        noms = dict(noms)
 
120
        
 
121
        if nom not in noms.keys():
 
122
            raise KeyError("le membre {} n'existe pas dans ce " \
114
123
                    "squelette".format(nom))
115
124
        
116
 
        del self.__membres[nom]
 
125
        del self.__membres[noms[nom]]
 
126
        
 
127
        for personnage in self.personnages:
 
128
            personnage.equipement.supprimer_membre(nom)
 
129
        
117
130
        self.enregistrer()
 
131
    
 
132
    def get_membre(self, nom):
 
133
        """Retourne le membre si il le trouve grâce à son nom."""
 
134
        nom = supprimer_accents(nom).lower()
 
135
        noms = [(supprimer_accents(membre.nom), i) for i, membre in \
 
136
                enumerate(self.__membres)]
 
137
        noms = dict(noms)
 
138
        
 
139
        if nom not in noms.keys():
 
140
            raise KeyError("le membre {} n'existe pas dans ce " \
 
141
                    "squelette".format(nom))
 
142
        
 
143
        return self.__membres[noms[nom]]
 
144
    
 
145
    def a_membre(self, nom):
 
146
        """Retourne True si le squelette possède le membre nom, False sinon"""
 
147
        try:
 
148
            membre = self.get_membre(nom)
 
149
            res = True
 
150
        except KeyError:
 
151
            res = False
 
152
        
 
153
        return res
 
154
    
 
155
    def changer_flag_membre(self, nom, flags):
 
156
        """Change les flags du membre nom.
 
157
        Répercute ces modifications dans les autres membres dérivés.
 
158
        
 
159
        """
 
160
        membre = self.get_membre(nom)
 
161
        membre.flags = flags
 
162
        
 
163
        for personnage in self.personnages:
 
164
            equipement = personnage.equipement
 
165
            a_membre = equipement.get_membre(nom)
 
166
            a_membre.flags = flags
 
167
    def renommer_membre(self, nom, nouveau_nom):
 
168
        """Renomme le membre nom.
 
169
        Répercute ces modifications dans les autres membres dérivés.
 
170
        
 
171
        """
 
172
        membre = self.get_membre(nom)
 
173
        membre.nom = nouveau_nom
 
174
        
 
175
        for personnage in self.personnages:
 
176
            equipement = personnage.equipement
 
177
            a_membre = equipement.get_membre(nom)
 
178
            a_membre.nom = nouveau_nom
118
179
 
119
180
ObjetID.ajouter_groupe(Squelette)