Package pilas :: Package escena :: Module escena_base
[hide private]
[frames] | no frames]

Source Code for Module pilas.escena.escena_base

  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  from pilas import tareas, colisiones, pytweener, camara 
 11  from pilas.evento import Evento 
 12   
 13   
14 -class Base(object):
15 """ Escena base abstracta de la que deben heredar el resto de escenas. 16 17 >>> class MiEscena(Base): 18 >>> 19 >>> def __init__(self): 20 >>> Base.__init__(self) 21 >>> 22 >>> def iniciar(self): 23 >>> fondo = pilas.fondos.Color(pilas.colores.grisclaro) 24 25 Si heredas de esta clase DEBES redefinir el método "iniciar". 26 Como se muestra en el ejemplo anterior. 27 """
28 - def __init__(self):
29 30 # Identificador de la escena. Sólo util para efectuar algún debug. 31 self.id = "" 32 33 # Actores que participan en la escena. 34 self.actores = [] 35 36 # Camara de la escena. 37 self.camara = camara.Camara(self) 38 39 # Eventos asociados a la escena. 40 self.mueve_camara = Evento('mueve_camara') # ['x', 'y', 'dx', 'dy'] 41 self.mueve_mouse = Evento('mueve_mouse') # ['x', 'y', 'dx', 'dy'] 42 self.click_de_mouse = Evento('click_de_mouse') # ['button', 'x', 'y'] 43 self.termina_click = Evento('termina_click') # ['button', 'x', 'y'] 44 self.mueve_rueda = Evento('mueve_rueda') # ['delta'] 45 self.pulsa_tecla = Evento('pulsa_tecla') # ['codigo', 'texto'] 46 self.suelta_tecla = Evento('suelta_tecla') # ['codigo', 'texto'] 47 self.pulsa_tecla_escape = Evento('pulsa_tecla_escape') # [] 48 self.actualizar = Evento('actualizar') # [] 49 self.log = Evento('log') # ['data'] 50 51 self.control = pilas.control.Control(self) 52 53 # Gestor de tareas 54 self.tareas = tareas.Tareas() 55 56 # Gestor de colisiones 57 self.colisiones = colisiones.Colisiones() 58 59 # Generador de interpolaciones 60 self.tweener = pytweener.Tweener() 61 62 # Administrador de la fisica de la escena. 63 self.fisica = pilas.mundo.crear_motor_fisica() 64 65 # Control para saber si se ha iniciado la escena y poder actualizarla. 66 self.iniciada = False
67
68 - def iniciar(self):
69 """ Este método debe ser reimplementado en todas las clases que 70 hereden de ella. 71 72 >>> def iniciar(self): 73 >>> fondo = pilas.fondos.Color(pilas.colores.grisclaro) 74 75 """ 76 raise Exception("Debes de re-definir el metodo iniciar.")
77
78 - def pausar(self):
79 """ Este método es llamado por el gestor de escenas cuando se 80 ::almacena:: una escena para llamar a otra nueva. 81 82 >>> pilas.almacenar_escena(EscenaDeOpciones()) 83 84 Al efectuar esta instrucción el gestor llamará primero a nuestro 85 método ::pausar:: antes de cambiar a la escena que le hemos indicado. 86 """ 87 pass
88
89 - def reanudar(self):
90 """ Este método es llamado por el gestor de escenas cuando se 91 ::recupera:: una escena que habia sido almacenada anteriormente. 92 93 >>> pilas.recuperar_escena() 94 95 Al efectuar esta instrucción el gestor llamará primero a nuestro 96 método ::reanudar:: antes de cambiar a la escena que habiamos 97 almacenado. 98 """ 99 pass
100 101 # Estos metodos no deben ser sobreescritos en las clases que 102 # hereden de ella. 103
104 - def _pausar_fisica(self):
105 self.fisica.pausar_mundo()
106
107 - def _reanudar_fisica(self):
109
110 - def _actualizar_eventos(self):
111 self.tweener.update(16) 112 self.tareas.actualizar(1 / 60.0) 113 self.colisiones.verificar_colisiones()
114
115 - def _actualizar_fisica(self):
116 if self.fisica: 117 # Solo actualizamos la fisica si existen más de 4 bodies. 118 # Ya que las paredes ya vienen definidas al crear la fisica. 119 if len(self.fisica.mundo.bodies) > 4: 120 self.fisica.actualizar()
121
122 - def _limpiar(self):
123 for actor in self.actores: 124 actor.destruir() 125 126 self.tareas.eliminar_todas() 127 self.tweener.eliminar_todas() 128 if self.fisica: 129 self.fisica.reiniciar()
130