Package pilas :: Package actores :: Module dialogo
[hide private]
[frames] | no frames]

Source Code for Module pilas.actores.dialogo

  1  # -*- encoding: utf-8 -*- 
  2  # Pilas engine - A video game framework. 
  3  # 
  4  # Copyright 2010 - Hugo Ruscitti 
  5  # License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html) 
  6  # 
  7  # Website - http://www.pilas-engine.com.ar 
  8   
  9  import pilas 
 10   
11 -class Dialogo:
12 """ 13 Representa una secuencia de mensajes entre varios actores. 14 15 >>> mono = pilas.actores.Mono() 16 >>> mono2 = pilas.actores.Mono() 17 >>> dialogo = pilas.actores.Dialogo() 18 >>> dialogo.decir(mono, "Hola Mundo") 19 >>> dialogo.decir(mono2, "Estoy diciendo algo") 20 >>> dialogo.iniciar() 21 22 .. image:: images/actores/mono_dice.png 23 24 25 """ 26
27 - def __init__(self, modo_automatico=True):
28 """ Constructor del Diálogo 29 30 :param modo_automatico: Establece si el dialogo ira cambiando automatiamente. 31 :type modo_automatico: boolean 32 """ 33 self.dialogo = [] 34 self.dialogo_actual = None 35 self.modo_automatico = modo_automatico
36
37 - def decir(self, actor, texto):
38 """ Añade un texto a la conversación y establece el actor que lo dice. 39 40 :param actor: Actor que dirá el texto. 41 :type actor: Actor 42 :param texto: Texto que dirá el actor. 43 :type texto: string 44 """ 45 self.dialogo.append((actor, texto))
46
47 - def decir_inmediatamente(self, actor, texto):
48 """ Muestra un texto de dialogo inmediatamente sin seguir una secuencia de dialogo. 49 50 :param actor: Actor que dirá el texto. 51 :type actor: Actor 52 :param texto: Texto que dirá el actor. 53 :type texto: string 54 """ 55 self.dialogo = [] 56 self._eliminar_dialogo_actual() 57 self.decir(actor, texto) 58 siguiente = self.obtener_siguiente_dialogo_o_funcion() 59 self._mostrar_o_ejecutar_siguiente(siguiente)
60
61 - def elegir(self, actor, texto, opciones, funcion_a_invocar):
62 """ Muestra un texto de dialogo con una lista de opciones para poder seleccionar y ejecutar una accion cuando se seleccione una de las opciones del cuadro de dialogo. 63 64 :param actor: Actor que dirá el texto. 65 :type actor: Actor 66 :param texto: Texto que aparecerá en la parte superior del dialogo de opciones. 67 :type texto: string 68 :param opciones: Array de posibles opciones que mostrará el cuadrio de dialogo. 69 :type opciones: Array 70 :param funcion_a_invocar: Método al que se llamará cuando se seleccione una de las opciones del listado. Este metodo recibirá como parámetro la opción que se haya seleccinado. 71 72 >>> def cuando_responde_color_favorito(respuesta): 73 >>> colores = { 74 >>> 'rojo': pilas.colores.rojo, 75 >>> 'verde': pilas.colores.verde, 76 >>> 'azul': pilas.colores.azul, 77 >>> } 78 >>> 79 >>> pilas.fondos.Color(colores[respuesta]) 80 >>> mono.sonreir() 81 >>> d.decir(mono, '¡mira!') 82 >>> 83 >>> d.elegir(mono_chiquito, 'Mi color favorito es el...', ['rojo', 'verde', 'azul'], cuando_responde_color_favorito) 84 85 """ 86 self.dialogo.append((actor, texto, opciones, funcion_a_invocar))
87
88 - def ejecutar(self, funcion):
89 self.dialogo.append(funcion)
90
91 - def iniciar(self):
92 """ Inicia el dialogo que se haya definido. 93 94 >>> d = pilas.actores.Dialogo() 95 >>> d.decir(mono, "¿Cual es tu color favorito?") 96 >>> d.iniciar() 97 98 """ 99 self.avanzar_al_siguiente_dialogo()
100
102 if self.dialogo: 103 return self.dialogo.pop(0)
104
105 - def _eliminar_dialogo_actual(self):
106 if self.dialogo_actual: 107 self.dialogo_actual.eliminar() 108 self.dialogo_actual = None
109
110 - def _mostrar_o_ejecutar_siguiente(self, siguiente):
111 if isinstance(siguiente, tuple): 112 # Es un mensaje de dialogo simple 113 if len(siguiente) == 2: 114 actor, texto = siguiente 115 self.dialogo_actual = pilas.actores.Globo(texto, dialogo=self, avance_con_clicks=self.modo_automatico) 116 else: 117 # Es un mensaje con seleccion. 118 actor, texto, opciones, funcion_a_invocar = siguiente 119 self.dialogo_actual = pilas.actores.GloboElegir(texto, opciones, funcion_a_invocar, dialogo=self) 120 121 self.dialogo_actual.colocar_origen_del_globo(actor.x, actor.arriba) 122 else: 123 siguiente() 124 self.avanzar_al_siguiente_dialogo()
125
126 - def avanzar_al_siguiente_dialogo(self, evento=None):
127 self._eliminar_dialogo_actual() 128 siguiente = self.obtener_siguiente_dialogo_o_funcion() 129 130 if siguiente: 131 self._mostrar_o_ejecutar_siguiente(siguiente) 132 else: 133 return False 134 135 return True
136