pilas.escena.gestor

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

# Source Code for Module pilas.escena.gestor

     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
    10 -class Gestor(object):
    11      """Clase que permite el control de las escenas en pilas."""
    12
    13 -    def __init__(self):
    14          self.escenas = []
    15
    16 -    def limpiar(self):
    17          """Elimina todas las escenas del gestor."""
    18          for x in self.escenas:
    19              x._limpiar()
    20
    21          self.escenas = []
    22
    23 -    def cambiar_escena(self, escena):
    24          """Define una escena unica y la inicializa.
    25
    26          Las escenas que estuvieran apiladas se eliminan.
    27
    28          :param escena: Escena a la que se quiere cambiar."""
    29
    30          self.limpiar()
    31          self.escenas.append(escena)
    32          escena.iniciar()
    33          escena.iniciada = True
    34
    35 -    def almacenar_escena(self, escena):
    36          """Pausa la escena actualmente activa e inicializa la escena que
    37          le pasamos como parametro.
    38
    39          :param escena: Escena que deseamos que sea la activa.
    40          """
    41          if self.escena_actual():
    42              self.escena_actual()._pausar_fisica()
    43              self.escena_actual().pausar()
    44
    45          self.escenas.append(escena)
    46          escena.iniciar()
    47          escena.iniciada = True
    48
    49 -    def recuperar_escena(self):
    50          """Recupera la escena que fue Pausada mediante **almacenar_escena**.
    51          """
    52          if len(self.escenas) > 1:
    53              self.escenas[-1]._limpiar()
    54              escena_actual = self.escenas.pop()
    55              escena_anterior = self.escenas[-1]
    56              escena_anterior._reanudar_fisica()
    57              escena_anterior.control.limpiar()
    58              escena_anterior.reanudar()
    59          else:
    60              raise Exception("Debe haber al menos una escena en la pila para restaurar.")
    61
    62 -    def escena_actual(self):
    63          """Retorna la escena actual o None si no hay escena definida."""
    64          if len(self.escenas) > 0:
    65              return self.escenas[-1]
    66          else:
    67              return None
    68
    69 -    def actualizar(self):
    70          escena = self.escena_actual()
    71
    72          if escena:
    73              if escena.iniciada:
    74                  escena._actualizar_eventos()
    75
    76              for escena in self.escenas:
    77                  escena._actualizar_fisica()
    78