Changeset 458:0f8945232e54


Ignore:
Timestamp:
09/07/13 13:39:49 (8 years ago)
Author:
Simon Cross <hodgestar@…>
Branch:
default
Phase:
public
Message:

Move whole polygons.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/area_editor.py

    r441 r458  
    127127
    128128    def draw(self, mouse_pos, mouse_poly, filled, draw_cand_line, start_pos,
    129              move_point_mode, move_point, zoom_factor):
     129             move_point_mode, move_poly_mode, move_point, zoom_factor):
    130130        self._draw_background(True)
    131131        # Draw polygons as needed for the editor
     
    135135        for index, polygon in self.polygons.items():
    136136            color = POLY_COLORS.get(index, pygame.color.THECOLORS['black'])
    137             if move_point_mode and index == self._move_poly:
     137            if move_point_mode and index == self._move_poly and move_point:
    138138                pointlist = [p for p in polygon]
    139139                pointlist = [self.point_to_pygame(p) if p != move_point else
    140140                             mouse_pos for p in pointlist]
     141                pygame.draw.lines(self._surface, color, False, pointlist,
     142                                  line_width)
     143                break
     144            if move_poly_mode and index == self._move_poly and move_point:
     145                pointlist = [p for p in self.translate_poly(
     146                             polygon, move_point, mouse_pos)]
    141147                pygame.draw.lines(self._surface, color, False, pointlist,
    142148                                  line_width)
     
    239245                    self._move_poly = None
    240246        return move_point
     247
     248    def translate_poly(self, poly, move_point, mouse_point):
     249        print "Translate!"
     250        dx = mouse_point[0] - move_point[0]
     251        dy = mouse_point[1] - move_point[1]
     252        new_poly = [(p[0] + dx, p[1] + dy) for p in poly]
     253        return new_poly
     254
     255    def replace_poly(self, old_point, new_point):
     256        print "Replace!", self._move_poly
     257        new_point = self.point_to_pymunk(new_point)
     258        if self._move_poly:
     259            self.polygons[self._move_poly] = self.translate_poly(
     260                self.polygons[self._move_poly], old_point, new_point)
    241261
    242262    def replace_vertex(self, old_point, new_point):
     
    418438        self._parent = parent
    419439        self._move_point_mode = False
     440        self._move_poly_mode = False
    420441        self._move_point = False
    421442        self._zoom_factor = 1.0
     
    481502            mouse_pos = self._level_coordinates(self.mouse_pos)
    482503            mouse_pos = self.snap_to_grid(mouse_pos)
    483         elif self._move_point_mode:
     504        elif self._move_point_mode or self._move_poly_mode:
    484505            mouse_pos = self._level_coordinates(self.mouse_pos)
    485506            mouse_pos = self.snap_to_grid(mouse_pos)
     
    488509        level_surface = level.draw(mouse_pos, self.cur_poly, self.filled_mode,
    489510                                   self._draw_lines, self._start_pos,
    490                                    self._move_point_mode, self._move_point,
     511                                   self._move_point_mode, self._move_poly_mode,
     512                                   self._move_point,
    491513                                   self._zoom_factor)
    492514        if self._draw_objects:
     
    521543        self._start_pos = None
    522544        self._move_point_mode = False
     545        self._move_poly_mode = False
    523546
    524547    def key_down(self, ev):
     
    542565            self.close_poly()
    543566
     567    def set_move_poly_mode(self):
     568        self._draw_lines = False
     569        self._move_point_mode = False
     570        self._move_poly_mode = True
     571        self.filled_mode = False
     572        self._parent.reset_lit_buttons()
     573        self._move_point = None
     574
    544575    def set_move_mode(self):
    545576        self._draw_lines = False
    546577        self._move_point_mode = True
     578        self._move_poly_mode = False
    547579        self.filled_mode = False
    548580        self._parent.reset_lit_buttons()
     
    557589            self._draw_lines = False
    558590            self._move_point_mode = False
     591            self._move_poly_mode = False
    559592        else:
    560593            alert('Not all polygons closed, so not filling')
     
    564597        self.mouse_pos = ev.pos
    565598        if old_pos != self.mouse_pos and (self.cur_poly or self._draw_lines
    566                                           or self._move_point_mode):
     599                                          or self._move_point_mode
     600                                          or self._move_poly_mode):
    567601            self.invalidate()
    568602
     
    579613        corrected_pos = self._level_coordinates(ev.pos)
    580614        snapped_pos = self.snap_to_grid(corrected_pos)
     615        print self._move_poly_mode, ev.button, self._move_point
    581616        if self.sel_mode and ev.button == 1:
    582617            obj = self.level.find_obj_at_pos(corrected_pos)
    583618            if obj is not None:
    584619                self._edit_selected(obj)
     620        elif self._move_poly_mode and ev.button == 1:
     621            if self._move_point:
     622                # Place the current point
     623                self.level.replace_poly(self._move_point, snapped_pos)
     624                self._move_point = None
     625                self.invalidate()
     626            else:
     627                # find the current point
     628                self._move_point = self.level.find_vertex(snapped_pos)
     629                print "NEW MOV:", self._move_point
    585630        elif self._move_point_mode and ev.button == 1:
    586631            if self._move_point:
     
    889934        y += MENU_BUTTON_HEIGHT + MENU_PAD
    890935
    891         self.move_point_but = HighLightButton("Move Point", self,
     936        self.move_point_but = HighLightButton("Mv Point", self,
    892937                                              action=self.move_point)
    893         self.move_point_but.rect = BUTTON_RECT.copy()
     938        self.move_point_but.rect = HALF_BUTTON_RECT.copy()
    894939        self.move_point_but.rect.move_ip(MENU_LEFT, y)
    895940        widgets.append(self.move_point_but)
    896941        self._light_buttons.append(self.move_point_but)
     942
     943        self.move_poly_but = HighLightButton("Mv Poly", self,
     944                                             action=self.move_poly)
     945        self.move_poly_but.rect = HALF_BUTTON_RECT.copy()
     946        self.move_poly_but.rect.move_ip(MENU_LEFT + MENU_HALF_WIDTH, y)
     947        widgets.append(self.move_poly_but)
     948        self._light_buttons.append(self.move_poly_but)
     949
    897950        y += MENU_BUTTON_HEIGHT + MENU_PAD
    898951
     
    11331186        self.level_widget.set_move_mode()
    11341187        self.move_point_but.highlight()
     1188
     1189    def move_poly(self):
     1190        self.level_widget.set_move_poly_mode()
     1191        self.move_poly_but.highlight()
    11351192
    11361193    def draw(self, surface):
Note: See TracChangeset for help on using the changeset viewer.