Procházet zdrojové kódy

Creation de la classe ProjectionDep

olinox před 10 roky
rodič
revize
f0120a48fd
3 změnil soubory, kde provedl 131 přidání a 65 odebrání
  1. 45 2
      lib/Modes.py
  2. 0 63
      lib/ModesInteraction.py
  3. 86 0
      lib/ProjectionDep.py

+ 45 - 2
lib/Modes.py

@@ -1,4 +1,8 @@
-"""modes d'interaction avec le plateau"""
+"""les modes d'interaction permettent l'interaction
+entre l'interface (l'utilisateur) et le plateau de combat.
+Un seul mode ne peut etre actif a la fois
+Cette classe doit permettre de recevoir les commandes de l'utilisateur
+de maniere a produire un resultat unique (cases peintes, pion deplace...)"""
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 from EntreeSortie import EntreeSortie
@@ -266,7 +270,46 @@ class EntreesSorties(ModeBase):
             self.es.majProjection()    
 
 
-            
+class CreationPion(ModeBase):
+    """mode de creation de pions (combattant ou decor)"""
+    def __init__(self, plateau):
+        super(EntreesSorties, self).__init__(plateau)
+        self._focus = True
+        self.param = None
+
+        
+
+    def desactiver(self):
+        self.plateau.majProjectionPosition(False)
+
+
+
+
+
+
+
+
+
+
+
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
     

+ 0 - 63
lib/ModesInteraction.py

@@ -1,63 +0,0 @@
-"""les modes d'interaction permettent l'interaction
-entre l'interface (l'utilisateur) et le plateau de combat.
-Un seul mode ne peut etre actif a la fois
-Cette classe doit permettre de recevoir les commandes de l'utilisateur
-de maniere a produire un resultat unique (cases peintes, pion deplace...)
-Les modes sont repartis en deux categories:
-cp -> creation du plateau
-pi -> manipulation des pions"""
-
-class ModesInteraction():
-    def __init__(self, plateau):
-        self._actif = ""
-
-    def activer(self, mode, param = None):
-        """active le mode demande (avec si necessaire un parametre supplementaire)"""
-        #desactiver le mode actif
-        #activer le nouveau mode
-        #enregistrer ce mode comme etant le nouveau mode
-        pass
-
-    def resultat(self):
-        """renvoie le resultat de la derniere interaction"""
-        pass
-
-    def actif(self):
-        """renvoie le mode actif"""
-        return self._actif
-    
-
-class Mode():
-    def __init__(self):
-        self.nom = ""
-        self.curseur = ""
-        self.dragMode = False
-        self.param = {}
-        
-        
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 86 - 0
lib/ProjectionDep.py

@@ -0,0 +1,86 @@
+"""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._coord = (-1,-1)
+        self._forme = Forme(self.plateau.formeCases)
+        self._nbRotations = 0
+
+    def creer(self, pion):
+        self._forme.definirForme(pion.formeDef[self.plateau.formeCases])
+
+    def majCoord(self, coord):
+        self.desactiver()
+        self._coord = coord
+        self.maj()
+
+    def majRotation(self, modRotation):
+        self.desactiver()
+        self._nbRotations += modRotation
+        self.maj()
+
+    def desactiver(self):
+        for coord in self._forme.listeCases(self._coord, self._nbRotations):
+            self.plateau.cases[coord].majEstCibleCurseur(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._pion.z):
+                    ok += 1
+                else:
+                    #si la case est occupee par le pion lui-meme
+                    if self.plateau.cases[coord].estOccupeePar(self._pion.z) == self._pion:
+                        ok += 1
+        valide = (ok == compte and compte > 0)
+        return valide        
+
+    def maj(self):
+        if self.projectionValide():
+            depValide = self.deplacementValide()
+            for coord in self._forme.listeCases(self._coord, self._nbRotations):
+                self.plateau.cases[coord].majEstCibleCurseur(True, depValide)
+            
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+