# -*- coding: utf-8 -*- ''' outils de gestion du combat sur le plateau ''' from PyQt4.QtCore import QSize, QString, Qt, SIGNAL from PyQt4.QtGui import QTableWidgetItem, QIcon, QBrush, QColor from lib import regles class GestionCombat(object): '''reunit les outils de suivi du combat''' def __init__(self): self._tour = 0 self._oJ = OrdreJeu() 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 initialiser(self, plateau): self.plateau = plateau self.initTblOrdre() self.plateau.fenetre.connect(self.tblOrdre(), SIGNAL("cellClicked(int,int)"), self.clicTblOrdre, Qt.UniqueConnection) def tour(self): return self._tour def tourSuivant(self): self._tour += 1 self.plateau.majBoutonEtape() def reinitialiser(self): """appellee apres ajout ou suppr de combattants, et apres modif de leurs attributs""" self._oJ.generer(self.plateau) self.majTblOrdre() def maj(self): pass def tblOrdre(self): return self.plateau.fenetre.ui.inf_listeOrdreJeu def initTblOrdre(self): """cree les colonnes et met en forme la table ordre jeu""" self.tblOrdre().setColumnWidth(0, 0) self.tblOrdre().setColumnWidth(1, 0) self.tblOrdre().hideColumn(0) self.tblOrdre().hideColumn(1) self.tblOrdre().setIconSize(QSize(30,20)) def majTblOrdre(self): """met a jour la liste des pions infoOrdreJeu""" self.tblOrdre().setSortingEnabled(False) self.tblOrdre().vider() for num in self._oJ: ligne = self.tblOrdre().nouvelleLigneFin() self.tblOrdre().setRowHidden(ligne, False) self.tblOrdre().majData(ligne, 0, num) self.tblOrdre().majData(ligne, 1, self._oJ[num]) self.tblOrdre().setItem(ligne, 2, QTableWidgetItem(QIcon(self.plateau.pions[num].icone().pix()), \ QString.fromUtf8(self.plateau.pions[num].txtId()))) self.tblOrdre().sizeHintForColumn(2) self.tblOrdre().setSortingEnabled(True) self.tblOrdre().sortItems(1, Qt.AscendingOrder) def clicTblOrdre(self, ligne, col): """on a clique dans la liste d'ordre de jeu, le pion correspondant est selectionne et centre sur la carte""" num = self.tblOrdre().entier(ligne, 0) self.plateau.centrerSur(num) self.plateau.modeActif.clic_combattant(num) def pionSuivant(self): """selection du pion suivant dans la liste d'ordre de jeu""" #securites en cas de suppression d'un pion if not len(self._oJ) > 0: return suivant = self._oJ.suivant() if self._oJ.position() == 0: self.tourSuivant() self.tblOrdre().selectionner(self._oJ.position(), 2) self.tblOrdre().scrollToItem(self.tblOrdre().item(self._oJ.position(), 2)) self.plateau.centrerSur(suivant) self.plateau.modeActif.clic_combattant(suivant) class OrdreJeu(): def __init__(self): self._eC = -1 #pion en cours self._ordre = [] #ordre (num: position) def __iter__(self): return self._ordre.__iter__() def __getitem__(self, num): if not num in self._ordre: return None return self._ordre.index(num) def __len__(self): return len(self._ordre) def generer(self, plateau): combattants = plateau.combattantsVisibles() lst = [value for value in combattants.values()] lst.sort(key=lambda x: x.listeAttributs[regles.attributOrdreJeu()], reverse=(regles.sensTriOrdreJeu() == 1)) self._ordre = [value.numero for value in combattants.values()] def ordre(self): return self._ordre def actuel(self): return self._ordre[self._eC] def suivant(self): self._eC += 1 if self._eC >= len(self._ordre): self._eC = 0 return self._ordre[self._eC] def position(self): return self._eC