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):