|
|
@@ -34,6 +34,7 @@ from EcranSelectionPj import EcranSelectionPj
|
|
|
import regles as regles
|
|
|
from outilsSvg import *
|
|
|
from lancer import jet, estJetValide
|
|
|
+import br
|
|
|
|
|
|
from operator import itemgetter, attrgetter
|
|
|
from math import *
|
|
|
@@ -242,6 +243,7 @@ class Plateau(QGraphicsScene):
|
|
|
self.fenetre.connect(self.fenetre.ui.pi_attaqueDist, SIGNAL("clicked()"), self.majModeCombatAttaqueDist, Qt.UniqueConnection)
|
|
|
self.fenetre.connect(self.fenetre.ui.pi_attaqueZone, SIGNAL("clicked()"), self.majModeCombatZone, Qt.UniqueConnection)
|
|
|
self.fenetre.connect(self.fenetre.ui.pi_formeAttaqueZone, SIGNAL("activated (int)"), self.majModeCombatZone, Qt.UniqueConnection)
|
|
|
+ self.fenetre.connect(self.fenetre.ui.pi_rayonAttaqueZone, SIGNAL("valueChanged(int)"), self.majRayonZone, Qt.UniqueConnection)
|
|
|
## self.fenetre.connect(self.fenetre.ui.pi_vol, SIGNAL("clicked()"), self.fenetre.barreCombatVol, Qt.UniqueConnection)
|
|
|
|
|
|
self.fenetre.connect(self.fenetre.ui.pi_finTour, SIGNAL("clicked()"), self.pionSuivant, Qt.UniqueConnection)
|
|
|
@@ -671,6 +673,11 @@ class Plateau(QGraphicsScene):
|
|
|
if action:
|
|
|
self.modeActif.nouvelleAction(action)
|
|
|
|
|
|
+ def majRayonZone(self, val):
|
|
|
+ action = self.modeActif.action()
|
|
|
+ if action:
|
|
|
+ action.majRayon(val)
|
|
|
+
|
|
|
def majModeDefinirEntree(self):
|
|
|
self.activerMode(Modes.CreationEntreeSortie, "E")
|
|
|
|
|
|
@@ -1183,53 +1190,20 @@ class Plateau(QGraphicsScene):
|
|
|
return preSelection
|
|
|
|
|
|
|
|
|
- def estCibleAttaqueDistValide(self, coordOrigine, coordCible, zPion = 0):
|
|
|
+ def estCibleAttaqueDistValide(self, coordOrigine, coordCible):
|
|
|
"""la case cible est elle valide pour une attaque a distance depuis la position et hauteur
|
|
|
- du pion selectionne? on compare pour ce faire les altitudes des cases sur la ligne de mire"""
|
|
|
- casesLigneMire = []
|
|
|
- #on preselectionne les cases concernees
|
|
|
- preSelection = self.preSelectionCollision(self.cases[coordOrigine].centreGraphique, self.cases[coordCible].centreGraphique)
|
|
|
- if coordOrigine in preSelection:
|
|
|
- preSelection.remove(coordOrigine)
|
|
|
- if coordCible in preSelection:
|
|
|
- preSelection.remove(coordCible)
|
|
|
- for coord in preSelection:
|
|
|
- ligne = QLineF(self.cases[coordOrigine].centreGraphique, self.cases[coordCible].centreGraphique)
|
|
|
- ligneGraphique = QGraphicsLineItem(ligne)
|
|
|
- ligneGraphique.prepareGeometryChange()
|
|
|
- self.addItem(ligneGraphique)
|
|
|
- if self.cases[coord].collidesWithItem(ligneGraphique, Qt.IntersectsItemShape):
|
|
|
- casesLigneMire.append(coord)
|
|
|
- self.removeItem(ligneGraphique)
|
|
|
- del ligneGraphique
|
|
|
-
|
|
|
- #on trie les cases par distance au point d'origine (de la plus proche a la plus eloignee)
|
|
|
- casesLigneMireDistance = {} #distance: coord
|
|
|
- for coord in casesLigneMire:
|
|
|
- distance = sqrt((coordOrigine[0] - coord[0])**2 + (coordOrigine[1] - coord[1])**2)
|
|
|
- casesLigneMireDistance[coord] = distance
|
|
|
-
|
|
|
- #on compare enfin les altitudes de chaque case en fonction de la distance
|
|
|
- zOrigine = self.cases[coordOrigine].altitude + self.pionSelectionne().z + self.pionSelectionne().hauteur
|
|
|
- zCible = self.cases[coordCible].altitude + zPion
|
|
|
- distanceTot = sqrt((coordCible[0] - coordOrigine[0])**2 + (coordCible[1] - coordOrigine[1])**2)
|
|
|
+ du pion selectionne
|
|
|
+ les coord sont de la forme (x, y, z)"""
|
|
|
valide = True
|
|
|
- for coord in casesLigneMireDistance:
|
|
|
- if self.cases[coord].terrain.visibilite == False:
|
|
|
- valide = False
|
|
|
- break
|
|
|
- else:
|
|
|
- if zOrigine >= zCible:
|
|
|
- z = (zOrigine - zCible) * (casesLigneMireDistance[coord] / distanceTot)
|
|
|
- else:
|
|
|
- z = (zCible - zOrigine) * ((distanceTot - casesLigneMireDistance[coord]) / distanceTot)
|
|
|
- if self.cases[coord].estOccupee(int(z)):
|
|
|
- if self.modeParam["pionCibleAttaqueDist"] != None:
|
|
|
- if self.cases[coord].estOccupeePar(int(z)) != self.modeParam["pionCibleAttaqueDist"]:
|
|
|
- valide = False
|
|
|
- else:
|
|
|
- valide = False
|
|
|
- break
|
|
|
+ if coordOrigine[0] != coordCible[0] and coordOrigine[1] != coordCible[1]:
|
|
|
+ casesLigneMire = br.ligne(coordOrigine, coordCible, self.formeCases)
|
|
|
+ casesLigneMire.remove(coordOrigine)
|
|
|
+ casesLigneMire.remove(coordCible)
|
|
|
+ for coord in casesLigneMire:
|
|
|
+ x, y, z = coord
|
|
|
+ if self.cases[(x,y)].estOccupee(z):
|
|
|
+ valide = False
|
|
|
+ break
|
|
|
return valide
|
|
|
|
|
|
def pionSurCase(self, coord):
|