changeset 570:3c7593a84b06

Make hatches movable
author Neil Muller <drnlmuller@gmail.com>
date Sat, 07 Sep 2013 22:39:30 +0200
parents f735665c359e
children dcc06f1e24d7
files nagslang/game_object.py tools/area_editor.py
diffstat 2 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/game_object.py	Sat Sep 07 22:39:16 2013 +0200
+++ b/nagslang/game_object.py	Sat Sep 07 22:39:30 2013 +0200
@@ -532,6 +532,11 @@
         return [("name", "string"), ("end1", "coordinates"),
                 ("end2", "coordinates"), ("key_state", "puzzler")]
 
+    # The level knows that bulkheads are magical
+    @classmethod
+    def movable(cls):
+        return True
+
 
 class ToggleSwitch(GameObject):
     zorder = ZORDER_LOW
--- a/tools/area_editor.py	Sat Sep 07 22:39:16 2013 +0200
+++ b/tools/area_editor.py	Sat Sep 07 22:39:30 2013 +0200
@@ -879,13 +879,19 @@
         args = data['args']
         old_coords = list(args[0])
         param_defs = obj.requires()[1:]  # chop off name
-        for i, (_key, key_type) in enumerate(param_defs):
+        for i, (key, key_type) in enumerate(param_defs):
             if i > len(args):
                 break
             if key_type == "polygon (convex)":
                 new_outline = self.level.translate_poly(
                     args[i], old_coords, new_coords)
                 obj.update_image(new_outline)
+            if key == 'end2':
+                mid = shape.a + (shape.b - shape.a) / 2
+                delta = new_coords - mid
+                shape.unsafe_set_a(shape.a + delta)
+                shape.unsafe_set_b(shape.b + delta)
+                shape.update(new_pos, (0, 0))
         self.invalidate()
 
     def _update_pos(self, obj, new_pos):
@@ -896,12 +902,25 @@
         args[0][0] = new_coords[0]
         args[0][1] = new_coords[1]
         param_defs = obj.requires()[1:]  # chop off name
-        for i, (_key, key_type) in enumerate(param_defs):
+        for i, (key, key_type) in enumerate(param_defs):
             if i > len(args):
                 break
             if key_type == "polygon (convex)":
                 args[i] = self.level.translate_poly(
                     args[i], old_coords, new_coords)
+            if key == 'end2':
+                # Horrible, horrible hackery
+                shape = obj.get_shape()
+                mid = shape.a + (shape.b - shape.a) / 2
+                delta = - mid + new_coords
+                point2 = list(args[i])
+                mid = pymunk.Vec2d(old_coords) + (
+                    pymunk.Vec2d(point2) - old_coords) / 2
+                delta = new_coords - mid
+                args[0][0] = old_coords[0] + delta.x
+                args[0][1] = old_coords[1] + delta.y
+                args[i][0] = point2[0] + delta.x
+                args[i][1] = point2[1] + delta.y
         self.level.reset_objs()
         self.invalidate()