Exemplo n.º 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)
Exemplo n.º 2
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