66 |
|
|
67 |
|
|
68 |
# Clase privada para llevar la cuenta de las repeticiones de usos de un guion |
# Clase privada para llevar la cuenta de las repeticiones de usos de un guion |
69 |
class Repeticion(object): |
class WrapGuion(object): |
70 |
"""Esta clase almacena un guion y recuerda cuantas veces a sido utilizado recientemente. |
"""Esta clase almacena un guion y le añade funcionalidades para la conversación con PNJs: |
71 |
Tambien se ocupa de "olvidar" el uso del guion con el paso del tiempo """ |
|
72 |
|
- Recuerda cuantas veces a sido utilizado recientemente. |
73 |
|
Tambien se ocupa de "olvidar" el uso del guion con el paso del tiempo |
74 |
|
|
75 |
|
- Lee y almacena los "contextos" a los que pertenece el guion |
76 |
|
""" |
77 |
|
|
78 |
def __init__(self, guion, repeticiones=1, duracion_recuerdo=24): |
def __init__(self, guion, repeticiones=1, duracion_recuerdo=24): |
79 |
"""Crea un wrapper para el guion |
"""Crea un wrapper para el guion |
92 |
""" |
""" |
93 |
|
|
94 |
self.guion = guion |
self.guion = guion |
95 |
|
#self.contextos = guion.contextos |
96 |
self.__repeticiones_iniciales = repeticiones |
self.__repeticiones_iniciales = repeticiones |
97 |
self.__repeticiones = repeticiones |
self.__repeticiones = repeticiones |
98 |
self.__tiempo = duracion_recuerdo |
self.__tiempo = duracion_recuerdo |
104 |
|
|
105 |
return (int(self.__repeticiones) == 0) |
return (int(self.__repeticiones) == 0) |
106 |
|
|
107 |
def ejecutar(self, macros): |
def ejecutar(self, macros, finalizar=None): |
108 |
"""Activa el guion si le quedan usos disponibles, y lleva la cuenta del numero de repeticiones""" |
"""Activa el guion si le quedan usos disponibles, y lleva la cuenta del numero de repeticiones""" |
109 |
if self.__repeticiones != "siempre": |
if self.__repeticiones != "siempre": |
110 |
if self.__repeticiones == "nunca": |
if self.__repeticiones == "nunca": |
116 |
else: |
else: |
117 |
return 0 # Repeticiones agotadas |
return 0 # Repeticiones agotadas |
118 |
|
|
119 |
trazar("una repeticion gastada, quedan" + repr(self.__repeticiones), "pnj", 2) |
trazar("una repeticion gastada, quedan" + repr(self.__repeticiones), "pnj", 3) |
120 |
return self.guion.ejecutar(macros) # Si el guion cancela, devuelve 0 |
return self.guion.ejecutar(macros, finalizar) # Si el guion cancela, devuelve 0 |
121 |
|
|
122 |
|
def cancelar_secuencia(self): |
123 |
|
self.guion.cancelar_secuencia() |
124 |
|
|
125 |
def __activar_temporizador(self): |
def __activar_temporizador(self): |
126 |
"""Establece el tiempo necesario para "olvidar" los usos del guion""" |
"""Establece el tiempo necesario para "olvidar" los usos del guion""" |
136 |
self.__temporizador = CronoMine(Mundo.cronoMine_control, horas_olvido, lambda x: self.__olvidar_repeticiones()) |
self.__temporizador = CronoMine(Mundo.cronoMine_control, horas_olvido, lambda x: self.__olvidar_repeticiones()) |
137 |
|
|
138 |
def __olvidar_repeticiones(self): |
def __olvidar_repeticiones(self): |
139 |
trazar("y todo queda olvidado...", "pnj") |
trazar("olvidado guion", "pnj") |
140 |
self.__repeticiones = self.__repeticiones_iniciales |
self.__repeticiones = self.__repeticiones_iniciales |
141 |
self.__temporizador = None |
self.__temporizador = None |
142 |
|
|
143 |
|
def __getattr__(self, name): |
144 |
|
"""Wrapper para recoger el resto de atributos a partir del guion almacenado""" |
145 |
|
return getattr(self.guion, name) |
146 |
|
|
147 |
# Fin clase Repeticion |
# Fin clase WrapGuion |
148 |
|
|
149 |
# Atributos p�úblicos de la clase |
# Atributos públicos de la clase |
150 |
|
|
151 |
def __leer_id(self): return self.__id |
def __leer_id(self): return self.__id |
152 |
|
|
263 |
self.__parsear_fichero(elem, macros, macros_extra) |
self.__parsear_fichero(elem, macros, macros_extra) |
264 |
elif extraer_nombre_xml(elem) == "guion": |
elif extraer_nombre_xml(elem) == "guion": |
265 |
guion = GuionTemporizado(elem, macros) |
guion = GuionTemporizado(elem, macros) |
266 |
self.__opciones.append( Modulo.Repeticion( guion, guion.repeticiones, 0.5 ) ) |
self.__opciones.append( Modulo.WrapGuion( guion, guion.repeticiones, 0.5 ) ) |
267 |
|
|
268 |
# Mé�todos privados de Modulo |
# Métodos privados de Modulo |
269 |
|
|
270 |
def __parsear_fichero(self, elem_modulo, macros, macros_extra): |
def __parsear_fichero(self, elem_modulo, macros, macros_extra): |
271 |
id = extraer_atributo_xml(elem_modulo, 'id') |
id = extraer_atributo_xml(elem_modulo, 'id') |
285 |
# Observar que un modulo puede contener recursivamente otros modulos |
# Observar que un modulo puede contener recursivamente otros modulos |
286 |
|
|
287 |
|
|
288 |
# M�todos normales |
# Métodos públicos |
289 |
|
|
290 |
def mejor_guion(self): |
def mejor_guion(self, contextos=[], historia=[]): |
291 |
"""Guion mas adecuado en la situacion actual""" |
"""Devuelve (un wrapper del) Guion mas adecuado en la situacion actual""" |
292 |
|
trazar("***Buscando mejor guion***" + str(contextos), "pnj", 2) |
293 |
|
if contextos: |
294 |
|
# Encuentra un guion que pertenezca a algun contexto de la lista "contextos" |
295 |
|
trazar(contextos, "pnj", 3) |
296 |
|
for c in contextos: |
297 |
|
trazar(c, "pnj", 3) |
298 |
|
for guion in self.__opciones: |
299 |
|
trazar(str(guion.contextos), "pnj", 3) |
300 |
|
if c in guion.contextos and not guion.agotado(): |
301 |
|
return guion |
302 |
|
# Encuentra el primer guion no agotado |
303 |
for guion in self.__opciones: |
for guion in self.__opciones: |
304 |
trazar("Agotado? " + repr(guion.agotado()), "pnj", 2) |
trazar("Agotado? " + repr(guion.agotado()), "pnj", 3) |
305 |
if not guion.agotado(): |
if not guion.agotado(): |
306 |
return guion |
return guion |
307 |
return None |
return None |
346 |
|
|
347 |
|
|
348 |
|
|
349 |
# M�todos especiales |
# Métodos especiales |
350 |
|
|
351 |
def __setstate__(self, atributos): |
def __setstate__(self, atributos): |
352 |
"""M�todo llamado para restaurar los atributos provinientes de un pickle.""" |
"""M�todo llamado para restaurar los atributos provinientes de un pickle.""" |
368 |
str(self.__version) + " cuando se esperaba " + Modulo.VERSION_MODULO) |
str(self.__version) + " cuando se esperaba " + Modulo.VERSION_MODULO) |
369 |
|
|
370 |
|
|
371 |
# C�digo para pruebas unitarias del m�dulo. |
# Código para pruebas unitarias del m�dulo. |
372 |
|
|
373 |
if (__name__ == '__main__'): |
if (__name__ == '__main__'): |
374 |
print "No hay prueba unitaria de módulo. Prueba con objeto.py" |
print "No hay prueba unitaria de módulo. Prueba con objeto.py" |