Esempio n. 1
0
  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")