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' |
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 |
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): |
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 |
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) |
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. |