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

Diff of /ambar/mundo.py

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

revision 2.0 by pabloruiz, Sat Aug 17 21:11:09 2002 UTC revision 2.1 by amoyav, Sun Oct 27 10:16:28 2002 UTC
# Line 24  Line 24 
24  """Clase Mundo."""  """Clase Mundo."""
25  from sala import *  from sala import *
26  from utils import *  from utils import *
27    from fechahoramine import *
28    
29  class Mundo:  class Mundo:
30      """El mundo tal y como lo conocemos.      """El mundo tal y como lo conocemos.
# Line 52  class Mundo: Line 53  class Mundo:
53      salida de gente. En muchas partes del programa se lleva a personajes a ellas      salida de gente. En muchas partes del programa se lleva a personajes a ellas
54      sin preguntar por el volumen.      sin preguntar por el volumen.
55    
56        El Mundo tiene un reloj que va marcando "ticks" cada hora. Cualquier objeto que
57        quiera ser notificado del paso del tiempo puede registrarse.
58    
59      Invariantes:      Invariantes:
60        salas != None        salas != None
61        pjs_activos != None        pjs_activos != None
62          suscritos_al_tick != None
63      """      """
64    
65      TAMANO_CACHE_SALAS = 50      TAMANO_CACHE_SALAS = 50
# Line 71  class Mundo: Line 76  class Mundo:
76      # ConnectionHandler accesible globalmente, para manejar conexiones via socket      # ConnectionHandler accesible globalmente, para manejar conexiones via socket
77      conn_handler = None      conn_handler = None
78            
79      # TimerHandler accesible globalmente, para manejar temporizadores      # CronoMineControl accesible globalmente, para manejar cronometros
80      timer_handler = None      cronoMine_control = None
81    
82      # Diccionario con todos los personajes jugadores en activo (que no están en el Limbo      # Diccionario con todos los personajes jugadores en activo (que no están en el Limbo
83      # ni en la Muerte). El diccionario es {id : personaje}. Se inicializa a vacío porque      # ni en la Muerte). El diccionario es {id : personaje}. Se inicializa a vacío porque
84      # al arrancar Mine, todos los personajes están en el limbo.      # al arrancar Mine, todos los personajes están en el limbo.
85      pjs_activos = {}      pjs_activos = {}
86    
87        # Lista de todas las funciones que se han suscrito al "tick" del reloj global.
88        suscritos_al_tick = []
89    
90        # FechaHora del último tick.
91        tick_anterior = FechaHoraMine(0)
92            
93    
94    def Mundo_inicializar():
95        """Echa el mundo a rodar..."""
96    
97        # El primer tick tiene que saltar al principio de la próxima hora.
98        ahora = FechaHoraMine_ahora()
99        primer_tick = ahora + FechaHoraMineRel(signo=1, horas=1, segundos=-ahora.segundo())
100        CronoMine(Mundo.cronoMine_control, primer_tick - ahora, Mundo_tick)
101    
102    
103  def Mundo_localizar_sala(id):  def Mundo_localizar_sala(id):
104      """Localiza una sala por el id.      """Localiza una sala por el id.
105            
# Line 174  def Mundo_salvar_todo(): Line 194  def Mundo_salvar_todo():
194          sala.salvar()          sala.salvar()
195    
196    
197    def Mundo_suscribirse_al_tick(funcion_tick):
198        """Para añadirse a la lista de funciones llamadas con el "tick" del reloj global.
199    
200        A esta función se le pasarán dos parámetros: el primero es la FechaHoraMine actual,
201        y el otro la que era actual en la llamada anterior (sirve para comprobar si ha habido
202        cambio de dia, por ejemplo).
203        """
204        Mundo.suscritos_al_tick.append(funcion_tick)
205    
206    
207    def Mundo_borrarse_del_tick(funcion_tick):
208        """Para borrarse de la lista anterior."""
209        Mundo.suscritos_al_tick.remove(funcion_tick)
210    
211    
212    def Mundo_tick(crono):
213        """Función que es llamada con cada tick del reloj global.
214    
215        Se encarga de llamar a todos los suscritos.
216        """
217        ahora = FechaHoraMine_ahora()
218    
219        for suscrito in Mundo.suscritos_al_tick:
220            suscrito(ahora, Mundo.tick_anterior)
221    
222        Mundo.tick_anterior = ahora
223    
224        siguiente_tick = ahora + FechaHoraMineRel(signo=1, horas=1, segundos=-ahora.segundo())
225        CronoMine(Mundo.cronoMine_control, siguiente_tick - ahora, Mundo_tick)
226    
227    
228  # Código para pruebas unitarias del módulo.  # Código para pruebas unitarias del módulo.
229    

Legend:
Removed from v.2.0  
changed lines
  Added in v.2.1

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