ProjectionDep.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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._forme.definirForme(pion.formeDef[self.plateau.formeCases])
  16. self._coord = pion.position
  17. self._nbRotations = pion.nbRotations
  18. self._active = True
  19. def majCoord(self, coord):
  20. self.desactiver()
  21. self._coord = coord
  22. self.maj()
  23. def majRotation(self, modRotation):
  24. self.desactiver()
  25. self._nbRotations += modRotation
  26. self.maj()
  27. def coord(self):
  28. return self._coord
  29. def nbRotations(self):
  30. return self._nbRotations
  31. def desactiver(self):
  32. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  33. if coord in self.plateau.cases:
  34. self.plateau.cases[coord].majEstCibleCurseur(False)
  35. self.active = False
  36. def projectionValide(self):
  37. """la projection est valide si toutes les cases de la forme existent"""
  38. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  39. if not coord in self.plateau.cases: return False
  40. return True
  41. def deplacementValide(self):
  42. """le deplacement est valide si toutes les cases de la forme sont franchissables
  43. et pas occupees par un combattant"""
  44. if self.projectionValide():
  45. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  46. if not self.plateau.cases[coord].terrain.franchissable: return False
  47. if self.plateau.cases[coord].occupant(None, Combattant) != None:
  48. if self.plateau.cases[coord].occupant() != self._pion: return False
  49. return True
  50. def maj(self):
  51. self._active = True
  52. if self.projectionValide():
  53. depValide = self.deplacementValide()
  54. i = 0
  55. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  56. i += 1
  57. self.plateau.cases[coord].majEstCibleCurseur(True, depValide)
  58. def z(self):
  59. """renvoie l'altitude du pion qu'on deplace"""
  60. z = 0
  61. try:
  62. z = self._pion.z
  63. except:
  64. pass
  65. return z