def charge(self, fichier, simple=False): """Charge le géoïde depuis un fichier""" self.afficheTexte("Chargement en cours...", parametres={}, type="sauvegarde") self.detruit() self.spritesJoueur = [] self.spritesNonJoueur = [] self.joueurs = [] if general.configuration.getConfiguration("debug", "planete", "debug_charge_planete", "f", bool): self.afficheTexte("Lecture du fichier...", parametres={}, type="sauvegarde") #Lecture depuis le zip zip = zipfile.ZipFile(fichier, "r") if zip.testzip()!=None: print "PLANETE :: Charge :: Erreur : Fichier de sauvegarde corrompu !" data = zip.read("sauvegarde") zip.close() lignes = data.split("\r\n") if general.configuration.getConfiguration("debug", "planete", "debug_charge_planete", "f", bool): self.afficheTexte("Parsage des infos...", parametres={}, type="sauvegarde") lignes = self.geoide.charge(lignes, simple) tot = len(lignes) for i in range(0, tot): if general.configuration.getConfiguration("debug", "planete", "debug_charge_planete", "f", bool): if i%500==0: self.afficheTexte("Parsage des infos... %{a}i/%{b}i", parametres={"a":i, "b":tot}, type="sauvegarde") ligne = lignes[i] elements = ligne.strip().lower().split(":") type = elements[0] elements = elements[1:] if type=="parametres": if elements[0]=="distancesoleil": #Attrapage des infos de distanceSoleil self.distanceSoleil = float(elements[1]) elif elements[0]=="anglesoleil": #Attrapage des infos de angleSoleil self.angleSoleil = float(elements[1]) else: print "Donnée inconnue : ",element[0] if type=="details": if elements[0]=="nomplanete": #Attrapage des infos de distanceSoleil self.nom = elements[1] else: print "Détail inconnu : ",element[0] elif type=="joueur": #Création d'un joueur type, nom, couleur, estJoueur, vide = elements couleur = VBase4(general.floatise(couleur.replace("(","").replace(")","").replace("[","").replace("]","").split(","))) classe = Joueur if type=="ia": classe = JoueurIA elif type=="local": classe = JoueurLocal elif type=="distant": classe = JoueurDistant else: print "PLANETE :: Charge :: Erreur, type de joueur inconnu :", type self.ajouteJoueur(classe(nom, couleur, estJoueur.lower().strip()=="true")) elif type=="joueur-ressource": #Création des ressources d'un joueur nomjoueur, nomressource, valeur, vide = elements for joueur in self.joueurs: if joueur.nom.lower().strip()==nomjoueur.lower().strip(): joueur.ressources[nomressource] = int(valeur) elif type=="sprite": #Sprites id, nomjoueur, modele, symbole, position, vitesse, vie, bouge, aquatique, dureeDeVie, tempsDeVie, fichierDefinition, vide = elements position = Vec3(*general.floatise(position.replace("[","").replace("]","").replace("(","").replace(")","").split(","))) if nomjoueur.lower().strip()=="none": joueur = None else: for joueurT in self.joueurs: if joueurT.nom.lower().strip()==nomjoueur.lower().strip(): joueur = joueurT if fichierDefinition.lower().strip()=="none": fichierDefinition = None sprite = Sprite(id, position, fichierDefinition, joueur) sprite.modele = modele sprite.symbole = symbole sprite.vie = float(vie) sprite.bouge = bouge.lower().strip()=="t" sprite.aquatique = aquatique.lower().strip()=="t" sprite.dureeDeVie = float(dureeDeVie) sprite.tempsDeVie = float(tempsDeVie) sprite.vitesse = float(vitesse) if joueur!=None: self.spritesJoueur.append(sprite) joueur.sprites.append(sprite) else: self.spritesNonJoueur.append(sprite) elif type=="sprite-contenu": id, type, valeur = elements valeur = float(valeur) for sprite in self.spritesJoueur: if sprite.id.lower().strip() == id.lower().strip(): sprite.contenu[type]=valeur for sprite in self.spritesNonJoueur: if sprite.id.lower().strip() == id.lower().strip(): sprite.contenu[type]=valeur elif ligne.strip()!="": print print "Avertissement : Planete::charge, type de ligne inconnue :", type,"sur la ligne :\r\n",ligne.strip() general.TODO("Ajouter la prise en charge du chargement de "+type) self.afficheTexte("Chargement terminé", parametres={}, type="sauvegarde")