changeset 478:763e1b1233a3

Movable objects, without hints
author Neil Muller <drnlmuller@gmail.com>
date Sat, 07 Sep 2013 16:47:15 +0200
parents 290cb3a0927e
children 197372109f9d
files tools/area_editor.py
diffstat 1 files changed, 41 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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)