Combattant.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. from Pion import Pion
  4. import regles
  5. from mat import Materiel
  6. class Combattant(Pion, Materiel):
  7. """combattant sur un plateau de combat"""
  8. def __init__(self, parent=None):
  9. super(Combattant, self).__init__()
  10. self._type = "cb"
  11. self.taille = 2
  12. self.depMarche = regles.valeurDefaut("depMarche")
  13. self.depNage = regles.valeurDefaut("depNage")
  14. self.depEscalade = regles.valeurDefaut("depEscalade")
  15. self.depVol = regles.valeurDefaut("depVol")
  16. self.saut = regles.valeurDefaut("saut")
  17. self.attaques = [] #liste des attaques pre-parametrees du pion
  18. self.listeAttributs = regles.listeAttributs()
  19. self.inventaire = []
  20. self.details = {}
  21. self.notes = ""
  22. #caracs liees au combat:
  23. self.etat = ""
  24. self.deplacementRestant = 0
  25. def pM(self):
  26. """les points de mouvement"""
  27. return max([self.depMarche, self.depNage, self.depEscalade, self.depVol])
  28. def coutDep(self, typeDep, dist = 1):
  29. """renvoie le cout en PM pour effectuer ce deplacement"""
  30. retour = 1
  31. if typeDep in self.__dict__:
  32. dep = self.__dict__[typeDep]
  33. if dep > 0:
  34. cout = self.pM() / dep
  35. retour = dist * cout
  36. else:
  37. retour = -1
  38. return retour
  39. def listeAttaques(self):
  40. return self.attaques
  41. def ajouterAuPlateau(self, plateau):
  42. self.plateau = plateau
  43. super(Combattant, self).ajouterAuPlateau(self.plateau)
  44. self.majEtiquette()
  45. def estCache(self):
  46. """met a jour le combattant selon qu'il est cache ou non"""
  47. for x, y, z in self.casesOccupees():
  48. coord = (x, y)
  49. if not self.plateau.cases[coord].estCachee(): return False
  50. return True
  51. def hoverEnterEvent(self, event):
  52. """evenement lors du survol de la souris (en entree)"""
  53. self.plateau.combattantSurvol(self.numero)
  54. event.ignore()
  55. def hoverLeaveEvent(self, event):
  56. """evenement lors du survol de la souris (en entree)"""
  57. self.plateau.combattantFinSurvol(self.numero)
  58. def mousePressEvent(self, event):
  59. """evenement lors du clic souris"""
  60. super(Pion, self).mousePressEvent(event)
  61. if event.button() == 1: #sur clic gauche
  62. accepte = self.plateau.pionClique(self.numero)
  63. if accepte: event.accept()
  64. else:
  65. event.ignore()
  66. def mouseDoubleClickEvent(self, event):
  67. """evenement lors du clic souris"""
  68. super(Pion, self).mouseDoubleClickEvent(event)
  69. if event.button() == 1: #sur clic gauche
  70. accepte = self.plateau.pionDoubleClic(self.numero)
  71. if accepte: event.accept()
  72. else:
  73. event.ignore()
  74. class PJ(Combattant):
  75. def __init__(self):
  76. super(PJ, self).__init__()
  77. self._type = "pj"
  78. self.creePar = ""