X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Fbase.py;h=d0b9a951ae16c57e20e279560f54fd9ab8a7b7a4;hb=1df183b924e272541198f34c1ebb3d33406192a6;hp=aa30be492baa518327975e8d5a96377dc88e3935;hpb=4e59ab6a38bba2eccd59cee633dc4fd391c12100;p=koperkapel.git diff --git a/koperkapel/scenes/base.py b/koperkapel/scenes/base.py index aa30be4..d0b9a95 100644 --- a/koperkapel/scenes/base.py +++ b/koperkapel/scenes/base.py @@ -29,9 +29,9 @@ class Engine: ev.apply(self) def change_scene(self, scene): - self._apply_events(self._scene.exit(self._world)) + self._apply_events(self._scene.exit(self._world.proxy())) self._scene = scene - self._apply_events(self._scene.enter(self._world)) + self._apply_events(self._scene.enter(self._world.proxy())) def change_world(self, *args, **kw): self._world.apply_event(*args, **kw) @@ -46,7 +46,7 @@ class Engine: @apply_events def update(self, dt): - return self._scene.update(self._world, dt) + return self._scene.update(self._world.proxy(), dt) def draw(self): self._scene.draw(self._app.screen, self._viewport) @@ -110,22 +110,34 @@ class MoveViewportEvent(Event): class Actors: - """ A list of actors. """ + """ A list 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._actors = [] + self._layer_order = [] + self._layers = {} + self.add_layer("default", 0) + + def add_layer(self, name, level): + self._layer_order.append((level, name)) + self._layer_order.sort() + self._layers[name] = [] - def add(self, actor): - self._actors.append(actor) + def add(self, actor, layer="default"): + self._layers[layer].append(actor) return actor - def remove(self, actor): - self._actors.remove(actor) + def remove(self, actor, layer="default"): + self._layers[layer].remove(actor) return actor def draw(self, screen): - for actor in self._actors: - actor.draw() # TODO: allow an option screen to be passed in + for lvl, layer in self._layer_order: + for actor in self._layers[layer]: + actor.draw() # TODO: allow an option screen to be passed in class Scene: