# HG changeset patch # User Neil Muller # Date 1378217535 -7200 # Node ID 054944c6472b12cfa608ff334b9a16a30c085295 # Parent f409af31cb7be09e0d3ce414ba10dde06b22f654 Initial door object diff -r f409af31cb7b -r 054944c6472b nagslang/constants.py --- a/nagslang/constants.py Tue Sep 03 16:11:50 2013 +0200 +++ b/nagslang/constants.py Tue Sep 03 16:12:15 2013 +0200 @@ -14,6 +14,7 @@ COLLISION_TYPE_SWITCH = 3 COLLISION_TYPE_BOX = 4 COLLISION_TYPE_ENEMY = 5 +COLLISION_TYPE_DOOR = 6 SWITCH_PUSHERS = [COLLISION_TYPE_PLAYER, COLLISION_TYPE_BOX] diff -r f409af31cb7b -r 054944c6472b nagslang/game_object.py --- a/nagslang/game_object.py Tue Sep 03 16:11:50 2013 +0200 +++ b/nagslang/game_object.py Tue Sep 03 16:12:15 2013 +0200 @@ -6,9 +6,10 @@ from nagslang.constants import ( SWITCH_PUSHERS, COLLISION_TYPE_SWITCH, COLLISION_TYPE_BOX, ZORDER_LOW, - ZORDER_FLOOR) + ZORDER_FLOOR, COLLISION_TYPE_DOOR, COLLISION_TYPE_PLAYER) from nagslang.options import options from nagslang.resources import resources +from nagslang.events import ScreenChange class PuzzleGlue(object): @@ -382,3 +383,28 @@ SingleShapePhysicser(space, self.shape), ImageRenderer(resources.get_image('objects', 'crate.png')), ) + + +class Door(GameObject): + zorder = ZORDER_FLOOR + + def __init__(self, space, position, destination, dest_pos): + body = make_body(pymunk.inf, pymunk.inf, position, damping=0.5) + self.shape = pymunk.Poly( + body, [(-32, -32), (32, -32), (32, 32), (-32, 32)]) + self.shape.collision_type = COLLISION_TYPE_DOOR + self.shape.sensor = True + self.destination = destination + self.dest_pos = tuple(dest_pos) + super(Door, self).__init__( + SingleShapePhysicser(space, self.shape), + ImageRenderer(resources.get_image('objects', 'door.png')), + ) + + def animate(self): + space = self.get_space() + for shape in space.shape_query(self.get_shape()): + if shape.collision_type == COLLISION_TYPE_PLAYER: + # Force to new position + shape.body.position = self.dest_pos + ScreenChange.post(self.destination)