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

Diff of /ambar/objeto.py

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

revision 2.12 by amoyav, Sun Aug 31 12:07:37 2003 UTC revision 2.13 by amoyav, Sun Aug 31 20:43:27 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.3'      VERSION_OBJETO = '1.0.4'
57    
58      DIR_DESC_OBJETOS = 'desc_objetos'      DIR_DESC_OBJETOS = 'desc_objetos'
59      EXT_DESC_OBJETOS = '.xml'      EXT_DESC_OBJETOS = '.xml'
# Line 147  class Objeto(object): Line 147  class Objeto(object):
147                                 Es una lista de diccionarios, conteniendo cada uno:                                 Es una lista de diccionarios, conteniendo cada uno:
148                                  - "dificultad" (int): de 1 a 100                                  - "dificultad" (int): de 1 a 100
149                                  - "texto" (string): el contenido del item de descripcion                                  - "texto" (string): el contenido del item de descripcion
150                                    - "personaje_mira" (guion): el guion que se ejecuta cuando
151                                                                un personaje mira el item
152                                                                    
153                                 Invariantes:                                 Invariantes:
154                                     descripcion != None                                     descripcion != None
# Line 429  class Objeto(object): Line 431  class Objeto(object):
431                          ". La dificultad de la descripción tiene que ser de 0 a 100.")                          ". La dificultad de la descripción tiene que ser de 0 a 100.")
432              else:              else:
433                  dif_item = 0                      dif_item = 0    
434              self.__descripcion.append({"dificultad": dif_item, "texto": texto_item})  
435                guion = None
436                for elem_suceso in elem_item.childNodes:
437                    suceso = extraer_nombre_xml(elem_suceso)
438                    if suceso == "personaje_mira":
439                        guion = Guion(elem_suceso,
440                                      macros_tipos = [ ("$observador", "Personaje"),
441                                                       ("$sala", "Sala") ])
442    
443                self.__descripcion.append({"dificultad": dif_item, "texto": texto_item,
444                                           "personaje_mira": guion})
445                            
446    
447      def __parsear_propiedades(self, elem_propiedades):        def __parsear_propiedades(self, elem_propiedades):  
# Line 584  class Objeto(object): Line 596  class Objeto(object):
596              raise ValueError("Cargado objeto " + self.id + " obsoleto: sin versión," +              raise ValueError("Cargado objeto " + self.id + " obsoleto: sin versión," +
597                               " cuando se esperaba " + Objeto.VERSION_OBJETO)                               " cuando se esperaba " + Objeto.VERSION_OBJETO)
598    
599          assert(Objeto.VERSION_OBJETO == "1.0.3")          assert(Objeto.VERSION_OBJETO == "1.0.4")
600          while self.__version != "1.0.3":          while self.__version != "1.0.4":
601    
602              # 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
603              # 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
# Line 609  class Objeto(object): Line 621  class Objeto(object):
621                  self.__contenedor = None                  self.__contenedor = None
622                  self.__version = "1.0.3"                  self.__version = "1.0.3"
623                  escribir("Convertido objeto " + self.__id + " a versión 1.0.3")                  escribir("Convertido objeto " + self.__id + " a versión 1.0.3")
624                elif self.__version == "1.0.3":
625                    # Versión 1.0.3 -> 1.0.4: añadir suceso personaje_mira a los items de descripción.
626                    for item in self.__descripcion:
627                        item["personaje_mira"] = None
628                    self.__version = "1.0.4"
629                    escribir("Convertido objeto " + self.__id + " a versión 1.0.4")
630              else:              else:
631                  raise ValueError("Cargado objeto " + self.__id + " con versión desconocida: " +                  raise ValueError("Cargado objeto " + self.__id + " con versión desconocida: " +
632                                   self.__version + " cuando se esperaba " + Objeto.VERSION_OBJETO)                                   self.__version + " cuando se esperaba " + Objeto.VERSION_OBJETO)
# Line 707  class Objeto(object): Line 725  class Objeto(object):
725              personaje.controlador.suceso_entorno(texto)              personaje.controlador.suceso_entorno(texto)
726    
727    
728      def responder_suceso_personaje(self, suceso, usuario):      def personaje_mira(self, observador, sala):
729          """Todas las respuestas a sucesos de personaje son iguales, asi que las pongo aquí.          """Responde al suceso de que un personaje mira la descripción de este objeto.
730    
731          Chequea los requisitos y realiza las acciones correspondientes, y devuelve 1          Por cada item de descripcion, chequea los requisitos y realiza las acciones
732          si se ha podido realizar el suceso con éxito, y 0 si no.          correspondientes. Al final devuelve una lista con todos los items de descripción
733            cuyo guion de respuesta devuelto un resultado de éxito.
734    
735          Requiere:          Requiere:
736              usuario != None              observador != None
737                sala != None
738          """          """
739          if not self.__sucesos.has_key(suceso):          items_devueltos = []
             return 0  
         else:  
             respuesta = self.__sucesos[suceso]  
             result =  respuesta.ejecutar(macros_valores = {"$usuario": usuario,  
                                                            "$sala": usuario.sala,  
                                                            "$objeto": self})  
