changeset 176:054944c6472b

Initial door object
author Neil Muller <drnlmuller@gmail.com>
date Tue, 03 Sep 2013 16:12:15 +0200
parents f409af31cb7b
children bf11d3bb2d6b
files nagslang/constants.py nagslang/game_object.py
diffstat 2 files changed, 28 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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]
 
--- 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)