| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- # -*- 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
-
-
-
-
|