/[ambar]/ambar/sala.py
ViewVC logotype

Diff of /ambar/sala.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.15 by amoyav, Mon Aug 4 19:04:46 2003 UTC revision 2.16 by amoyav, Sat Aug 30 13:31:25 2003 UTC
# Line 890  class Sala(object): Line 890  class Sala(object):
890          return ocupado          return ocupado
891    
892    
893        def objeto_en_sala(self, nombre_objeto):
894            """Comprueba si en la sala existe un objeto con el nombre indicado.
895    
896            El nombre puede ser una expresión regular simple (con * y ?, como los wilcards de DOS).
897    
898            Requiere:
899                nombre_objeto != None
900            """
901            # Convertir la expresion regular de tipo ?* al estilo del módulo sre.
902            nombre_objeto = "^" + nombre_objeto.replace("?", ".").replace("*", ".*") + "$"
903            for objeto in self.__objetos:
904                if len(objeto["instancias"]) > 0:
905                    if sre.match(nombre_objeto, objeto["instancias"][0].nombre):
906                        resultado = 1
907                        break
908            else:
909                resultado = 0
910    
911            return resultado
912    
913    
914      def buscar_objeto(self, id_objeto, n_orden=1):      def buscar_objeto(self, id_objeto, n_orden=1):
915          """Localiza un objeto en la sala.          """Localiza un objeto en la sala.
916    
# Line 1029  class Sala(object): Line 1050  class Sala(object):
1050                                     "instancias":objetos})                                     "instancias":objetos})
1051    
1052    
1053      def objeto_destruido(self, objeto_destruido):      def objeto_desaparece(self, objeto):
1054          """Un objeto contenido en esta sala ha sido destruido.          """Un objeto contenido en esta sala ha desaparecido de aquí.
1055    
1056          Hay que eliminarlo de la lista de instancias de la sala. Este método será llamado          Hay que eliminarlo de la lista de instancias de la sala. Este método será llamado
1057          sólo desde el propio objeto, a través del interfaz Contenedor.          sólo desde el propio objeto, a través del interfaz Contenedor.
1058          """          """
1059          objeto_destruido.liberar()          objeto.liberar()
1060          for i, objeto in izip(self.__objetos):          for i, objeto in izip(self.__objetos):
1061              instancias = objeto["instancias"]              instancias = objeto["instancias"]
1062              for j, instancia in izip(instancias):              for j, instancia in izip(instancias):
1063                  if instancia == objeto_destruido:                  if instancia == objeto:
1064                      del instancias[j]                      del instancias[j]
1065                      if len(instancias) == 0 and objeto["probabilidad"] == 0:                      if len(instancias) == 0 and objeto["probabilidad"] == 0:
1066                          del self.__objetos[i]                          del self.__objetos[i]
1067                      break                      break
1068    
1069    
1070      def objeto_reemplazado(self, objeto_antiguo, objeto_nuevo):      def objeto_aparece(self, objeto):
1071          """Un objeto contenido en esta sala ha sido destruido, y reemplazado por otro.          """Un objeto aparece en esta sala.
1072    
1073          Hay que eliminar el antiguo de la lista de instancias de la sala, y añadir el nuevo.          Hay que añadirlo a la lista de instancias de la sala. Este método será llamado
1074          Este método será llamado sólo desde el propio objeto, a través del interfaz Contenedor.          sólo desde el propio objeto, a través del interfaz Contenedor.
1075          """          """
1076          objeto_antiguo.liberar()          objeto.contener(self)
         for i, objeto in izip(self.__objetos):  
             instancias = objeto["instancias"]  
             for j, instancia in izip(instancias):  
                 if instancia == objeto_antiguo:  
                     del instancias[j]  
                     if len(instancias) == 0 and objeto["probabilidad"] == 0:  
                         del self.__objetos[i]  
                     break  
   
         objeto_nuevo.contener(self)  
1077                    
1078          for objeto in self.__objetos:          for objeto in self.__objetos:
1079              if objeto["id"] == objeto_nuevo.id:              if objeto["id"] == objeto.id:
1080                  objeto["instancias"].append(objeto_nuevo)                  objeto["instancias"].append(objeto)
1081                  break                  break
1082          else:          else:
1083              self.__objetos.append({"id":instancia.id,              self.__objetos.append({"id":instancia.id,
# Line 1074  class Sala(object): Line 1085  class Sala(object):
1085                                     "maximo":0,                                     "maximo":0,
1086                                     "dificultad":dificultad,                                     "dificultad":dificultad,
1087                                     "cantidad":1,                                     "cantidad":1,
1088                                     "descripcion":objeto_nuevo.nombre,                                     "descripcion":objeto.nombre,
1089                                     "instancias":[objeto_nuevo]})                                     "instancias":[objeto]})
   
1090    
     def objeto_en_sala(self, nombre_objeto):  
         """Comprueba si en la sala existe un objeto con el nombre indicado.  
1091    
1092          El nombre puede ser una expresión regular simple (con * y ?, como los wilcards de DOS).      def objeto_reemplazado(self, objeto_antiguo, objeto_nuevo):
1093            """Un objeto contenido en esta sala es reemplazado por otro.
1094    
1095          Requiere:          Hay que borrar el objeto antiguo de la lista de instancias de la sala, y añadir
1096              nombre_objeto != None          el nuevo.  Este método será llamado sólo desde el propio objeto, a través del
1097            interfaz Contenedor.
1098          """          """
1099          # Convertir la expresion regular de tipo ?* al estilo del módulo sre.          self.objeto_desaparece(objeto_antiguo)
1100          nombre_objeto = "^" + nombre_objeto.replace("?", ".").replace("*", ".*") + "$"          self.objeto_aparece(objeto_nuevo)
         for objeto in self.__objetos:  
             if len(objeto["instancias"]) > 0:  
                 if sre.match(nombre_objeto, objeto["instancias"][0].nombre):  
                     resultado = 1  
                     break  
         else:  
             resultado = 0  
   
         return resultado  
1101    
1102    
1103      def salida_cerrada(self, id_sala_destino):      def salida_cerrada(self, id_sala_destino):
# Line 1178  class Sala(object): Line 1179  class Sala(object):
1179              personaje.controlador.suceso_entorno(texto)              personaje.controlador.suceso_entorno(texto)
1180    
1181    
1182        def crear_objeto(self, id_objeto):
1183            """Aparece una instancia nueva de un objeto en la sala.
1184    
1185            Requiere:
1186                id_objeto != None
1187            """
1188            objeto = Objeto(id_objeto)
1189            self.objeto_aparece(objeto)
1190    
1191    
1192        def crear_pnj(self, id_pnj):
1193            """Aparece un nuevo pnj en esta sala.
1194    
1195            Requiere:
1196                id_pnj != None
1197            """
1198            id_unico = id_pnj + '%' + PersonajeNoJugador.nuevo_id()
1199            escribir("Vamos a crear a " + id_unico)
1200            self.__personajes[id_unico] = PersonajeNoJugador.nuevo(id_unico, self)
1201    
1202    
1203      def salvar(self):      def salvar(self):
1204          """Graba en un fichero de salas la sala con todo su contenido."""          """Graba en un fichero de salas la sala con todo su contenido."""
1205                    

Legend:
Removed from v.2.15  
changed lines
  Added in v.2.16

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26