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. |
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 |
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 |
|
|
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 |
|
|