Mercurial > nagslang
comparison tools/area_editor.py @ 570:3c7593a84b06
Make hatches movable
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sat, 07 Sep 2013 22:39:30 +0200 |
parents | f868a8592432 |
children | 9ae338ad2416 |
comparison
equal
deleted
inserted
replaced
569:f735665c359e | 570:3c7593a84b06 |
---|---|
877 shape.body.position = (new_coords[0], new_coords[1]) | 877 shape.body.position = (new_coords[0], new_coords[1]) |
878 data = self.level.lookup[obj] | 878 data = self.level.lookup[obj] |
879 args = data['args'] | 879 args = data['args'] |
880 old_coords = list(args[0]) | 880 old_coords = list(args[0]) |
881 param_defs = obj.requires()[1:] # chop off name | 881 param_defs = obj.requires()[1:] # chop off name |
882 for i, (_key, key_type) in enumerate(param_defs): | 882 for i, (key, key_type) in enumerate(param_defs): |
883 if i > len(args): | 883 if i > len(args): |
884 break | 884 break |
885 if key_type == "polygon (convex)": | 885 if key_type == "polygon (convex)": |
886 new_outline = self.level.translate_poly( | 886 new_outline = self.level.translate_poly( |
887 args[i], old_coords, new_coords) | 887 args[i], old_coords, new_coords) |
888 obj.update_image(new_outline) | 888 obj.update_image(new_outline) |
889 if key == 'end2': | |
890 mid = shape.a + (shape.b - shape.a) / 2 | |
891 delta = new_coords - mid | |
892 shape.unsafe_set_a(shape.a + delta) | |
893 shape.unsafe_set_b(shape.b + delta) | |
894 shape.update(new_pos, (0, 0)) | |
889 self.invalidate() | 895 self.invalidate() |
890 | 896 |
891 def _update_pos(self, obj, new_pos): | 897 def _update_pos(self, obj, new_pos): |
892 data = self.level.lookup[obj] | 898 data = self.level.lookup[obj] |
893 new_coords = self.level.point_to_pymunk(new_pos) | 899 new_coords = self.level.point_to_pymunk(new_pos) |
894 args = data['args'] | 900 args = data['args'] |
895 old_coords = list(args[0]) | 901 old_coords = list(args[0]) |
896 args[0][0] = new_coords[0] | 902 args[0][0] = new_coords[0] |
897 args[0][1] = new_coords[1] | 903 args[0][1] = new_coords[1] |
898 param_defs = obj.requires()[1:] # chop off name | 904 param_defs = obj.requires()[1:] # chop off name |
899 for i, (_key, key_type) in enumerate(param_defs): | 905 for i, (key, key_type) in enumerate(param_defs): |
900 if i > len(args): | 906 if i > len(args): |
901 break | 907 break |
902 if key_type == "polygon (convex)": | 908 if key_type == "polygon (convex)": |
903 args[i] = self.level.translate_poly( | 909 args[i] = self.level.translate_poly( |
904 args[i], old_coords, new_coords) | 910 args[i], old_coords, new_coords) |
911 if key == 'end2': | |
912 # Horrible, horrible hackery | |
913 shape = obj.get_shape() | |
914 mid = shape.a + (shape.b - shape.a) / 2 | |
915 delta = - mid + new_coords | |
916 point2 = list(args[i]) | |
917 mid = pymunk.Vec2d(old_coords) + ( | |
918 pymunk.Vec2d(point2) - old_coords) / 2 | |
919 delta = new_coords - mid | |
920 args[0][0] = old_coords[0] + delta.x | |
921 args[0][1] = old_coords[1] + delta.y | |
922 args[i][0] = point2[0] + delta.x | |
923 args[i][1] = point2[1] + delta.y | |
905 self.level.reset_objs() | 924 self.level.reset_objs() |
906 self.invalidate() | 925 self.invalidate() |
907 | 926 |
908 | 927 |
909 class HighLightButton(Button): | 928 class HighLightButton(Button): |