Example #1
0
 def dragDrop(self, coordDeb, coordFin):
   """Gère le drag&drop"""
   
   if general.joueurLocal == None:
     #on a pas de joueur
     return
     
   #"shift+d&d" ajoute les unités à la sélection courante, "d&d" remplace la sélection courante par ce qui est dans le rectangle
   if not "shift" in self.touchesControles:
     self.selection = []
   
   #On normalise les coordonnées du rectangle de sélection
   minx = min(coordDeb[0], coordFin[0])
   miny = min(coordDeb[1], coordFin[1])
   maxx = max(coordDeb[0], coordFin[0])
   maxy = max(coordDeb[1], coordFin[1])
   pt1 = self.pointEcranVersRender2D((minx,miny))
   pt2 = self.pointEcranVersRender2D((maxx,maxy))
   
   for sprite in general.planete.spritesJoueur:
     #On ne prend en compte que les sprites du joueur local
     if sprite.joueur == general.joueurLocal:
       pos = general.map3dToRender2d(sprite.rac, Point3(0.0,0.0,0.0))
       if pos!=None:
         if pos[0]>=pt1[0] and pos[0]<=pt2[0]:
           if pos[1]>=pt1[1] and pos[1]<=pt2[1]:
             if general.ligneCroiseSphere(sprite.position, self.camera.getPos(), (0.0,0.0,0.0), 1.0) == None:
               if sprite not in self.selection:
                 self.selection.append(sprite)
Example #2
0
 def procFace(face):
   if face.enfants:
     return True
   jour = Vec3(1.0,1.0,1.0)
   nuit = Vec3(0.2,0.2,0.4)
   p1 = Vec3(general.planete.geoide.sommets[face.sommets[0]])
   p1.normalize()
   p1 = p1 * 1.0001
   if general.ligneCroiseSphere(p1, general.planete.soleil.getPos(), Vec3(0.0,0.0,0.0), 1.0) != None:
     c1=nuit
   else:
     c1=jour
   p2 = Vec3(general.planete.geoide.sommets[face.sommets[1]])
   p2.normalize()
   p2 = p2 * 1.0001
   if general.ligneCroiseSphere(p2, general.planete.soleil.getPos(), Vec3(0.0,0.0,0.0), 1.0) != None:
     c2=nuit
   else:
     c2=jour
   p3 = Vec3(general.planete.geoide.sommets[face.sommets[2]])
   p3.normalize()
   p3 = p3 * 1.0001
   if general.ligneCroiseSphere(p3, general.planete.soleil.getPos(), Vec3(0.0,0.0,0.0), 1.0) != None:
     c3=nuit
   else:
     c3=jour
     
   c = (c1+c2+c3)/3
   c = int(c[0]*255+0.5), int(c[1]*255+0.5), int(c[2]*255+0.5)
   
   a1,a2,a3 = self.triangleVersCarte(p1, p2, p3, taille, coordonneesTexturage=False)
   a1 = int(a1[0]+0.5), int(a1[1]+0.5)
   a2 = int(a2[0]+0.5), int(a2[1]+0.5)
   a3 = int(a3[0]+0.5), int(a3[1]+0.5)
   draw.polygon((a1,a2,a3), fill=c, outline=None)
   return True
Example #3
0
  def pingPlanete(self, task):
    """Fonction appelée a chaque image, temps indique le temps écoulé depuis l'image précédente"""
    
    if self.lastPing==None:
      self.lastPing = task.time-1.0/60
    temps = task.time-self.lastPing
    self.lastPing = task.time
    
    #Sauvegarde automatique
    self.lastSave += temps
    if self.seuilSauvegardeAuto != -1 and self.lastSave > self.seuilSauvegardeAuto:
      self.afficheTexte("Sauvegarde automatique en cours...", parametres={}, type="sauvegarde")
      self.sauvegarde(os.path.join(".","sauvegardes","sauvegarde-auto.pln"))
      self.lastSave = 0

    #On fabrique le soleil si on en a pas
    if self.soleil == None:
      self.fabriqueSoleil()

    #Fait tourner le soleil
    self.angleSoleil += temps / math.pi * self.vitesseSoleil
    if self.soleil != None and self.soleil != 1:
      self.soleil.setPos(0.0, math.sin(self.angleSoleil)*self.distanceSoleil, math.cos(self.angleSoleil)*self.distanceSoleil)
      self.soleil.lookAt(0,0,0)
      
      if self.flare != None:
        self.flare.detachNode()
        self.flare.removeNode()
        self.flare=None
      #Calcule le lens flare
      if general.ligneCroiseSphere(general.io.camera.getPos(), self.soleil.getPos(), (0.0,0.0,0.0), 1.0) == None:
        ptLum = general.map3dToRender2d(render, self.soleil.getPos())
        if ptLum!=None:
          pass
          """self.flare = NodePath("flare")
          for i in range(0, 3):
            p=ptLum[0]*i/3.0, ptLum[1]*i/3.0, ptLum[2]*i/3.0
            #Fabrique un carré
            cardMaker = CardMaker('flare')
            cardMaker.setFrame(0.1, 0.1, 0.1, 0.1)
            cardMaker.setHasNormals(True)
            flare = self.flare.attachNewNode(cardMaker.generate())
            flare.setTexture("./data/textures/flare/lens-flare1.png")
            flare.setPos(*p)
          self.flare.reparentTo(render2d)"""      
          
    _lightvec = Vec4(1.0, 0.0, 1.0, 1.0)
    if self.soleil != None and self.geoide!=None:
      _lightvec = Vec3(self.soleil.getPos() - self.geoide.racine.getPos())
      _lightvec = Vec4(_lightvec[0], _lightvec[1], _lightvec[2], 0.0)
      
    render.setShaderInput( 'lightvec', _lightvec )
      
    #Met à jour l'état des joueurs
    for joueur in self.joueurs:
      joueur.pingJoueur(temps)
      
    #Met à jour les états des sprites
    for sprite in self.spritesJoueur[:]:
      if general.configuration.getConfiguration("Planete","regles","obscuriteTue","t", bool):
        if general.ligneCroiseSphere(sprite.position, self.soleil.getPos(), (0.0,0.0,0.0), 1.0) != None:
          if not sprite.nocturne:
            sprite.tue("obscurite")
      if not sprite.pingSprite(temps):
        if sprite.joueur !=None:
          sprite.joueur.spriteMort(sprite)
        while sprite in self.spritesJoueur:
          self.spritesJoueur.remove(sprite)
          
    #Les sprites non joueurs ne sont remis à jour que de temps en temps
    self.compteurMAJSpriteNonJoueur+=temps
    if self.compteurMAJSpriteNonJoueur>self.seuilMAJSpriteNonJoueur:
      for sprite in self.spritesNonJoueur[:]:
        if not sprite.pingSprite(self.compteurMAJSpriteNonJoueur):
          if sprite.joueur !=None:
            sprite.joueur.spriteMort(sprite)
          while sprite in self.spritesNonJoueur:
            self.spritesNonJoueur.remove(sprite)
      self.compteurMAJSpriteNonJoueur = 0.0
    
    if not self.fini:
      return task.cont
    else:
      return task.done