comparison tools/area_editor.py @ 478:763e1b1233a3

Movable objects, without hints
author Neil Muller <drnlmuller@gmail.com>
date Sat, 07 Sep 2013 16:47:15 +0200
parents 04127e7219cd
children edee5e51896f
comparison
equal deleted inserted replaced
477:290cb3a0927e 478:763e1b1233a3
444 self._draw_objects = False 444 self._draw_objects = False
445 self._draw_enemies = False 445 self._draw_enemies = False
446 self._draw_lines = False 446 self._draw_lines = False
447 self.grid_size = 1 447 self.grid_size = 1
448 self.sel_mode = False 448 self.sel_mode = False
449 self.move_obj_mode = False
450 self.move_obj = None
449 self._start_pos = None 451 self._start_pos = None
450 self._parent = parent 452 self._parent = parent
451 self._move_point_mode = False 453 self._move_point_mode = False
452 self._move_poly_mode = False 454 self._move_poly_mode = False
453 self._move_point = False 455 self._move_point = False
627 snapped_pos = self.snap_to_grid(corrected_pos) 629 snapped_pos = self.snap_to_grid(corrected_pos)
628 if self.sel_mode and ev.button == 1: 630 if self.sel_mode and ev.button == 1:
629 obj = self.level.find_obj_at_pos(corrected_pos) 631 obj = self.level.find_obj_at_pos(corrected_pos)
630 if obj is not None: 632 if obj is not None:
631 self._edit_selected(obj) 633 self._edit_selected(obj)
634 elif self.move_obj_mode and ev.button == 1 and not self.move_obj:
635 obj = self.level.find_obj_at_pos(corrected_pos)
636 if obj is not None:
637 if obj.movable():
638 self.move_obj = obj
639 elif self.move_obj_mode and ev.button == 1 and self.move_obj:
640 self._update_pos(self.move_obj, snapped_pos)
641 self.move_obj = None
632 elif self._move_poly_mode and ev.button == 1: 642 elif self._move_poly_mode and ev.button == 1:
633 if self._move_point: 643 if self._move_point:
634 # Place the current point 644 # Place the current point
635 self.level.replace_poly(self._move_point, snapped_pos) 645 self.level.replace_poly(self._move_point, snapped_pos)
636 self._move_point = None 646 self._move_point = None
832 if self.level.try_new_object(classname, 842 if self.level.try_new_object(classname,
833 self.level._game_objects, 843 self.level._game_objects,
834 new_cls, None): 844 new_cls, None):
835 edit_dlg.cleanup() 845 edit_dlg.cleanup()
836 846
847 def _update_pos(self, obj, new_pos):
848 data = self.level.lookup[obj]
849 new_coords = self.level.point_to_pymunk(new_pos)
850 data['args'][0][0] = new_coords[0]
851 data['args'][0][1] = new_coords[1]
852 self.level.reset_objs()
853 self.invalidate()
854
837 855
838 class HighLightButton(Button): 856 class HighLightButton(Button):
839 """Button with highlight support""" 857 """Button with highlight support"""
840 def __init__(self, text, parent, **kwds): 858 def __init__(self, text, parent, **kwds):
841 super(HighLightButton, self).__init__(text, **kwds) 859 super(HighLightButton, self).__init__(text, **kwds)
1099 widgets.append(self.sel_mode_but) 1117 widgets.append(self.sel_mode_but)
1100 self._light_buttons.append(self.sel_mode_but) 1118 self._light_buttons.append(self.sel_mode_but)
1101 y += MENU_BUTTON_HEIGHT + MENU_PAD 1119 y += MENU_BUTTON_HEIGHT + MENU_PAD
1102 1120
1103 y += MENU_PAD 1121 y += MENU_PAD
1122 self.move_obj_mode_but = HighLightButton('Move Object', self,
1123 action=self.move_obj_mode)
1124 self.move_obj_mode_but.rect = BUTTON_RECT.copy()
1125 self.move_obj_mode_but.rect.move_ip(MENU_LEFT, y)
1126 widgets.append(self.move_obj_mode_but)
1127 self._light_buttons.append(self.move_obj_mode_but)
1128 y += MENU_BUTTON_HEIGHT + MENU_PAD
1129
1130 y += MENU_PAD
1104 switch_but = Button('Switch to Drawing', action=self.switch_to_draw) 1131 switch_but = Button('Switch to Drawing', action=self.switch_to_draw)
1105 switch_but.rect = BUTTON_RECT.copy() 1132 switch_but.rect = BUTTON_RECT.copy()
1106 switch_but.rect.move_ip(MENU_LEFT, y) 1133 switch_but.rect.move_ip(MENU_LEFT, y)
1107 widgets.append(switch_but) 1134 widgets.append(switch_but)
1108 y += switch_but.rect.height + MENU_PAD 1135 y += switch_but.rect.height + MENU_PAD
1173 but.reset() 1200 but.reset()
1174 1201
1175 def _populate_menu(self): 1202 def _populate_menu(self):
1176 self.level_widget.change_poly(None) 1203 self.level_widget.change_poly(None)
1177 self.level_widget.sel_mode = False 1204 self.level_widget.sel_mode = False
1205 self.level_widget.move_obj_mode = False
1206 self.level_widget.move_obj = None
1178 for widget in self._dMenus[self._menu_mode]: 1207 for widget in self._dMenus[self._menu_mode]:
1179 self.add(widget) 1208 self.add(widget)
1180 self.invalidate() 1209 self.invalidate()
1181 1210
1182 def set_line_mode(self): 1211 def set_line_mode(self):
1184 self.draw_line_but.highlight() 1213 self.draw_line_but.highlight()
1185 1214
1186 def sel_mode(self): 1215 def sel_mode(self):
1187 self.level_widget.sel_mode = not self.level_widget.sel_mode 1216 self.level_widget.sel_mode = not self.level_widget.sel_mode
1188 if self.level_widget.sel_mode: 1217 if self.level_widget.sel_mode:
1218 self.move_obj_mode_but.reset()
1189 self.sel_mode_but.highlight() 1219 self.sel_mode_but.highlight()
1220 self.level_widget.move_obj_mode = False
1221 self.level_widget.move_obj = None
1190 else: 1222 else:
1191 self.sel_mode_but.reset() 1223 self.sel_mode_but.reset()
1224
1225 def move_obj_mode(self):
1226 self.level_widget.move_obj_mode = not self.level_widget.move_obj_mode
1227 if self.level_widget.move_obj_mode:
1228 self.sel_mode_but.reset()
1229 self.move_obj_mode_but.highlight()
1230 self.level_widget.sel_mode = False
1231 else:
1232 self.move_obj_mode_but.reset()
1192 1233
1193 def mouse_move(self, ev): 1234 def mouse_move(self, ev):
1194 self.level_widget.mouse_move(ev) 1235 self.level_widget.mouse_move(ev)
1195 1236
1196 def move_point(self): 1237 def move_point(self):