Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pilas/grupo.py
blob: 466ad469e9c7994540e5ba1535e8feaa48b08d64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# -*- encoding: utf-8 -*-
# pilas engine - a video game framework.
#
# copyright 2010 - hugo ruscitti
# license: lgplv3 (see http://www.gnu.org/licenses/lgpl.html)
#
# website - http://www.pilas-engine.com.ar
import random

class Grupo(list):
    """Un grupo es un contenedor que funciona como una lista normal, pero mejorada.

    Los grupos pueden contener actores, y permite que a todos los actores
    se los pueda tratar como uno.

    Por ejemplo si tienes un contenedor con 20 actores, podrías ampliar
    el tamaño de todos ellos juntos usando la sentencia::

            grupo = pilas.atajos.fabricar(pilas.actores.Mono, 20)
            grupo.escala = 2

    """

    def __getattr__(self, attr):
        """Esta funcion se asegura de que cada vez que se invoque a un metodo
        del grupo, en realidad, el grupo va a invocar a ese metodo pero
        en todos sus elementos. Algo asi como un map."""

        def map_a_todos(*k, **kw):
            for a in self:
                funcion = getattr(a, attr)
                funcion(*k, **kw)

        return map_a_todos

    def __setattr__(self, atributo, valor):
        for a in self:
            setattr(a, atributo, valor)

    def desordenar(self):
        for a in self:
            a.x = random.randint(-300, 300)
            a.y = random.randint(-200, 200)

    def limpiar(self):
        eliminar = list(self)
        for e in eliminar:
            e.eliminar()