# HG changeset patch # User Neil Muller # Date 1378586370 -7200 # Node ID 3c7593a84b06c688e2a1d31f2085094c7736d0c8 # Parent f735665c359ecf532fdc15bb0cfd9249021eeddd Make hatches movable diff -r f735665c359e -r 3c7593a84b06 nagslang/game_object.py --- 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 diff -r f735665c359e -r 3c7593a84b06 tools/area_editor.py --- 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()