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)
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
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