pilas.grupo

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

# Source Code for Module pilas.grupo

     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  import random
     9
    10 -class Grupo(list):
    11      """Un grupo es un contenedor que funciona como una lista normal, pero mejorada.
    12
    13      Los grupos pueden contener actores, y permite que a todos los actores
    14      se los pueda tratar como uno.
    15
    16      Por ejemplo si tienes un contenedor con 20 actores, podrías ampliar
    17      el tamaño de todos ellos juntos usando la sentencia:
    18
    19          >>> grupo = pilas.atajos.fabricar(pilas.actores.Mono, 20)
    20          >>> grupo.escala = 2
    21      """
    22
    23 -    def __getattr__(self, attr):
    24          """Esta funcion se asegura de que cada vez que se invoque a un metodo
    25          del grupo, en realidad, el grupo va a invocar a ese metodo pero
    26          en todos sus elementos. Algo asi como un map."""
    27
    28          def map_a_todos(*k, **kw):
    29              for a in self:
    30                  funcion = getattr(a, attr)
    31                  funcion(*k, **kw)
    32
    33          return map_a_todos
    34
    35 -    def __setattr__(self, atributo, valor):
    36          for a in self:
    37              setattr(a, atributo, valor)
    38
    39 -    def desordenar(self):
    40          """Les asigna una posición aleatoria a todos los actores del grupo."""
    41          for a in self:
    42              a.x = random.randint(-300, 300)
    43              a.y = random.randint(-200, 200)
    44
    45 -    def limpiar(self):
    46          """Elimina a todos los actores dentro del grupo."""
    47          eliminar = list(self)
    48          for e in eliminar:
    49              e.eliminar()
    50