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

Diff of /ambar/objeto.py

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

revision 2.7 by amoyav, Mon Jun 16 05:54:12 2003 UTC revision 2.8 by amoyav, Wed Jul 30 14:17:58 2003 UTC
# Line 53  class Objeto(object): Line 53  class Objeto(object):
53    
54      # Version del sistema de objetos (se incrementa cada vez que varian los atributos      # Version del sistema de objetos (se incrementa cada vez que varian los atributos
55      # de la clase Objeto)      # de la clase Objeto)
56      VERSION_OBJETO = '1.0.2'      VERSION_OBJETO = '1.0.3'
57    
58      DIR_DESC_OBJETOS = 'desc_objetos'      DIR_DESC_OBJETOS = 'desc_objetos'
59      EXT_DESC_OBJETOS = '.xml'      EXT_DESC_OBJETOS = '.xml'
# Line 65  class Objeto(object): Line 65  class Objeto(object):
65                     'vestimenta', 'escritura', 'recipìente', 'comestible', 'accesorio' ]                     'vestimenta', 'escritura', 'recipìente', 'comestible', 'accesorio' ]
66    
67      SUCESOS = [ 'personaje_come', 'personaje_bebe', 'personaje_lanza', 'personaje_usa',      SUCESOS = [ 'personaje_come', 'personaje_bebe', 'personaje_lanza', 'personaje_usa',
68                  'personaje_pone_cabeza', 'personaje_pone_cuello', 'personaje_pone_tronco',                  'personaje_usa_con', 'personaje_pone_cabeza', 'personaje_pone_cuello',
69                  'personaje_pone_brazo_izq', 'personaje_pone_brazo_der',                  'personaje_pone_tronco', 'personaje_pone_brazo_izq',
70                  'personaje_pone_mano_izq', 'personaje_pone_mano_der',                  'personaje_pone_brazo_der', 'personaje_pone_mano_izq',
71                  'personaje_pone_dos_manos', 'personaje_pone_piernas',                  'personaje_pone_mano_der', 'personaje_pone_dos_manos',
72                  'personaje_pone_tobillo_izq', 'personaje_pone_tobillo_der',                  'personaje_pone_piernas', 'personaje_pone_tobillo_izq',
73                  'personaje_pone_pie_izq', 'personaje_pone_pie_der',                  'personaje_pone_tobillo_der', 'personaje_pone_pie_izq',
74                  'personaje_quita_cabeza', 'personaje_quita_cuello', 'personaje_quita_tronco',                  'personaje_pone_pie_der', 'personaje_quita_cabeza',
75                    'personaje_quita_cuello', 'personaje_quita_tronco',
76                  'personaje_quita_brazo_izq', 'personaje_quita_brazo_der',                  'personaje_quita_brazo_izq', 'personaje_quita_brazo_der',
77                  'personaje_quita_mano_izq', 'personaje_quita_mano_der',                  'personaje_quita_mano_izq', 'personaje_quita_mano_der',
78                  'personaje_quita_dos_manos', 'personaje_quita_piernas',                  'personaje_quita_dos_manos', 'personaje_quita_piernas',
79                  'personaje_quita_tobillo_izq', 'personaje_quita_tobillo_der',                  'personaje_quita_tobillo_izq', 'personaje_quita_tobillo_der',
80                  'personaje_quita_pie_izq', 'personaje_quita_pie_der' ]                  'personaje_quita_pie_izq', 'personaje_quita_pie_der' ]
81    
 #    USOS = [ 'comer', 'beber', 'poner', 'lanzar', 'usar' ]  
   
