| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- '''
- Liste et gestion des pions du plateau
- '''
- from lib.Combattant import Combattant
- from lib.Decor import Decor
- class ListePions(object):
- def __init__(self):
- self._pions = {}
- def __getstate__(self):
- state = {key:value for key, value in self.__dict__.items() if not key in ["plateau"]}
- return (state)
- def __setstate__(self, state):
- self.__dict__ = state
-
- def __getitem__(self, num):
- if not num in self._pions: return None
- return self._pions[num]
- def __iter__(self):
- return self._pions.__iter__()
- def initialiser(self, plateau):
- self.plateau = plateau
- def pions(self):
- return self._pions
-
- def combattants(self):
- return {key:value for key, value in self._pions.items() if key > 0}
- def combattantsVisibles(self):
- retour = {}
- for num in self.combattants():
- if not self._pions[num].estCache(): retour[num] = self._pions[num]
- return retour
- def decors(self):
- return {key:value for key, value in self._pions.items() if key < 0}
- def pjs(self):
- return {key:value for key, value in self._pions.items() if key > 10000}
- def pnjs(self):
- return {key:value for key, value in self._pions.items() if key > 0 and key <= 10000}
- def nouvelId(self, nomClasse):
- if nomClasse == "Combattant":
- if not len(self.pnjs()) > 0: return 1
- num = max(self.pnjs()) + 1
- elif nomClasse == "PJ":
- if not len(self.pjs()) > 0: return 10001
- num = max(self.pjs()) + 1
- else:
- if not len(self.decors()) > 0: return -1
- num = min(self._pions) - 1
- return num
- def numeroterNom(self, nom):
- """renvoie le nom du pion avec un numero complementaire si necessaire """
- i = 1
- for num in self.combattants():
- if self._pions[num].nom() == nom: i += 1
- return str(i) if i > 1 else ""
- def nouveau(self, modele):
- """creer un pion (combattant ou decor) aux coordonnees indiquees"""
- if self.plateau.proj.projectionValide():
- #instanciation du nouveau pion
- instance = modele.__class__
- pion = instance()
- #recup de ses attributs
- for elt in modele.__dict__:
- pion.__dict__[elt] = modele.__dict__[elt]
- #nouvel Id
- numero = self.nouvelId(modele.__class__.__name__)
-
- #creation du pion
- pion.numero = numero
- if modele.__class__.__name__ == "Combattant":
- pion.numComplementaire = self.numeroterNom(pion.nom())
- self._pions[numero] = pion
-
- pion.position = self.plateau.proj.coord()
- pion.nbRotations = self.plateau.proj.nbRotations()
- pion.ajouterAuPlateau(self.plateau)
-
- if pion.__class__.__name__ == "PJ": self.plateau.majListePJ()
- self.plateau.gC.reinitialiser()
- return True
- def supprimer(self, num):
- """supprime le pion entre en parametre"""
- pionSuppr = self._pions.pop(num)
- pionSuppr.retirerDuPlateau()
- self.plateau.gC.reinitialiser()
- if pionSuppr.__class__.__name__ == "PJ": self.plateau.majListePJ()
- def materialiser(self,actif):
- """active/desactive la reception par les pions des hover events"""
- for num in self._pions:
- self.decors[num].setAcceptsHoverEvents(actif)
- self.decors[num].polygoneGraphique.setAcceptsHoverEvents(actif)
|