فهرست منبع

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

unknown 10 سال پیش
والد
کامیت
c08f20e290
3فایلهای تغییر یافته به همراه122 افزوده شده و 36 حذف شده
  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()