70 |
|
|
71 |
# Constructor |
# Constructor |
72 |
|
|
73 |
def __init__(self, elem_guion, macros, macros_extra = {}): |
def __init__(self, elem_guion, macros_tipos, macros_extra = {}): |
74 |
"""Parsea un nodo conteniendo una lista de elementos <accion>, <requisito> o <guion>. |
"""Parsea un nodo conteniendo una lista de elementos <accion>, <requisito> o <guion>. |
75 |
|
|
76 |
macros ((string, string)[]) es una lista con los nombres y tipos de las |
macros_tipos ((string, string)[]) es una lista con los nombres y tipos de las |
77 |
macros permitidos en el contexto de este guion. |
macros permitidos en el contexto de este guion. |
78 |
|
|
79 |
macros_extra (string:any) es un diccionario de macros que ser?n pasados |
macros_extra (string:any) es un diccionario de macros que ser?n pasados |
81 |
|
|
82 |
Requiere: |
Requiere: |
83 |
elem_guion != None |
elem_guion != None |
84 |
macros != None |
macros_tipos != None |
85 |
|
macros_extra != None |
86 |
""" |
""" |
87 |
|
|
88 |
# Atributos privados: |
# Atributos privados: |
93 |
# |
# |
94 |
# Invariantes: |
# Invariantes: |
95 |
# __id == None -> __fecha_fichero = None |
# __id == None -> __fecha_fichero = None |
96 |
# __id != None -> __fecha_fichero >= 0 |
# __id != None -> __fecha_fichero >= 0 |
97 |
|
|
98 |
if extraer_nombre_xml(elem_guion) == 'desc_guion': |
if extraer_nombre_xml(elem_guion) == 'desc_guion': |
99 |
|
|
147 |
|
|
148 |
self.__macros_extra = macros_extra |
self.__macros_extra = macros_extra |
149 |
self.__secuencia = [] |
self.__secuencia = [] |
150 |
self.__macros = [] |
self.__macros_valores = [] |
151 |
self.__temporizador = None |
self.__temporizador = None |
152 |
self.__sucesos = None |
self.__sucesos = None |
153 |
self.__callbacks = [] |
self.__callbacks = [] |
154 |
|
|
155 |
for elem in elem_guion.childNodes: |
for elem in elem_guion.childNodes: |
156 |
if extraer_nombre_xml(elem) == "accion": |
if extraer_nombre_xml(elem) == "accion": |
157 |
acc = Accion.nueva_xml(elem, macros) |
acc = Accion.nueva_xml(elem, macros_tipos) |
158 |
self.__secuencia.append(Accion.nueva_xml(elem, macros)) |
self.__secuencia.append(Accion.nueva_xml(elem, macros_tipos)) |
159 |
elif extraer_nombre_xml(elem) == "requisito": |
elif extraer_nombre_xml(elem) == "requisito": |
160 |
self.__secuencia.append(Requisito.nuevo_xml(elem, macros)) |
self.__secuencia.append(Requisito.nuevo_xml(elem, macros_tipos)) |
161 |
elif extraer_nombre_xml(elem) == "guion": |
elif extraer_nombre_xml(elem) == "guion": |
162 |
self.__parsear_fichero(elem, macros, macros_extra) |
self.__parsear_fichero(elem, macros_tipos, macros_extra) |
163 |
|
|
164 |
|
|
165 |
# M?todos privados |
# M?todos privados |
184 |
trazar("el texto vale: %s" % texto, "pnj", 2) |
trazar("el texto vale: %s" % texto, "pnj", 2) |
185 |
trazar("el id es: %s" % personaje, "pnj", 2) |
trazar("el id es: %s" % personaje, "pnj", 2) |
186 |
trazar("el idioma es: %s" % idioma, "pnj", 2) |
trazar("el idioma es: %s" % idioma, "pnj", 2) |
187 |
trazar("el personaje es: %s" % self.__macros[personaje], "pnj", 2) |
trazar("el personaje es: %s" % self.__macros_valores[personaje], "pnj", 2) |
188 |
if personaje and personaje[0] == "$": |
if personaje and personaje[0] == "$": |
189 |
fluidez = 5 - self.__macros[personaje].idiomas.get(idioma, 4) |
fluidez = 5 - self.__macros_valores[personaje].idiomas.get(idioma, 4) |
190 |
else: |
else: |
191 |
sala = self.__macros["$sala"] |
sala = self.__macros_valores["$sala"] |
192 |
fluidez = 5 - sala.personajes[personaje].idiomas.get(idioma, 4) |
fluidez = 5 - sala.personajes[personaje].idiomas.get(idioma, 4) |
193 |
|
|
194 |
return ((1.5 * len(texto) + self.__velocidad ) / float(self.__velocidad)) + fluidez |
return ((1.5 * len(texto) + self.__velocidad ) / float(self.__velocidad)) + fluidez |
206 |
elif instancia.nombre == "cancelar": |
elif instancia.nombre == "cancelar": |
207 |
self.__resultado = 0 |
self.__resultado = 0 |
208 |
else: |
else: |
209 |
instancia.ejecutar(self.__macros) |
instancia.ejecutar(self.__macros_valores) |
210 |
self.__resultado = 1 |
self.__resultado = 1 |
211 |
|
|
212 |
#Determina si es una accion instantanea o requiere temporizacion |
#Determina si es una accion instantanea o requiere temporizacion |
220 |
self.__siguiente_suceso() |
self.__siguiente_suceso() |
221 |
elif instancia.__class__.__name__ == "Requisito": |
elif instancia.__class__.__name__ == "Requisito": |
222 |
#Ejecucion condicional de acciones |
#Ejecucion condicional de acciones |
223 |
r = instancia.comprobar(self.__macros) |
r = instancia.comprobar(self.__macros_valores) |
224 |
if r != None: |
if r != None: |
225 |
self.__resultado = r |
self.__resultado = r |
226 |
self.__siguiente_suceso() |
self.__siguiente_suceso() |
227 |
elif instancia.__class__.__name__ == "Guion": |
elif instancia.__class__.__name__ == "Guion": |
228 |
#Ejecucion de un subguion |
#Ejecucion de un subguion |
229 |
self.__resultado = instancia.ejecutar(self.__macros) |
self.__resultado = instancia.ejecutar(self.__macros_valores) |
230 |
self.__siguiente_suceso() |
self.__siguiente_suceso() |
231 |
except StopIteration: |
except StopIteration: |
232 |
#Final de la secuencia: limpia el estado y llama a los callbacks registrados |
#Final de la secuencia: limpia el estado y llama a los callbacks registrados |
233 |
self.__sucesos = [] |
self.__sucesos = [] |
234 |
self.__macros = [] |
self.__macros_valores = [] |
235 |
for finalizar in self.__callbacks: |
for finalizar in self.__callbacks: |
236 |
finalizar(self, cancelado=self.__resultado) |
finalizar(self, cancelado=self.__resultado) |
237 |
self.__callbacks = [] |
self.__callbacks = [] |
243 |
|
|
244 |
# M?todos normales |
# M?todos normales |
245 |
|
|
246 |
def ejecutar(self, macros, finalizar=[]): |
def ejecutar(self, macros_valores, finalizar=[]): |
247 |
"""Comienza a ejecutar el guion en cuestion. |
"""Comienza a ejecutar el guion en cuestion. |
248 |
|
|
249 |
macros({String:any}) es un diccionario de los nombres de las macros a su valor |
macros_valores({String:any}) es un diccionario de los nombres de las macros a su valor |
250 |
final. |
final. |
251 |
|
|
252 |
Devuelve el resultado final de "aceptar" (1) o "cancelar" (0), o bien None |
Devuelve el resultado final de "aceptar" (1) o "cancelar" (0), o bien None |
255 |
Almacena el callback para llamarlo al terminar la secuencia |
Almacena el callback para llamarlo al terminar la secuencia |
256 |
|
|
257 |
Requiere: |
Requiere: |
258 |
macros != None |
macros_valores != None |
259 |
""" |
""" |
260 |
trazar("ejecutando guion temporizado %s" % self.__id, "pnj") |
trazar("ejecutando guion temporizado %s" % self.__id, "pnj") |
261 |
resultado = None |
resultado = None |
262 |
|
|
263 |
macros_total = macros |
macros_total = macros_valores |
264 |
macros_total.update(self.__macros_extra) |
macros_total.update(self.__macros_extra) |
265 |
|
|
266 |
if finalizar: |
if finalizar: |
268 |
|
|
269 |
self.__sucesos = self.__generador_sucesos() |
self.__sucesos = self.__generador_sucesos() |
270 |
self.__resultado = 0 |
self.__resultado = 0 |
271 |
self.__macros = macros_total |
self.__macros_valores = macros_total |
272 |
self.__siguiente_suceso() |
self.__siguiente_suceso() |
273 |
|
|
274 |
|
|