ProjectionDep.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. """Projection du deplacement d'un pion"""
  2. from PyQt4.QtCore import *
  3. from PyQt4.QtGui import *
  4. from Forme import Forme
  5. from Combattant import Combattant
  6. class ProjectionDep():
  7. def __init__(self, plateau):
  8. self.plateau = plateau
  9. self._pion = None
  10. self._active = False
  11. self._coord = (-1,-1)
  12. self._forme = Forme(self.plateau.formeCases)
  13. self._nbRotations = 0
  14. def creer(self, pion):
  15. self_pion = pion
  16. self._forme.definirForme(pion.formeDef[self.plateau.formeCases])
  17. self._coord = pion.position
  18. self._nbRotations = pion.nbRotations
  19. self._active = True
  20. def majCoord(self, coord):
  21. self.desactiver()
  22. self._coord = coord
  23. self.maj()
  24. def majRotation(self, modRotation):
  25. self.desactiver()
  26. self._nbRotations += modRotation
  27. self.maj()
  28. def coord(self):
  29. return self._coord
  30. def nbRotations(self):
  31. return self._nbRotations
  32. def desactiver(self):
  33. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  34. if coord in self.plateau.cases:
  35. self.plateau.cases[coord].majEstCibleCurseur(False)
  36. self.active = False
  37. def projectionValide(self):
  38. """la projection est valide si toutes les cases de la forme existent"""
  39. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  40. if not coord in self.plateau.cases: return False
  41. return True
  42. def deplacementValide(self):
  43. """le deplacement est valide si toutes les cases de la forme sont franchissables
  44. et pas occupees par un combattant"""
  45. if self.projectionValide():
  46. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  47. if not self.plateau.cases[coord].terrain.franchissable: return False
  48. if self.plateau.cases[coord].occupant(None, Combattant) != None:
  49. if self.plateau.cases[coord].occupant() != self._pion: return False
  50. return True
  51. def maj(self):
  52. self._active = True
  53. if self.projectionValide():
  54. depValide = self.deplacementValide()
  55. i = 0
  56. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  57. i += 1
  58. self.plateau.cases[coord].majEstCibleCurseur(True, depValide)
  59. def z(self):
  60. """renvoie l'altitude du pion qu'on deplace"""
  61. z = 0
  62. try:
  63. z = self._pion.z
  64. except:
  65. pass
  66. return z