pilas.escena.escena_base

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):
    108          self.fisica.reanudar_mundo()
    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