pilas.fondos

Package pilas :: Module fondos |
[hide private]
[frames] | no frames]

# Source Code for Module pilas.fondos

      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
     11
     12 -class Fondo(pilas.actores.Actor):
     13
     14 -    def __init__(self, imagen):
     15          self._eliminar_el_fondo_de_pantalla_actual()
     16          pilas.actores.Actor.__init__(self, imagen)
     17          self.z = 1000
     18
     19 -    def _eliminar_el_fondo_de_pantalla_actual(self):
     20          fondos = [x for x in pilas.escena_actual().actores if x.es_fondo()]
     21          a_eliminar = []
     22          for f in fondos:
     23              a_eliminar.append(f)
     24
     25          for fondo in a_eliminar:
     26              fondo.eliminar()
     27
     28 -    def es_fondo(self):
     29          return True
     30
     31 -class Volley(Fondo):
     32      "Muestra una escena que tiene un fondo de pantalla de paisaje."
     33
     34 -    def __init__(self):
     35          Fondo.__init__(self, "fondos/volley.jpg")
     36
     37 -class Nubes(Fondo):
     38      "Muestra un fondo celeste con nubes."
     39
     40 -    def __init__(self):
     41          Fondo.__init__(self, "fondos/nubes.png")
     42
     43 -class Pasto(Fondo):
     44      "Muestra una escena que tiene un fondo de pantalla de paisaje."
     45
     46 -    def __init__(self):
     47          Fondo.__init__(self, "fondos/pasto.png")
     48
     49 -class Selva(Fondo):
     50      "Muestra una escena que tiene un fondo de pantalla de paisaje."
     51
     52 -    def __init__(self):
     53          Fondo.__init__(self, "fondos/selva.jpg")
     54
     55
     56 -class Tarde(Fondo):
     57      "Representa una escena de fondo casi naranja."
     58
     59 -    def __init__(self):
     60          Fondo.__init__(self, "fondos/tarde.jpg")
     61          self.y = 40
     62
     63
     64 -class Espacio(Fondo):
     65      "Es un espacio con estrellas."
     66
     67 -    def __init__(self):
     68          Fondo.__init__(self, "fondos/espacio.jpg")
     69
     70 -class Noche(Fondo):
     71      "Muestra una escena que tiene un fondo de pantalla de paisaje."
     72
     73 -    def __init__(self):
     74          Fondo.__init__(self, "fondos/noche.jpg")
     75
     76 -class Color(Fondo):
     77      "Pinta todo el fondo de un color uniforme."
     78
     79 -    def __init__(self, color):
     80          Fondo.__init__(self, "invisible.png")
     81          self.color = color
     82          self.lienzo = pilas.imagenes.cargar_lienzo()
     83
     84 -    def dibujar(self, motor):
     85          if self.color:
     86              self.lienzo.pintar(motor, self.color)
     87
     88
     89 -class Desplazamiento(Fondo):
     90      """Representa un fondo formado por varias capas (o actores).
     91
     92      En fondo de este tipo, ayuda a generar un efecto de profundidad,
     93      de perspectiva en tres dimensiones.
     94      """
     95
     96 -    def __init__(self, ciclico=True):
     97          "Inicia el objeto, dando la opción de simular que el fondo es infinitio"
     98
     99          Fondo.__init__(self, "invisible.png")
    100          self.posicion = 0
    101          self.posicion_anterior = 0
    102          self.capas = []
    103          self.velocidades = {}
    104          self.escena.mueve_camara.conectar(self.cuando_mueve_camara)
    105          self.ciclico = True
    106
    107          if ciclico:
    108              self.capas_auxiliares = []
    109
    110 -    def agregar(self, capa, velocidad=1):
    111          x, _, _, y = pilas.utils.obtener_bordes()
    112          capa.fijo = True
    113          capa.izquierda = x
    114
    115          self.capas.append(capa)
    116          self.velocidades[capa] = velocidad
    117
    118          if self.ciclico:
    119              copia = capa.duplicar()
    120              copia.y = capa.y
    121              copia.z = capa.z
    122              copia.fijo = True
    123              copia.imagen = capa.imagen
    124              self.capas_auxiliares.append(copia)
    125              copia.izquierda = capa.derecha
    126              self.velocidades[copia] = velocidad
    127
    128 -    def actualizar(self):
    129          if self.posicion != self.posicion_anterior:
    130              dx = self.posicion - self.posicion_anterior
    131              self.mover_capas(dx)
    132              self.posicion_anterior = self.posicion
    133
    134 -    def cuando_mueve_camara(self, evento):
    135          dx = evento.dx
    136
    137          # Hace que las capas no se desplacen naturalmente
    138          # como todos los actores.
    139          #for x in self.capas:
    140          #    x.x += dx
    141
    142          # aplica un movimiento respetando las velocidades.
    143          self.mover_capas(dx)
    144
    145 -    def mover_capas(self, dx):
    146          for capa in self.capas:
    147              capa.x -= dx * self.velocidades[capa]
    148
    149          if self.ciclico:
    150              for capa in self.capas_auxiliares:
    151                  capa.x -= dx * self.velocidades[capa]
    152
    153 -class Plano(Fondo):
    154
    155 -    def __init__(self, ciclico=True):
    156          Fondo.__init__(self, "plano.png")
    157
    158 -    def dibujar(self, painter):
    159          painter.save()
    160          x = pilas.mundo.motor.camara_x
    161          y = -pilas.mundo.motor.camara_y
    162
    163          ancho, alto = pilas.mundo.motor.obtener_area()
    164          painter.drawTiledPixmap(0, 0, ancho, alto, self.imagen._imagen, x % 30, y % 30)
    165
    166          painter.restore()
    167