gC.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. '''
  2. outils de gestion du combat sur le plateau
  3. '''
  4. from PyQt4.QtCore import QSize, QString, Qt, SIGNAL
  5. from PyQt4.QtGui import QTableWidgetItem, QIcon, QBrush, QColor
  6. from lib import regles
  7. class GestionCombat(object):
  8. '''reunit les outils de suivi du combat'''
  9. def __init__(self):
  10. self._tour = 0
  11. self._oJ = OrdreJeu()
  12. def __getstate__(self):
  13. state = {key:value for key, value in self.__dict__.items() if not key in ["plateau"]}
  14. return (state)
  15. def __setstate__(self, state):
  16. self.__dict__ = state
  17. def initialiser(self, plateau):
  18. self.plateau = plateau
  19. self.initTblOrdre()
  20. self.plateau.fenetre.connect(self.tblOrdre(), SIGNAL("cellClicked(int,int)"), self.clicTblOrdre, Qt.UniqueConnection)
  21. def tour(self):
  22. return self._tour
  23. def tourSuivant(self):
  24. self._tour += 1
  25. self.plateau.majBoutonEtape()
  26. def maj(self):
  27. """appellee apres ajout ou suppr de combattants, et apres modif de leurs attributs"""
  28. self._oJ.generer(self.plateau)
  29. self.majTblOrdre()
  30. def tblOrdre(self):
  31. return self.plateau.fenetre.ui.inf_listeOrdreJeu
  32. def initTblOrdre(self):
  33. """cree les colonnes et met en forme la table ordre jeu"""
  34. self.tblOrdre().setColumnWidth(0, 0)
  35. self.tblOrdre().setColumnWidth(1, 0)
  36. self.tblOrdre().hideColumn(0)
  37. self.tblOrdre().hideColumn(1)
  38. self.tblOrdre().setIconSize(QSize(30,20))
  39. def majTblOrdre(self):
  40. """met a jour la liste des pions infoOrdreJeu"""
  41. self.tblOrdre().setSortingEnabled(False)
  42. self.tblOrdre().vider()
  43. for num in self._oJ:
  44. ligne = self.tblOrdre().nouvelleLigneFin()
  45. self.tblOrdre().setRowHidden(ligne, False)
  46. self.tblOrdre().majData(ligne, 0, num)
  47. self.tblOrdre().majData(ligne, 1, self._oJ[num])
  48. self.tblOrdre().setItem(ligne, 2, QTableWidgetItem(QIcon(self.plateau.pions[num].icone().pix()), \
  49. QString.fromUtf8(self.plateau.pions[num].txtId())))
  50. self.tblOrdre().sizeHintForColumn(2)
  51. self.tblOrdre().setSortingEnabled(True)
  52. self.tblOrdre().sortItems(1, Qt.AscendingOrder)
  53. def clicTblOrdre(self, ligne, col):
  54. """on a clique dans la liste d'ordre de jeu, le pion correspondant est selectionne et centre sur la carte"""
  55. num = self.tblOrdre().entier(ligne, 0)
  56. self.plateau.centrerSur(num)
  57. self.plateau.modeActif.clic_combattant(num)
  58. def pionSuivant(self):
  59. """selection du pion suivant dans la liste d'ordre de jeu"""
  60. #securites en cas de suppression d'un pion
  61. if not len(self._oJ) > 0: return
  62. suivant = self._oJ.suivant()
  63. if self._oJ.position() == 0: self.tourSuivant()
  64. self.tblOrdre().selectionner(self._oJ.position(), 2)
  65. self.tblOrdre().scrollToItem(self.tblOrdre().item(self._oJ.position(), 2))
  66. self.plateau.centrerSur(suivant)
  67. self.plateau.modeActif.clic_combattant(suivant)
  68. class OrdreJeu():
  69. def __init__(self):
  70. self._eC = -1 #pion en cours
  71. self._ordre = [] #ordre (num: position)
  72. def __iter__(self):
  73. return self._ordre.__iter__()
  74. def __getitem__(self, num):
  75. if not num in self._ordre: return None
  76. return self._ordre.index(num)
  77. def __len__(self):
  78. return len(self._ordre)
  79. def generer(self, plateau):
  80. combattants = plateau.combattantsVisibles()
  81. lst = [value for value in combattants.values()]
  82. lst.sort(key=lambda x: x.listeAttributs[regles.attributOrdreJeu()], reverse=(regles.sensTriOrdreJeu() == 1))
  83. self._ordre = [value.numero for value in combattants.values()]
  84. def ordre(self):
  85. return self._ordre
  86. def actuel(self):
  87. return self._ordre[self._eC]
  88. def suivant(self):
  89. self._eC += 1
  90. if self._eC >= len(self._ordre): self._eC = 0
  91. return self._ordre[self._eC]
  92. def position(self):
  93. return self._eC