Mercurial > nagslang
diff nagslang/screens/area.py @ 107:b90d01e4d9d4
Layered drawing.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Mon, 02 Sep 2013 14:01:55 +0200 |
parents | bce9cd8a4a8c |
children | fe1f0bb4ecf0 |
line wrap: on
line diff
--- a/nagslang/screens/area.py Mon Sep 02 13:48:24 2013 +0200 +++ b/nagslang/screens/area.py Mon Sep 02 14:01:55 2013 +0200 @@ -4,6 +4,7 @@ import pymunk import pymunk.pygame_util +from nagslang.constants import ZORDER_HIGH from nagslang.events import ScreenChange from nagslang.game_object import FloorSwitch, FloorLight, PuzzleGlue from nagslang.level import Level @@ -43,23 +44,45 @@ return (dx, dy) +class Drawables(object): + def __init__(self): + self._drawables = {} + + def add(self, drawable): + self._drawables.setdefault(drawable.zorder, []).append(drawable) + + def remove(self, drawable): + self._drawables[drawable.zorder].remove(drawable) + + def get_drawables(self): + for zorder in sorted(self._drawables): + for drawable in self._drawables[zorder]: + yield drawable + + __iter__ = get_drawables + + class AreaScreen(Screen): def setup(self): self.keys = ControlKeys() self._level = Level(self.name) self._level.load() - self._drawables = [] + self._drawables = Drawables() self.add_walls() self.add_protagonist() # TODO: Put this in a level instead: glue = PuzzleGlue() switch = FloorSwitch(self.space, (300, 400)) light = FloorLight(self.space, (300, 500), 'switch') + light2 = FloorLight(self.space, (250, 500), 'switch') + light2.zorder = ZORDER_HIGH glue.add_component('switch', switch.puzzler) glue.add_component('light', light.puzzler) - self._drawables.append(switch) - self._drawables.append(light) + glue.add_component('light2', light2.puzzler) + self._drawables.add(switch) + self._drawables.add(light) + self._drawables.add(light2) def add_walls(self): self.walls = [] @@ -78,7 +101,7 @@ def add_protagonist(self): self.protagonist = Protagonist(self.space, (350, 300)) - self._drawables.append(self.protagonist) + self._drawables.add(self.protagonist) def handle_event(self, ev): if ev.type == pygame.locals.KEYDOWN: