| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- """Projection du deplacement d'un pion"""
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- from Forme import Forme
- class ProjectionDep():
- def __init__(self, plateau):
- self.plateau = plateau
- self._pion = None
- self._active = False
-
- self._coord = (-1,-1)
- self._forme = Forme(self.plateau.formeCases)
- self._nbRotations = 0
- def creer(self, pion):
- self_pion = pion
- self._forme.definirForme(pion.formeDef[self.plateau.formeCases])
- self._coord = pion.position
- self._nbRotations = pion.nbRotations
- self._active = True
- def majCoord(self, coord):
- self.desactiver()
- self._coord = coord
- self.maj()
- def majRotation(self, modRotation):
- self.desactiver()
- self._nbRotations += modRotation
- self.maj()
- def coord(self):
- return self._coord
- def nbRotations(self):
- return self._nbRotations
- def desactiver(self):
- for coord in self._forme.listeCases(self._coord, self._nbRotations):
- if coord in self.plateau.cases:
- self.plateau.cases[coord].majEstCibleCurseur(False)
- self.active = False
- def projectionValide(self):
- """la projection est valide si toutes les cases de la forme existent"""
- valide = True
- for coord in self._forme.listeCases(self._coord, self._nbRotations):
- if not coord in self.plateau.cases:
- valide = False
- break
- return valide
- def deplacementValide(self):
- """le deplacement est valide si toutes les cases de la forme sont franchissables"""
- valide = False
- compte = 0
- ok = 0
- if self.projectionValide():
- for coord in self._forme.listeCases(self._coord, self._nbRotations):
- compte += 1
- if self.plateau.cases[coord].estFranchissable(self.z()):
- ok += 1
- else:
- #si la case est occupee par le pion lui-meme
- if not self.plateau.cases[coord].estOccupee(self.z()):
- ok += 1
- else:
- if self.plateau.cases[coord].occupant(self.z()) == self._pion:
- ok += 1
- valide = (ok == compte and compte > 0)
- return valide
- def maj(self):
- self._active = True
- if self.projectionValide():
- depValide = self.deplacementValide()
- i = 0
- for coord in self._forme.listeCases(self._coord, self._nbRotations):
- i += 1
- self.plateau.cases[coord].majEstCibleCurseur(True, depValide)
-
-
-
- def z(self):
- """renvoie l'altitude du pion qu'on deplace"""
- z = 0
- try:
- z = self._pion.z
- except:
- pass
- return z
-
-
|