141 |
|
|
142 |
# Métodos estáticos de la clase |
# Métodos estáticos de la clase |
143 |
|
|
144 |
def nueva_xml(elem_accion, macros): |
def nueva_xml(elem_accion, macros_tipos): |
145 |
"""Crea una accion nueva a partir de un nodo XML leido de un fichero de descripción. |
"""Crea una accion nueva a partir de un nodo XML leido de un fichero de descripción. |
146 |
|
|
147 |
Parámetros: |
Parámetros: |
148 |
elem_accion: el nodo XML |
elem_accion: el nodo XML |
149 |
macros ((string, string)[]): lista con los nombres y tipos de los macros permitidos en |
macros_tipos ((string, string)[]): lista con los nombres y tipos de los macros |
150 |
el contexto de esta accion. |
permitidas en el contexto de esta accion. |
151 |
|
|
152 |
Ejemplo -> accion dentro del uso "personaje_bebe" del objeto "pocion01" |
Ejemplo -> accion dentro del uso "personaje_bebe" del objeto "pocion01" |
153 |
|
|
154 |
elem_accion: <accion base="Personaje" nombre="cambiar_vida" puntos="+15"> |
elem_accion: <accion base="Personaje" nombre="cambiar_vida" puntos="+15"> |
155 |
macros: [("$usuario", "Personaje"), ("$sala", "Sala"), ("$objeto", "Objeto")] |
macros_tipos: [("$usuario", "Personaje"), ("$sala", "Sala"), ("$objeto", "Objeto")] |
156 |
|
|
157 |
Requiere: |
Requiere: |
158 |
elem_accion != None |
elem_accion != None |
159 |
macros != None |
macros_tipos != None |
160 |
""" |
""" |
161 |
acc = Accion() |
acc = Accion() |
162 |
acc.__parsear_accion(elem_accion, macros) |
acc.__parsear_accion(elem_accion, macros_tipos) |
163 |
return acc |
return acc |
164 |
|
|
165 |
nueva_xml = staticmethod(nueva_xml) |
nueva_xml = staticmethod(nueva_xml) |
227 |
|
|
228 |
# Métodos privados |
# Métodos privados |
229 |
|
|
230 |
def __parsear_accion(self, elem_accion, macros): |
def __parsear_accion(self, elem_accion, macros_tipos): |
231 |
"""Extrae la información del elemento accion: |
"""Extrae la información del elemento accion: |
232 |
- base |
- base |
233 |
- nombre |
- nombre |
235 |
|
|
236 |
Requiere: |
Requiere: |
237 |
elem_accion != None |
elem_accion != None |
238 |
macros != None |
macros_tipos != None |
239 |
""" |
""" |
240 |
self.__nombre = extraer_atributo_xml(elem_accion, 'nombre') |
self.__nombre = extraer_atributo_xml(elem_accion, 'nombre') |
241 |
|
|
266 |
else: |
else: |
267 |
# Si no, inventarse un valor a partir del primer macro que tenga |
# Si no, inventarse un valor a partir del primer macro que tenga |
268 |
# un tipo compatible. |
# un tipo compatible. |
269 |
for macro in macros: |
for macro_tipo in macros_tipos: |
270 |
if macro[1] == tipo: |
if macro_tipo[1] == tipo: |
271 |
valor = macro[0] |
valor = macro_tipo[0] |
272 |
break |
break |
273 |
|
|
274 |
if valor == None: |
if valor == None: |
296 |
else: |
else: |
297 |
return default |
return default |
298 |
|
|
299 |
def ejecutar(self, macros): |
def ejecutar(self, macros_valores): |
300 |
"""Realiza la ejecución de la accion (es decir, que la accion ocurre). |
"""Realiza la ejecución de la accion (es decir, que la accion ocurre). |
301 |
|
|
302 |
Aquí se calculan los valores reales de la ejecución. Los valores pueden incluir |
Aquí se calculan los valores reales de la ejecución. Los valores pueden incluir |
303 |
macros, que se resuelven con el parámetro "macros" de esta función. Dicho |
macros, que se resuelven con el parámetro "macros_valores" de esta función. Dicho |
304 |
parámetro es un diccionario con pares "$nombre_macro": valor. |
parámetro es un diccionario con pares "$nombre_macro": valor. |
305 |
|
|
306 |
Al concluir la acción, se llama al callback con prototipo finalizar(accion=self, cancelado=booleano). |
Al concluir la acción, se llama al callback con prototipo finalizar(accion=self, cancelado=booleano). |
307 |
|
|
308 |
Ejemplo -> Hirunatan se bebe la pocion en la posada |
Ejemplo -> Hirunatan se bebe la pocion en la posada |
309 |
|
|
310 |
macros: {"$usuario": <instancia Hirunatan>, |
macros_valores: {"$usuario": <instancia Hirunatan>, |
311 |
"$sala": <instancia posada01>) |
"$sala": <instancia posada01>) |
312 |
"$objeto": <instancia pocion01>} |
"$objeto": <instancia pocion01>} |
313 |
|
|
314 |
Invariantes: |
Invariantes: |
315 |
macros != None |
macros_valores != None |
316 |
""" |
""" |
317 |
if self.__nombre == "aceptar" or self.__nombre == "cancelar": |
if self.__nombre == "aceptar" or self.__nombre == "cancelar": |
318 |
return self.__nombre == "aceptar" |
return self.__nombre == "aceptar" |
331 |
|
|
332 |
if t == "numero": |
if t == "numero": |
333 |
if v and v[0] == "$": |
if v and v[0] == "$": |
334 |
valor_str = macros[v] |
valor_str = macros_valores[v] |
335 |
else: |
else: |
336 |
valor_str = v |
valor_str = v |
337 |
|
|
344 |
|
|
345 |
elif t == "string": |
elif t == "string": |
346 |
if v and v[0] == "$": |
if v and v[0] == "$": |
347 |
valor = macros[v] |
valor = macros_valores[v] |
348 |
else: |
else: |
349 |
valor = v |
valor = v |
350 |
|
|
351 |
elif t == "si_no": |
elif t == "si_no": |
352 |
if v and v[0] == "$": |
if v and v[0] == "$": |
353 |
valor_str = macros[v].lower() |
valor_str = macros_valores[v].lower() |
354 |
else: |
else: |
355 |
valor_str = v.lower() |
valor_str = v.lower() |
356 |
if valor_str == 's' or valor_str == 'si' or valor_str == 'sí' \ |
if valor_str == 's' or valor_str == 'si' or valor_str == 'sí' \ |
361 |
|
|
362 |
elif t == "Personaje": |
elif t == "Personaje": |
363 |
if v and v[0] == "$": |
if v and v[0] == "$": |
364 |
valor = macros[v] |
valor = macros_valores[v] |
365 |
else: |
else: |
366 |
sala = macros["$sala"] |
sala = macros_valores["$sala"] |
367 |
valor = sala.personajes[v] |
valor = sala.personajes[v] |
368 |
|
|
369 |
elif t == "Sala": |
elif t == "Sala": |
370 |
if v and v[0] == "$": |
if v and v[0] == "$": |
371 |
valor = macros[v] |
valor = macros_valores[v] |
372 |
else: |
else: |
373 |
from mundo import Mundo |
from mundo import Mundo |
374 |
valor = Mundo.localizar_sala(v) |
valor = Mundo.localizar_sala(v) |
375 |
|
|
376 |
elif t == "Objeto": |
elif t == "Objeto": |
377 |
if v and v[0] == "$": |
if v and v[0] == "$": |
378 |
valor = macros[v] |
valor = macros_valores[v] |
379 |
else: |
else: |
380 |
valor = None # %% La verdad, no sé qué hacer aquí :-? |
valor = None # %% La verdad, no sé qué hacer aquí :-? |
381 |
|
|
382 |
elif t == "Idioma": |
elif t == "Idioma": |
383 |
if v and v[0] == "$": |
if v and v[0] == "$": |
384 |
valor = macros[v] |
valor = macros_valores[v] |
385 |
else: |
else: |
386 |
valor = Idioma_buscar(v) |
valor = Idioma_buscar(v) |
387 |
|
|