740    
741              if result == None:  # Si ninguna acción acepta o cancela explícitamente el          for item in self.__descripcion:
742                  result = 1      # suceso, se asume que se acepta              if item["personaje_mira"] == None:
743                    items_devueltos.append(item)
744                else:
745                    respuesta = item["personaje_mira"]
746                    result =  respuesta.ejecutar(macros_valores = {"$observador": observador,
747                                                                   "$sala": sala,
748                                                                   "$objeto": self})
749    
750              return result                  if result == None:  # Si ninguna acción acepta o cancela explícitamente el
751                        result = 1      # suceso, se asume que se acepta
752    
753                    if result:
754                        items_devueltos.append(item)
755    
756            return items_devueltos
757    
758    
759      def personaje_come(self, usuario):      def personaje_come(self, usuario):
760          return self.responder_suceso_personaje("personaje_come", usuario)          return self.__responder_suceso_personaje("personaje_come", usuario)
761    
762      def personaje_bebe(self, usuario):      def personaje_bebe(self, usuario):
763          return self.responder_suceso_personaje("personaje_bebe", usuario)          return self.__responder_suceso_personaje("personaje_bebe", usuario)
764    
765      def personaje_lanza(self, usuario):      def personaje_lanza(self, usuario):
766          return self.responder_suceso_personaje("personaje_lanza", usuario)          return self.__responder_suceso_personaje("personaje_lanza", usuario)
767    
768      def personaje_usa(self, usuario):      def personaje_usa(self, usuario):
769          return self.responder_suceso_personaje("personaje_usa", usuario)          return self.__responder_suceso_personaje("personaje_usa", usuario)
770    
771      def personaje_pone_cabeza(self, usuario):      def personaje_pone_cabeza(self, usuario):
772          return self.responder_suceso_personaje("personaje_pone_cabeza", usuario)          return self.__responder_suceso_personaje("personaje_pone_cabeza", usuario)
773    
774      def personaje_pone_cuello(self, usuario):      def personaje_pone_cuello(self, usuario):
775          return self.responder_suceso_personaje("personaje_pone_cuello", usuario)          return self.__responder_suceso_personaje("personaje_pone_cuello", usuario)
776    
777      def personaje_pone_tronco(self, usuario):      def personaje_pone_tronco(self, usuario):
778          return self.responder_suceso_personaje("personaje_pone_tronco", usuario)          return self.__responder_suceso_personaje("personaje_pone_tronco", usuario)
779    
780      def personaje_pone_brazo_izq(self, usuario):      def personaje_pone_brazo_izq(self, usuario):
781          return self.responder_suceso_personaje("personaje_pone_brazo_izq", usuario)          return self.__responder_suceso_personaje("personaje_pone_brazo_izq", usuario)
782    
783      def personaje_pone_brazo_der(self, usuario):      def personaje_pone_brazo_der(self, usuario):
784          return self.responder_suceso_personaje("personaje_pone_brazo_der", usuario)          return self.__responder_suceso_personaje("personaje_pone_brazo_der", usuario)
785    
786      def personaje_pone_mano_izq(self, usuario):      def personaje_pone_mano_izq(self, usuario):
787          return self.responder_suceso_personaje("personaje_pone_mano_izq", usuario)          return self.__responder_suceso_personaje("personaje_pone_mano_izq", usuario)
788    
789      def personaje_pone_mano_der(self, usuario):      def personaje_pone_mano_der(self, usuario):
790          return self.responder_suceso_personaje("personaje_pone_mano_der", usuario)          return self.__responder_suceso_personaje("personaje_pone_mano_der", usuario)
791    
792      def personaje_pone_dos_manos(self, usuario):      def personaje_pone_dos_manos(self, usuario):
793          return self.responder_suceso_personaje("personaje_pone_dos_manos", usuario)          return self.__responder_suceso_personaje("personaje_pone_dos_manos", usuario)
794    
795      def personaje_pone_piernas(self, usuario):      def personaje_pone_piernas(self, usuario):
796          return self.responder_suceso_personaje("personaje_pone_piernas", usuario)          return self.__responder_suceso_personaje("personaje_pone_piernas", usuario)
797    
798      def personaje_pone_tobillo_izq(self, usuario):      def personaje_pone_tobillo_izq(self, usuario):
799          return self.responder_suceso_personaje("personaje_pone_tobillo_izq", usuario)          return self.__responder_suceso_personaje("personaje_pone_tobillo_izq", usuario)
800    
801      def personaje_pone_tobillo_der(self, usuario):      def personaje_pone_tobillo_der(self, usuario):
802          return self.responder_suceso_personaje("personaje_pone_tobillo_der", usuario)          return self.__responder_suceso_personaje("personaje_pone_tobillo_der", usuario)
803    
804      def personaje_pone_pie_izq(self, usuario):      def personaje_pone_pie_izq(self, usuario):
805          return self.responder_suceso_personaje("personaje_pone_pie_izq", usuario)          return self.__responder_suceso_personaje("personaje_pone_pie_izq", usuario)
806    
807      def personaje_pone_pie_der(self, usuario):      def personaje_pone_pie_der(self, usuario):
808          return self.responder_suceso_personaje("personaje_pone_pie_der", usuario)          return self.__responder_suceso_personaje("personaje_pone_pie_der", usuario)
809                
810      def personaje_quita_cabeza(self, usuario):      def personaje_quita_cabeza(self, usuario):
811          return self.responder_suceso_personaje("personaje_quita_cabeza", usuario)          return self.__responder_suceso_personaje("personaje_quita_cabeza", usuario)
812    
813      def personaje_quita_cuello(self, usuario):      def personaje_quita_cuello(self, usuario):
814          return self.responder_suceso_personaje("personaje_quita_cuello", usuario)          return self.__responder_suceso_personaje("personaje_quita_cuello", usuario)
815    
816      def personaje_quita_tronco(self, usuario):      def personaje_quita_tronco(self, usuario):
817          return self.responder_suceso_personaje("personaje_quita_tronco", usuario)          return self.__responder_suceso_personaje("personaje_quita_tronco", usuario)
818    
819      def personaje_quita_brazo_izq(self, usuario):      def personaje_quita_brazo_izq(self, usuario):
820          return self.responder_suceso_personaje("personaje_quita_brazo_izq", usuario)          return self.__responder_suceso_personaje("personaje_quita_brazo_izq", usuario)
821    
822      def personaje_quita_brazo_der(self, usuario):      def personaje_quita_brazo_der(self, usuario):
823          return self.responder_suceso_personaje("personaje_quita_brazo_der", usuario)          return self.__responder_suceso_personaje("personaje_quita_brazo_der", usuario)
824    
825      def personaje_quita_mano_izq(self, usuario):      def personaje_quita_mano_izq(self, usuario):
826          return self.responder_suceso_personaje("personaje_quita_mano_izq", usuario)          return self.__responder_suceso_personaje("personaje_quita_mano_izq", usuario)
827    
828      def personaje_quita_mano_der(self, usuario):      def personaje_quita_mano_der(self, usuario):
829          return self.responder_suceso_personaje("personaje_quita_mano_der", usuario)          return self.__responder_suceso_personaje("personaje_quita_mano_der", usuario)
830    
831      def personaje_quita_dos_manos(self, usuario):      def personaje_quita_dos_manos(self, usuario):
832          return self.responder_suceso_personaje("personaje_quita_dos_manos", usuario)          return self.__responder_suceso_personaje("personaje_quita_dos_manos", usuario)
833    
834      def personaje_quita_piernas(self, usuario):      def personaje_quita_piernas(self, usuario):
835          return self.responder_suceso_personaje("personaje_quita_piernas", usuario)          return self.__responder_suceso_personaje("personaje_quita_piernas", usuario)
836    
837      def personaje_quita_tobillo_izq(self, usuario):      def personaje_quita_tobillo_izq(self, usuario):
838          return self.responder_suceso_personaje("personaje_quita_tobillo_izq", usuario)          return self.__responder_suceso_personaje("personaje_quita_tobillo_izq", usuario)
839    
840      def personaje_quita_tobillo_der(self, usuario):      def personaje_quita_tobillo_der(self, usuario):
841          return self.responder_suceso_personaje("personaje_quita_tobillo_der", usuario)          return self.__responder_suceso_personaje("personaje_quita_tobillo_der", usuario)
842    
843      def personaje_quita_pie_izq(self, usuario):      def personaje_quita_pie_izq(self, usuario):
844          return self.responder_suceso_personaje("personaje_quita_pie_izq", usuario)          return self.__responder_suceso_personaje("personaje_quita_pie_izq", usuario)
845    
846      def personaje_quita_pie_der(self, usuario):      def personaje_quita_pie_der(self, usuario):
847          return self.responder_suceso_personaje("personaje_quita_pie_der", usuario)          return self.__responder_suceso_personaje("personaje_quita_pie_der", usuario)
848    
849    
850        def __responder_suceso_personaje(self, suceso, usuario):
851            """Todas las respuestas a sucesos de personaje son iguales, asi que las pongo aquí.
852    
853            Chequea los requisitos y realiza las acciones correspondientes, y devuelve 1
854            si se ha podido realizar el suceso con éxito, y 0 si no.
855    
856            Requiere:
857                usuario != None
858            """
859            if not self.__sucesos.has_key(suceso):
860                return 0
861            else:
862                respuesta = self.__sucesos[suceso]
863                result =  respuesta.ejecutar(macros_valores = {"$usuario": usuario,
864                                                               "$sala": usuario.sala,
865                                                               "$objeto": self})
866    
867                if result == None:  # Si ninguna acción acepta o cancela explícitamente el
868                    result = 1      # suceso, se asume que se acepta
869    
870                return result
871    
872    
873      def personaje_usa_con(self, usuario, objeto2):      def personaje_usa_con(self, usuario, objeto2):
874          """El suceso personaje_usa_con es casi igual, pero tiene un parámetro más.          """El suceso personaje_usa_con es casi igual, pero tiene un parámetro más.

Legend:
Removed from v.2.12  
changed lines
  Added in v.2.13

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