Pārlūkot izejas kodu

Performances de la creation des caches amelioree

unknown 10 gadi atpakaļ
vecāks
revīzija
e842a66f0f

+ 119 - 0
lib/Cache - Copie.py

@@ -0,0 +1,119 @@
+#from __future__ import unicode_literals
+# -*- coding: utf-8 -*-
+from __future__ import division
+import Modes
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+class Cache(QGraphicsPolygonItem):
+    """cache place sur le plateau"""
+    def __init__(self, plateau, numero, parent=None):
+        """initialisation de la fenetre"""
+        super (Cache, self).__init__(parent)
+        self.plateau = plateau
+        self.numero = numero
+        self.nom = ""
+        self.listeCases = []
+        self._active = False
+        self._etiquette = None
+
+    def __getstate__(self):
+        """selectionne les attributs qui seront sauvegardes"""
+        self._active = False
+        state = {key:value for key, value in self.__dict__.items() if key in ["numero", "nom", "listeCases", "_active"]}
+        return (state)
+
+    def __setstate__(self, state):
+        """recupere les attributs sauvegardes"""
+        self.__dict__ = state
+
+    def recreer(self, plateau):
+        super (Cache, self).__init__()
+        self._etiquette = None        
+        self.plateau = plateau
+        self.creer()
+        
+    def creer(self):
+        """cree le cache sur la liste de cases en parametre"""
+        self.setFlag(QGraphicsItem.ItemIsFocusable)
+        self.setAcceptHoverEvents(True)
+        self.setBrush(QColor(0,0,0,255))
+        pinceau = QPen(QColor("black"))
+        pinceau.setWidth(10)
+        self.setPen(pinceau)
+        self._etiquette = QGraphicsTextItem(QString.fromUtf8("{}- {}".format(self.numero, self.nom)))
+        self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
+        police = QFont("Arial",30)
+        police.setBold(True)
+        self._etiquette.setFont(police)
+        self._etiquette.setDefaultTextColor(QColor(50,50,50,180))     
+        self._etiquette.setParentItem(self)
+        self.setPolygon(self.plateau.polygoneAgglo(self.listeCases))
+        self.setZValue(100)
+        self.plateau.addItem(self)
+        self._active = True
+
+    def majPolygone(self, listeCases):
+        self.listeCases = listeCases
+        self.setPolygon(self.plateau.polygoneAgglo(self.listeCases))
+        self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
+
+    def majEtiquette(self):
+        self._etiquette.setPlainText(QString().fromUtf8(self.nom))
+
+    def modeChange(self, mode):
+        if self._active:
+            if issubclass(mode, Modes.ModeBaseCp):
+                transparence = 130
+            else:
+                transparence = 255
+            self.setBrush(QColor(0,0,0, transparence))
+
+    def activer(self, actif):
+        self._active = actif
+        self.majAffichage()
+
+    def actif(self):
+        return self._active
+
+    def majAffichage(self):
+        self.setVisible(self._active)
+
+    def coordCentre(self):
+        """renvoie les coordonnees de la case la plus centrale de la liste"""
+        xtot = 0
+        ytot = 0
+        for coord in self.listeCases:
+            xtot += coord[0]
+            ytot += coord[1]
+
+        ecartMin = None
+        coordRetenues = None
+        for coord in self.listeCases:
+            ecartX = abs(xtot - (coord[0] * len(self.listeCases)))
+            ecartY = abs(ytot - (coord[1] * len(self.listeCases)))
+            if not ecartMin or (ecartX + ecartY) < ecartMin:
+                coordRetenues = coord
+                ecartMin = ecartX + ecartY
+        return coordRetenues
+
+    def sceneEvent(self, event):
+        """filtre les evenements souris et clavier
+            si vrai: l'evenement est bloque"""
+        retour = (not self.actif() or issubclass(self.plateau.modeActif.__class__, Modes.ModeBaseCp))
+        if not retour:
+            event.accept()
+        else:
+            event.ignore()
+        return retour         
+
+
+
+
+
+
+
+
+
+
+

+ 48 - 22
lib/Cache.py

@@ -4,8 +4,9 @@ from __future__ import division
 import Modes
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
+from Case import Case
 
-class Cache(QGraphicsPolygonItem):
+class Cache(QGraphicsItem):
     """cache place sur le plateau"""
     def __init__(self, plateau, numero, parent=None):
         """initialisation de la fenetre"""
@@ -16,6 +17,7 @@ class Cache(QGraphicsPolygonItem):
         self.listeCases = []
         self._active = False
         self._etiquette = None
+        self._listePolygones = []
 
     def __getstate__(self):
         """selectionne les attributs qui seront sauvegardes"""
