X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Fbase.py;h=16353d597e607f3a96ecdd1635c971362babdf29;hb=c6a89e98809c5a954126411bf18b205d0b90a29c;hp=19ba212fce407eb91047652b5a114ceed719284c;hpb=caff26b2bd7a76141bd9ebd3258b1941eb30064b;p=koperkapel.git diff --git a/koperkapel/scenes/base.py b/koperkapel/scenes/base.py index 19ba212..16353d5 100644 --- a/koperkapel/scenes/base.py +++ b/koperkapel/scenes/base.py @@ -109,23 +109,56 @@ class MoveViewportEvent(Event): ENGINE_METHOD = "move_screen" -class Actors: - """ A list of actors. """ +class Layer: + """ A single layer of actors. """ - def __init__(self): - self._actors = [] + def __init__(self, name): + self.name = name + self.actors = [] + + def __iter__(self): + return iter(self.actors) def add(self, actor): - self._actors.append(actor) + self.actors.append(actor) return actor def remove(self, actor): - self._actors.remove(actor) + self.actors.remove(actor) return actor + +class 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._ordered_layers = [] + self._layers = {} + self.add_layer("default", 0) + + def __getattr__(self, name): + return self._layers[name] + + def add_layer(self, name, level): + layer = self._layers[name] = Layer(name) + self._ordered_layers.append((level, name)) + self._ordered_layers.sort() + return layer + + def add(self, actor, layer="default"): + return self._layers[layer].add(actor) + + def remove(self, actor, layer="default"): + return self._layers[layer].remove(actor) + def draw(self, screen): - for actor in self._actors: - actor.draw() # TODO: allow an option screen to be passed in + for lvl, name in self._ordered_layers: + for actor in self._layers[name]: + actor.draw() # TODO: allow an option screen to be passed in class Scene: