# HG changeset patch # User Jeremy Thurgood # Date 1378123315 -7200 # Node ID b90d01e4d9d48cd3b10dec73d9f6e8f9e3648732 # Parent bce9cd8a4a8c4ca9274cc5e22e22bcc07fc21f0b Layered drawing. diff -r bce9cd8a4a8c -r b90d01e4d9d4 nagslang/constants.py --- a/nagslang/constants.py Mon Sep 02 13:48:24 2013 +0200 +++ b/nagslang/constants.py Mon Sep 02 14:01:55 2013 +0200 @@ -15,3 +15,8 @@ COLLISION_TYPE_BOX = 4 SWITCH_PUSHERS = [COLLISION_TYPE_PLAYER, COLLISION_TYPE_BOX] + +ZORDER_FLOOR = 0 +ZORDER_LOW = 1 +ZORDER_MID = 2 +ZORDER_HIGH = 3 diff -r bce9cd8a4a8c -r b90d01e4d9d4 nagslang/game_object.py --- a/nagslang/game_object.py Mon Sep 02 13:48:24 2013 +0200 +++ b/nagslang/game_object.py Mon Sep 02 14:01:55 2013 +0200 @@ -4,7 +4,8 @@ import pymunk import pymunk.pygame_util -from nagslang.constants import SWITCH_PUSHERS, COLLISION_TYPE_SWITCH +from nagslang.constants import ( + SWITCH_PUSHERS, COLLISION_TYPE_SWITCH, ZORDER_LOW) from nagslang.options import options @@ -177,6 +178,7 @@ self.physicser.add_to_space() self.renderer = renderer self.puzzler = puzzler + self.zorder = ZORDER_LOW def get_render_position(self, surface): return self.physicser.get_render_position(surface) diff -r bce9cd8a4a8c -r b90d01e4d9d4 nagslang/protagonist.py --- a/nagslang/protagonist.py Mon Sep 02 13:48:24 2013 +0200 +++ b/nagslang/protagonist.py Mon Sep 02 14:01:55 2013 +0200 @@ -1,7 +1,7 @@ import pymunk import pymunk.pygame_util -from nagslang.constants import COLLISION_TYPE_PLAYER +from nagslang.constants import COLLISION_TYPE_PLAYER, ZORDER_MID from nagslang.game_object import ( GameObject, SingleShapePhysicser, FacingImageRenderer) from nagslang.mutators import FLIP_H @@ -25,6 +25,7 @@ super(Protagonist, self).__init__( self._physicsers[self.form], self._renderers[self.form]) + self.zorder = ZORDER_MID self.go_human() diff -r bce9cd8a4a8c -r b90d01e4d9d4 nagslang/screens/area.py --- 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: