Pārlūkot izejas kodu

Creation du mode de deplacement des pions (cp)
Separation des modes en cp et pi

unknown 10 gadi atpakaļ
vecāks
revīzija
c08f20e290
3 mainītis faili ar 122 papildinājumiem un 36 dzēšanām
  1. 2 5
      lib/Decor.py
  2. 89 13
      lib/Modes.py
  3. 31 18
      lib/Plateau.py

+ 2 - 5
lib/Decor.py

@@ -31,10 +31,7 @@ class Decor(Pion):
 
     def mousePressEvent(self, event):
         """evenement lors du clic souris"""
-        if event.button() == 1: #sur clic gauche  
-            #en mode creation, on peut selectionner le decor pour le deplacer ou le supprimer
-            if self.plateau.modePrincipal == "creation":
-                 self.plateau.pionDecorSaisir(self.numero)
-                 event.accept()
+        if event.button() == 1: #sur clic gauche
+            self.plateau.pionClique(self.numero)
         else:
             event.ignore()       

+ 89 - 13
lib/Modes.py

@@ -20,6 +20,9 @@ class ModeBase(object):
         #met le focus sur la QGraphicsView a l'activation
         self._focus = False 
 
+    def nom(self):
+        return self.__class__.__name__
+
     def activer(self, param = None):
         """active le mode"""
         self.activerCurseur()
@@ -40,8 +43,9 @@ class ModeBase(object):
     def activerCurseur(self):
         self.plateau.fenetre.ui.cbt_vue.setDragMode(self._activerDragMode)
         curseurPix = QPixmap(self._sourceCurseur)
-        curseurPinceau = QCursor(curseurPix, 0, curseurPix.height())
-        self.plateau.fenetre.ui.cbt_vue.setCursor(curseurPinceau)
+        if not curseurPix.isNull():
+            curseurPinceau = QCursor(curseurPix, 0, curseurPix.height())
+            self.plateau.fenetre.ui.cbt_vue.setCursor(curseurPinceau)   
 
     def desactiverCurseur(self):
         self.plateau.fenetre.ui.cbt_vue.setCursor(QCursor(Qt.ArrowCursor))
@@ -109,15 +113,28 @@ class ModeBase(object):
     
     def toucheClavier(self, event):
         pass
-  
+
+
+class ModeBaseCp(ModeBase):
+    """mode servant de base a tous les modes lies a la creation de plateau"""
+    def __init__(self, plateau):
+        super(ModeBaseCp, self).__init__(plateau)
+        self.type = "cp"
+
+
+class ModeBasePi(ModeBase):
+    """mode servant de base a tous les modes lies aux actions des combattants"""
+    def __init__(self, plateau):
+        super(ModeBasePi, self).__init__(plateau)
+        self.type = "pi"
 
 ### --------------------------------------- ####
 
 
-class Standard(ModeBase):
-    """mode standard"""
+class StandardCp(ModeBaseCp):
+    """mode standard en creation de plateau"""
     def __init__(self, plateau):
-        super(Standard, self).__init__(plateau)
+        super(StandardCp, self).__init__(plateau)
         self._sourceCurseur = ""
         self._focus = False
         self._activerDragMode = True
@@ -126,7 +143,7 @@ class Standard(ModeBase):
         pass
         #doit selectionner le pion
 
-class MajCases(ModeBase):
+class MajCases(ModeBaseCp):
     """mode de mise a jour des cases (terrain, couleur, effet special)"""
     def __init__(self, plateau):
         super(MajCases, self).__init__(plateau)
@@ -177,10 +194,10 @@ class MajCases(ModeBase):
         elif event.key() == Qt.Key_Down:
             self.plateau.fenetre.ui.epaisseurPinceau.setValue(self.plateau.fenetre.ui.epaisseurPinceau.value()-1)
 
-class Pipette(ModeBase):
+class Pipette(ModeBaseCp):
     """mode pipette: on preleve la couleur ou le terrain d'une case"""
     def __init__(self, plateau):
-        super(ZonePlacement, self).__init__(plateau)
+        super(Pipette, self).__init__(plateau)
         self._sourceCurseur = "img\\curseurSeringue.png"
 
     def activerCurseur(self):
@@ -194,7 +211,7 @@ class Pipette(ModeBase):
         self.plateau.activerMode(Modes.CaseMaj, param)     
              
 
-class ZonePlacement(ModeBase):
+class ZonePlacement(ModeBaseCp):
     """mode de definition de la/les zones de placement des joueurs"""
     def __init__(self, plateau):
         super(ZonePlacement, self).__init__(plateau)
