/[ambar]/ambar/accion.py
ViewVC logotype

Diff of /ambar/accion.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.7 by amoyav, Sat Aug 30 13:31:25 2003 UTC revision 2.8 by amoyav, Sun Aug 31 12:07:37 2003 UTC
# Line 141  class Accion(object): Line 141  class Accion(object):
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)
# Line 227  class Accion(object): Line 227  class Accion(object):
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
# Line 235  class Accion(object): Line 235  class Accion(object):
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            
# Line 266  class Accion(object): Line 266  class Accion(object):
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:
# Line 296  class Accion(object): Line 296  class Accion(object):
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"
# Line 331  class Accion(object): Line 331  class Accion(object):
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                                    
# Line 344  class Accion(object): Line 344  class Accion(object):
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í' \
# Line 361  class Accion(object): Line 361  class Accion(object):
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                                    

Legend:
Removed from v.2.7  
changed lines
  Added in v.2.8

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26