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

Diff of /ambar/modulo.py

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

revision 2.2 by TuringTest, Sun Aug 24 23:34:41 2003 UTC revision 2.3 by TuringTest, Fri Sep 5 21:26:01 2003 UTC
# Line 66  class Modulo(object): Line 66  class Modulo(object):
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
# Line 87  class Modulo(object): Line 92  class Modulo(object):
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
# Line 98  class Modulo(object): Line 104  class Modulo(object):
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":
# Line 110  class Modulo(object): Line 116  class Modulo(object):
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"""
# Line 127  class Modulo(object): Line 136  class Modulo(object):
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    
# Line 250  class Modulo(object): Line 263  class Modulo(object):
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')    
# Line 272  class Modulo(object): Line 285  class Modulo(object):
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
# Line 323  class Modulo(object): Line 346  class Modulo(object):
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."""
# Line 345  class Modulo(object): Line 368  class Modulo(object):
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"

Legend:
Removed from v.2.2  
changed lines
  Added in v.2.3

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