@@ -226,7 +243,7 @@ class ZonePlacement(ModeBase):
                 self.plateau.majZonePlacement(self.plateau.pinceau.selection())
                 
 
-class EntreesSorties(ModeBase):
+class EntreesSorties(ModeBaseCp):
     """mode de definition deentrees et sorties du plateau"""
     def __init__(self, plateau):
         super(EntreesSorties, self).__init__(plateau)
@@ -271,7 +288,7 @@ class EntreesSorties(ModeBase):
             self.es.majProjection()    
 
 
-class CreationPion(ModeBase):
+class CreationPion(ModeBaseCp):
     """mode de creation de pions (combattant ou decor)"""
     def __init__(self, plateau):
         super(CreationPion, self).__init__(plateau)
@@ -304,7 +321,7 @@ class CreationPion(ModeBase):
                 self.plateau.proj.majRotation(-1)
 
 
-class SuppressionPion(ModeBase):
+class SuppressionPion(ModeBaseCp):
     """mode de suppression de pions (combattant ou decor)"""
     def __init__(self, plateau):
         super(SuppressionPion, self).__init__(plateau)
@@ -320,6 +337,65 @@ class SuppressionPion(ModeBase):
             self.plateau.pionSupprimer(item.parentItem().numero)
             
 
+class DeplacementPion(ModeBaseCp):
+    """mode de deplacement de pions (combattant ou decor) en mode creation
+        attention: different des actions de type deplacement qu'effectuent les pions en mode Combat"""
+    def __init__(self, plateau):
+        super(DeplacementPion, self).__init__(plateau)
+        self._num = 0
+        
+    def activer(self, num):
+        self._num = num
+        if self._num < 10000:
+            pion = self.plateau.combattants[self._num]
+        else:
+            pion = self.plateau.decors[self._num]
+        self.plateau.proj.creer(pion)
+        self.deplace = False
+        super(DeplacementPion, self).activer()
+
+    def desactiver(self):
+        self.plateau.proj.desactiver()
+        self._num = 0
+        super(DeplacementPion, self).desactiver()
+
+    def survol_case(self, coord):
+        if self._num > 0:
+            self.plateau.proj.majCoord(coord)
+            self.deplace = True
+
+    def clic_case(self, coord):
+        if self._num > 0:
+            if self.deplace:
+                if self._num < 10000:
+                    pion = self.plateau.combattants[self._num]
+                else:
+                    pion = self.plateau.decors[self._num]
+                pion.majPosition(self.plateau.proj.coord(), self.plateau.proj.nbRotations())
+
+    def toucheClavier(self, event):
+        if self._num > 0:
+            if event.key() == Qt.Key_Right:
+                self.plateau.proj.majRotation(1)
+                self.deplace = True
+            elif event.key() == Qt.Key_Left:
+                self.plateau.proj.majRotation(-1)
+                self.deplace = True
+
+
+#-----------------------------------------------
+#-----------------------------------------------
+
+class StandardPi(ModeBasePi):
+    """mode standard de la manipulation de pion en combat"""
+    def __init__(self, plateau):
+        super(StandardPi, self).__init__(plateau)
+        self._focus = False
+        self._activerDragMode = True
+
+    def clic_pion(self, num):
+        pass
+        #doit selectionner le pion
 
 
 

+ 31 - 18
lib/Plateau.py

@@ -289,7 +289,7 @@ class Plateau(QGraphicsScene):
 
 
         #gestion du mode d'interaction avec le plateau
-        self.modeActif = Modes.Standard(self)
+        self.modeActif = Modes.StandardCp(self)
         self.modeActif_old = ""
         self.pinceau = Pinceau(self)
         self.proj = ProjectionDep(self)
@@ -387,7 +387,7 @@ class Plateau(QGraphicsScene):
     def majListeTerrains(self):
         """mise a jour de la liste des terrains depuis la sauvegarde"""
         self.fenetre.ui.cp_listeTerrains.maj()
-        self.activerMode(Modes.Standard)
+        self.activerMode(Modes.StandardCp)
 
     def terrainEdit(self):
         """ouvre la fenetre 'terrains' en mode edition"""
@@ -413,7 +413,7 @@ class Plateau(QGraphicsScene):
     def majListeCreatures(self):
         """mise a jour de la liste des creatures depuis la sauvegarde"""
         self.fenetre.ui.cp_listeCreatures.maj()
-        self.activerMode(Modes.Standard)
+        self.activerMode(Modes.StandardCp)
 
     def creatureEdit(self):
         """ouvre la fenetre 'creatures' en mode edition"""
