Combattant.py 3.3 KB

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