82    
83      # Atributos públicos de la clase      # Atributos públicos de la clase
84    
# Line 243  class Objeto(object): Line 242  class Objeto(object):
242                             sucesos.keys(i) in SUCESOS                             sucesos.keys(i) in SUCESOS
243                         """)                         """)
244    
245        def __leer_contenedor(self): return self.__contenedor
246    
247        contenedor = property(__leer_contenedor,
248                              doc="""(contenedor): entidad que contiene a este objeto.
249    
250                              Normalmente será una sala o un personaje. Puede ser None temporalmente,
251                              durante alguna operación (por ejemplo, después de cogerlo de una sala y
252                              antes de meterlo en la mochila).
253                              """)
254    
255    
256  #    def __leer_usos(self): return self.__usos  #    def __leer_usos(self): return self.__usos
257  #  #
258  #    usos = property(__leer_usos,  #    usos = property(__leer_usos,
# Line 323  class Objeto(object): Line 333  class Objeto(object):
333          self.__inicializar_objeto(conservar_arbol_xml)          self.__inicializar_objeto(conservar_arbol_xml)
334                    
335    
336      def __inicializar_objeto(self,conservar_arbol_xml):      def __inicializar_objeto(self, conservar_arbol_xml = 0):
337          """Rellena todos los datos del objeto a partir de su fichero de descripcion."""          """Rellena todos los datos del objeto a partir de su fichero de descripcion."""
338                    
339          archivo = os.path.join(Objeto.DIR_DESC_OBJETOS, self.__id + Objeto.EXT_DESC_OBJETOS)          archivo = os.path.join(Objeto.DIR_DESC_OBJETOS, self.__id + Objeto.EXT_DESC_OBJETOS)
# Line 434  class Objeto(object): Line 444  class Objeto(object):
444          else:          else:
445              self.__categoria=""                  self.__categoria=""    
446          if elem_propiedades.hasAttribute('peso'):          if elem_propiedades.hasAttribute('peso'):
447              self.__peso = extraer_atributo_xml(elem_propiedades,'peso')              self.__peso = float(extraer_atributo_xml(elem_propiedades,'peso'))
448          else:          else:
449              self.__peso=""              self.__peso=""
450          if elem_propiedades.hasAttribute('volumen'):          if elem_propiedades.hasAttribute('volumen'):
# Line 566  class Objeto(object): Line 576  class Objeto(object):
576              raise ValueError("Cargado objeto " + self.id + " obsoleto: sin versión," +              raise ValueError("Cargado objeto " + self.id + " obsoleto: sin versión," +
577                               " cuando se esperaba " + Objeto.VERSION_OBJETO)                               " cuando se esperaba " + Objeto.VERSION_OBJETO)
578    
579          assert(Objeto.VERSION_OBJETO == "1.0.2")          assert(Objeto.VERSION_OBJETO == "1.0.3")
580          while self.__version != "1.0.2":          while self.__version != "1.0.3":
581    
582              # La versión 1.0.1 produce una ruptura con las anteriores ya que se migra al formato              # La versión 1.0.1 produce una ruptura con las anteriores ya que se migra al formato
583              # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas              # de clases de Python 2.2, y no es compatible con el anterior. Hay que borrar todas
584              # las salas, personajes y objetos.              # las salas, personajes y objetos.
585    
586              if self.__version == "1.0.2":              if self.__version == "1.0.1":
587                  # Versión 1.0.1 -> 1.0.2: añadir __max_cargas, borrar usos y crear sucesos.                  # Versión 1.0.1 -> 1.0.2: añadir __max_cargas, borrar usos y crear sucesos.
588                  # Se crea sin sucesos, pero al activarlo se reseteará a partir del nuevo                  # Se crea sin sucesos, pero al activarlo se reseteará a partir del nuevo
589                  # fichero descriptor XML.                  # fichero descriptor XML.
# Line 582  class Objeto(object): Line 592  class Objeto(object):
592                  self.__sucesos = {}                  self.__sucesos = {}
593                  self.__version = "1.0.2"                  self.__version = "1.0.2"
594                  escribir("Convertido objeto " + self.__id + " a versión 1.0.2")                  escribir("Convertido objeto " + self.__id + " a versión 1.0.2")
595                elif self.__version == "1.0.2":
596              raise ValueError("Cargado objeto " + self.__id + " con versión desconocida: " +                  # Versión 1.0.2 -> 1.0.3: añadir __contenedor. En realidad en este momento
597                               self.__version + " cuando se esperaba " + Objeto.VERSION_OBJETO)                  # no podemos saber cual es el contenedor real, así que lo inicializamos a None.
598                    # Esto es una inconsistencia, pero se arregla en el momento en el que alguien
599                    # coja o deje el objeto. Si alguien lo usa antes de cogerlo o dejarlo, puede
600                    # que ocurra algo raro, pero esperemos que no sea muy grave.
601                    self.__contenedor = None
602                    self.__version = "1.0.3"
603                    escribir("Convertido objeto " + self.__id + " a versión 1.0.3")
604                else:
605                    raise ValueError("Cargado objeto " + self.__id + " con versión desconocida: " +
606                                     self.__version + " cuando se esperaba " + Objeto.VERSION_OBJETO)
607    
608    
609      # Métodos normales      # Métodos normales
610    
611        def contener(self, contenedor):
612            """Pasa a estar contenido en el contenedor indicado.
613            
614            Requiere:
615                contenedor != None
616            """
617            self.__contenedor = contenedor
618    
619    
620        def liberar(self):
621            """Pasa a no estar contenido en ningún sitio (temporalmente, durante alguna operación)."""
622            self.__contenedor = None
623            
624                    
625      def activar(self):      def activar(self):
626          """Realiza algunos chequeos periodicos de integridad del objeto.          """Realiza algunos chequeos periodicos de integridad del objeto.
# Line 614  class Objeto(object): Line 647  class Objeto(object):
647              self.__cargas = self.__max_cargas              self.__cargas = self.__max_cargas
648    
649    
650        def cambiar_estado(self, puntos):
651            """Modifica el valor de la propiedad estado.
652    
653            El valor del parámetro puntos es sumado al de la propiedad. Puede ser negativo. Si el
654            resultado es menor que 0 o mayor que 100, se trunca.
655            """
656            self.__estado += estado
657            if self.__estado < 0:
658                self.__estado = 0
659            if self.__estado > 100:
660                self.__estado = 100
661    
662    
663      def destruir(self):      def destruir(self):
664          """El objeto desaparece del juego."""          """El objeto desaparece del juego."""
665          #%% Este tiene más miga de lo que parece, me lo iré pensando cuando pueda...          if self.__contenedor != None:
666          pass              self.__contenedor.objeto_destruido(self)
667    
668    
669        def reemplazar(self, id_objeto_nuevo):
670            """El objeto desaparece del juego, y otro objeto nuevo se coloca en su lugar."""
671            if self.__contenedor != None:
672                objeto_nuevo = Objeto(id_objeto_nuevo)
673                self.__contenedor.objeto_reemplazado(self, objeto_nuevo)
674    
675    
676      def responder_suceso_personaje(self, suceso, usuario):      def responder_suceso_personaje(self, suceso, usuario):
677          """Todas las respuestas a sucesos de personaje son iguales, asi que las pongo aquí.          """Todas las respuestas a sucesos de personaje son iguales, asi que las pongo aquí.
678    
679          Chequea los requisitos y realiza las acciones correspondientes, y devuelve 1          Chequea los requisitos y realiza las acciones correspondientes, y devuelve 1
680          si se ha podido comer con éxito, y 0 si no.          si se ha podido realizar el suceso con éxito, y 0 si no.
681    
682          Requiere:          Requiere:
683              usuario != None              usuario != None
# Line 632  class Objeto(object): Line 685  class Objeto(object):
685          if not self.__sucesos.has_key(suceso):          if not self.__sucesos.has_key(suceso):
686              return 0              return 0
687          else:          else:
688              respuesta_comer = self.__sucesos[suceso]              respuesta = self.__sucesos[suceso]
689              result =  respuesta_comer.ejecutar(macros = {"$usuario": usuario,              result =  respuesta.ejecutar(macros = {"$usuario": usuario,
690                                                           "$sala": usuario.sala,                                                     "$sala": usuario.sala,
691                                                           "$objeto": self})                                                     "$objeto": self})
692    
693              if result == None:  # Si ninguna acción acepta o cancela explícitamente el              if result == None:  # Si ninguna acción acepta o cancela explícitamente el
694                  result = 1      # suceso, se asume que se acepta                  result = 1      # suceso, se asume que se acepta
# Line 733  class Objeto(object): Line 786  class Objeto(object):
786      def personaje_quita_pie_der(self, usuario):      def personaje_quita_pie_der(self, usuario):
787          return self.responder_suceso_personaje("personaje_quita_pie_der", usuario)          return self.responder_suceso_personaje("personaje_quita_pie_der", usuario)
788    
789        def personaje_usa_con(self, usuario, objeto2):
790            """El suceso personaje_usa_con es casi igual, pero tiene un parámetro más.
791    
792            Chequea los requisitos y realiza las acciones correspondientes, y devuelve 1
793            si se ha podido realizar el suceso con éxito, y 0 si no.
794    
795            Requiere:
796                usuario != None
797                objeto2 != None
798            """
799            if not self.__sucesos.has_key("personaje_usa_con"):
800                return 0
801            else:
802                respuesta = self.__sucesos["personaje_usa_con"]
803                result =  respuesta.ejecutar(macros = {"$usuario": usuario,
804                                                       "$sala": usuario.sala,
805                                                       "$objeto": self,
806                                                       "$objeto2": objeto2})
807    
808                if result == None:  # Si ninguna acción acepta o cancela explícitamente el
809                    result = 1      # suceso, se asume que se acepta
810    
811                return result
812    
813    
814  #    def puede_comer(self, usuario):  #    def puede_comer(self, usuario):
815  #       """Comprueba si el usuario puede 'comer' este objeto.  #       """Comprueba si el usuario puede 'comer' este objeto.

Legend:
Removed from v.2.7  
changed lines
  Added in v.2.8

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