# HG changeset patch # User Neil Muller # Date 1378565235 -7200 # Node ID 763e1b1233a3c4d876a506144e052bffac41cea6 # Parent 290cb3a0927e11528b9a6dbb8a8c020245ee08e2 Movable objects, without hints diff -r 290cb3a0927e -r 763e1b1233a3 tools/area_editor.py --- a/tools/area_editor.py Sat Sep 07 16:47:01 2013 +0200 +++ b/tools/area_editor.py Sat Sep 07 16:47:15 2013 +0200 @@ -446,6 +446,8 @@ self._draw_lines = False self.grid_size = 1 self.sel_mode = False + self.move_obj_mode = False + self.move_obj = None self._start_pos = None self._parent = parent self._move_point_mode = False @@ -629,6 +631,14 @@ obj = self.level.find_obj_at_pos(corrected_pos) if obj is not None: self._edit_selected(obj) + elif self.move_obj_mode and ev.button == 1 and not self.move_obj: + obj = self.level.find_obj_at_pos(corrected_pos) + if obj is not None: + if obj.movable(): + self.move_obj = obj + elif self.move_obj_mode and ev.button == 1 and self.move_obj: + self._update_pos(self.move_obj, snapped_pos) + self.move_obj = None elif self._move_poly_mode and ev.button == 1: if self._move_point: # Place the current point @@ -834,6 +844,14 @@ new_cls, None): edit_dlg.cleanup() + def _update_pos(self, obj, new_pos): + data = self.level.lookup[obj] + new_coords = self.level.point_to_pymunk(new_pos) + data['args'][0][0] = new_coords[0] + data['args'][0][1] = new_coords[1] + self.level.reset_objs() + self.invalidate() + class HighLightButton(Button): """Button with highlight support""" @@ -1101,6 +1119,15 @@ y += MENU_BUTTON_HEIGHT + MENU_PAD y += MENU_PAD + self.move_obj_mode_but = HighLightButton('Move Object', self, + action=self.move_obj_mode) + self.move_obj_mode_but.rect = BUTTON_RECT.copy() + self.move_obj_mode_but.rect.move_ip(MENU_LEFT, y) + widgets.append(self.move_obj_mode_but) + self._light_buttons.append(self.move_obj_mode_but) + y += MENU_BUTTON_HEIGHT + MENU_PAD + + y += MENU_PAD switch_but = Button('Switch to Drawing', action=self.switch_to_draw) switch_but.rect = BUTTON_RECT.copy() switch_but.rect.move_ip(MENU_LEFT, y) @@ -1175,6 +1202,8 @@ def _populate_menu(self): self.level_widget.change_poly(None) self.level_widget.sel_mode = False + self.level_widget.move_obj_mode = False + self.level_widget.move_obj = None for widget in self._dMenus[self._menu_mode]: self.add(widget) self.invalidate() @@ -1186,10 +1215,22 @@ def sel_mode(self): self.level_widget.sel_mode = not self.level_widget.sel_mode if self.level_widget.sel_mode: + self.move_obj_mode_but.reset() self.sel_mode_but.highlight() + self.level_widget.move_obj_mode = False + self.level_widget.move_obj = None else: self.sel_mode_but.reset() + def move_obj_mode(self): + self.level_widget.move_obj_mode = not self.level_widget.move_obj_mode + if self.level_widget.move_obj_mode: + self.sel_mode_but.reset() + self.move_obj_mode_but.highlight() + self.level_widget.sel_mode = False + else: + self.move_obj_mode_but.reset() + def mouse_move(self, ev): self.level_widget.mouse_move(ev)