@@ -31,31 +33,42 @@ class Cache(QGraphicsPolygonItem):
         super (Cache, self).__init__()
         self._etiquette = None        
         self.plateau = plateau
+        self._listePolygones = []
         self.creer()
         
     def creer(self):
         """cree le cache sur la liste de cases en parametre"""
         self.setFlag(QGraphicsItem.ItemIsFocusable)
         self.setAcceptHoverEvents(True)
-        self.setBrush(QColor(0,0,0,255))
-        pinceau = QPen(QColor("black"))
-        pinceau.setWidth(10)
-        self.setPen(pinceau)
-        self._etiquette = QGraphicsTextItem(QString.fromUtf8("{}- {}".format(self.numero, self.nom)))
+        self._etiquette = QGraphicsTextItem(QString.fromUtf8("{}".format(self.nom)))
         self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
         police = QFont("Arial",30)
         police.setBold(True)
         self._etiquette.setFont(police)
-        self._etiquette.setDefaultTextColor(QColor(50,50,50,180))     
+        self._etiquette.setDefaultTextColor(QColor(255, 255, 255, 200))     
         self._etiquette.setParentItem(self)
-        self.setPolygon(self.plateau.polygoneAgglo(self.listeCases))
+        self._etiquette.setZValue(10)
+        for coord in self.listeCases:
+            self.ajouterPolygone(Case(self.plateau).polygone(coord[0], coord[1]))
         self.setZValue(100)
+        self.setFlag(QGraphicsItem.ItemHasNoContents)
+        self.setHandlesChildEvents(True)
         self.plateau.addItem(self)
         self._active = True
 
-    def majPolygone(self, listeCases):
+    def ajouterPolygone(self, polygone):
+        polygoneGraphique = PolygoneCache(self)
+        polygoneGraphique.creer(polygone)
+        polygoneGraphique.setParentItem(self)
+        self._listePolygones.append(polygoneGraphique)
+            
+    def majForme(self, listeCases):
+        for polygone in self._listePolygones:
+            polygone.setParentItem(None)
+        self._listePolygones = []
         self.listeCases = listeCases
-        self.setPolygon(self.plateau.polygoneAgglo(self.listeCases))
+        for coord in self.listeCases:
+            self.ajouterPolygone(Case(self.plateau).polygone(coord[0], coord[1]))
         self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
 
     def majEtiquette(self):
@@ -64,10 +77,11 @@ class Cache(QGraphicsPolygonItem):
     def modeChange(self, mode):
         if self._active:
             if issubclass(mode, Modes.ModeBaseCp):
-                transparence = 130
+                transparence = 100
             else:
                 transparence = 255
-            self.setBrush(QColor(0,0,0, transparence))
+            for polygone in self._listePolygones:  
+                polygone.majTransparence(transparence)
 
     def activer(self, actif):
         self._active = actif
@@ -105,15 +119,27 @@ class Cache(QGraphicsPolygonItem):
             event.accept()
         else:
             event.ignore()
-        return retour         
-
-
-
-
-
-
-
-
-
+        return retour
+    
+    def boundingRect(self):
+        return QRectF()
 
+class PolygoneCache(QGraphicsPolygonItem):
+    def __init__(self, cache, parent=None):
+        """initialisation de la fenetre"""
+        super (PolygoneCache, self).__init__(parent)
+        self.cache = cache
+        self.setAcceptHoverEvents(True)
+        
+    def creer(self, polygone):
+        self.setPolygon(polygone)
+        self.majTransparence(255)
+        self.setParentItem(self)
+
+    def majTransparence(self, transparence):
+        self.setBrush(QColor(0,0,0,transparence))
+        pinceau = QPen()
+        pinceau.setBrush(QColor(0,0,0,transparence))
+        pinceau.setWidth(1)
+        self.setPen(pinceau)        
 

+ 1 - 3
lib/Plateau.py

@@ -125,10 +125,8 @@ class Plateau(QGraphicsScene):
     def recreer(self, fenetre):
         self.fenetre = fenetre
         self.gestionCombat = None
-        
         super(Plateau, self).__init__()
         self.connexions()
-
         self.initialisationGraphique() 
 
         #recreation des cases 
@@ -1434,7 +1432,7 @@ class Plateau(QGraphicsScene):
 
     def editerFormeCache(self, index, listeCases):
         """edite le cache en index s'il existe"""
-        self.caches[index].majPolygone(listeCases)
+        self.caches[index].majForme(listeCases)
 
     def majEtatCache(self, actif):
         emetteur = self.sender().objectName()

BIN
lib/biblio/combattant


BIN
parties/Partie1/svg/0.p


BIN
parties/Partie1/svg/infos_sauvegarde