@@ -440,7 +440,7 @@ class Plateau(QGraphicsScene):
     def majListeDecors(self):
         """mise a jour de la liste des decors depuis la sauvegarde"""
         self.fenetre.ui.cp_listeDecors.maj()
-        self.activerMode(Modes.Standard)
+        self.activerMode(Modes.StandardCp)
 
     def decorEdit(self):
         """ouvre la fenetre 'decors' en mode edition"""
@@ -520,7 +520,7 @@ class Plateau(QGraphicsScene):
         if couleur.isValid():
             self.activerMode(Modes.MajCases, couleur)
         else:
-            self.activerMode(Modes.Standard)
+            self.activerMode(Modes.StandardCp)
 
     def modePeintureCase_perso(self):
         origine = self.sender().objectName()
@@ -531,7 +531,7 @@ class Plateau(QGraphicsScene):
         if couleur.isValid():
             self.activerMode(Modes.MajCases, couleur)
         else:
-            self.activerMode(Modes.Standard)            
+            self.activerMode(Modes.StandardCp)            
 
     def modeCopieTerrain(self):
         """enclenche le mode copie de case"""
@@ -1710,20 +1710,31 @@ class Plateau(QGraphicsScene):
         else:
             self.fenetre.ui.inf_boiteCase.setVisible(False)
 
-    def pionClique(self, numCombattant):
+    def pionClique(self, num):
         """on a clique sur ce pion"""
-        accepte = False
-        if self.pionSelectionne() != None and self.modeCombat == "combatAttaqueDist":    
-            self.validerAttaqueDist()
-            accepte = True
+        if num < 10000:
+            pion = self.combattants[num]
+            self.modeActif.clic_combattant(num)
+
             
-        elif self.modeActif_old == "standard" and self.pionSelectionne() == None:
-            self.pionSaisir(numCombattant)
-            accepte = True
+            accepte = False
+            if self.pionSelectionne() != None and self.modeCombat == "combatAttaqueDist":    
+                self.validerAttaqueDist()
+                accepte = True
+
+                
+        else:
+            pion = self.decors[num]
+            self.modeActif.clic_decor(num)
+        
+        if self.modeActif.nom() == "Standard":
+            self.activerMode(Modes.DeplacementPion, num)
+        
         return accepte    
 
     def pionSurvol(self, numCombattant):
         """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
+        self.modeActif.survol_combattant(numCombattant)
         if numCombattant in self.combattants:
             pion = self.combattants[numCombattant]
         else:
@@ -1738,6 +1749,7 @@ class Plateau(QGraphicsScene):
 
     def pionDoubleClic(self, numCombattant):
         """on a double-clique sur le pion"""
+        self.modeActif.doubleClic_combattant(numCombattant)
         accepte = False
         if self.pionSelectionne() == self.combattants[numCombattant] and self.modeCombat == "aucun":
 ##            self.pionSaisir(numCombattant)
@@ -1765,6 +1777,7 @@ class Plateau(QGraphicsScene):
                 numero = 10001
                 if len(self.decors) > 0:
                     numero = max(self.decors) + 10001
+                pion.numero = numero
                 self.decors[numero] = pion
             
             cree = True
@@ -1857,9 +1870,9 @@ class Plateau(QGraphicsScene):
     def majInfosDecor(self, pionDecor=None):
         """met a jour les informations d'un pion dans la zone prevue"""
         if pionDecor != None:  
-            self.fenetre.ui.inf_decorNom.setText(QString.fromUtf8(pionDecor.decor.nom))
-            if len(pionDecor.decor.img["nom"]) > 0:
-                pix = QPixmap(QString.fromUtf8("img\\"+pionDecor.decor.img["nom"]))
+            self.fenetre.ui.inf_decorNom.setText(QString.fromUtf8(pionDecor.nom))
+            if len(pionDecor.img.nom) > 0:
+                pix = QPixmap(QString.fromUtf8("img\\"+pionDecor.img.nom))
                 pix = pix.scaled(61, 51, Qt.KeepAspectRatio, Qt.SmoothTransformation)
                 self.fenetre.ui.infoDecorEnCours_image.setPixmap(pix)
             self.fenetre.ui.inf_boiteDecor.setVisible(True)
@@ -1994,7 +2007,7 @@ class Plateau(QGraphicsScene):
                 self.majModeCombat("aucun")
             else:    
                 self.majMode("standard")
-                self.activerMode(Modes.Standard)
+                self.activerMode(Modes.StandardCp)
             event.accept()
         #event.ignore()