X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Fbase.py;h=47891a6582784613cf4f12ae81415e32be097d53;hb=29ced0c100363be9400a13efad9ef3a6901a75a8;hp=d0b9a951ae16c57e20e279560f54fd9ab8a7b7a4;hpb=466b06423db1ffc8681b38da25c7caa1e9d6fca6;p=koperkapel.git diff --git a/koperkapel/scenes/base.py b/koperkapel/scenes/base.py index d0b9a95..47891a6 100644 --- a/koperkapel/scenes/base.py +++ b/koperkapel/scenes/base.py @@ -109,34 +109,61 @@ class MoveViewportEvent(Event): ENGINE_METHOD = "move_screen" +class Layer: + """ A single layer of actors. """ + + def __init__(self, name): + self.name = name + self.actors = [] + + def __iter__(self): + return iter(self.actors) + + def __getitem__(self, i): + return self.actors[i] + + def __len__(self): + return len(self.actors) + + def add(self, actor): + self.actors.append(actor) + return actor + + def remove(self, actor): + self.actors.remove(actor) + return actor + + class Actors: - """ A list of actors. + """ Layers of actors. Actors may be rendered in different layers. Layers with lower levels are rendered lower than layers with higher ones. """ def __init__(self): - self._layer_order = [] + self._ordered_layers = [] self._layers = {} self.add_layer("default", 0) + def __getattr__(self, name): + return self._layers[name] + def add_layer(self, name, level): - self._layer_order.append((level, name)) - self._layer_order.sort() - self._layers[name] = [] + layer = self._layers[name] = Layer(name) + self._ordered_layers.append((level, name)) + self._ordered_layers.sort() + return layer def add(self, actor, layer="default"): - self._layers[layer].append(actor) - return actor + return self._layers[layer].add(actor) def remove(self, actor, layer="default"): - self._layers[layer].remove(actor) - return actor + return self._layers[layer].remove(actor) def draw(self, screen): - for lvl, layer in self._layer_order: - for actor in self._layers[layer]: + for lvl, name in self._ordered_layers: + for actor in self._layers[name]: actor.draw() # TODO: allow an option screen to be passed in