Changeset 459:41ebc538109c


Ignore:
Timestamp:
Sep 7, 2013, 1:42:30 PM (7 years ago)
Author:
Simon Cross <hodgestar@…>
Branch:
default
Parents:
457:fcf9f6edf153 (diff), 458:0f8945232e54 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tools/area_editor.py

    r457 r459  
    127127
    128128    def draw(self, mouse_pos, mouse_poly, filled, draw_cand_line, start_pos,
    129              move_point_mode, move_point, zoom_factor, level_widget):
     129             move_point_mode, move_poly_mode, move_point, zoom_factor,
     130             level_widget):
    130131        self._draw_background(True)
    131132        # Draw polygons as needed for the editor
     
    135136        for index, polygon in self.polygons.items():
    136137            color = POLY_COLORS.get(index, pygame.color.THECOLORS['black'])
    137             if move_point_mode and index == self._move_poly:
     138            if move_point_mode and index == self._move_poly and move_point:
    138139                pointlist = [p for p in polygon]
    139140                pointlist = [self.point_to_pygame(p) if p != move_point else
    140141                             mouse_pos for p in pointlist]
     142                pygame.draw.lines(self._surface, color, False, pointlist,
     143                                  line_width)
     144                break
     145            if move_poly_mode and index == self._move_poly and move_point:
     146                pointlist = [p for p in self.translate_poly(
     147                             polygon, move_point, mouse_pos)]
    141148                pygame.draw.lines(self._surface, color, False, pointlist,
    142149                                  line_width)
     
    240247                    self._move_poly = None
    241248        return move_point
     249
     250    def translate_poly(self, poly, move_point, mouse_point):
     251        print "Translate!"
     252        dx = mouse_point[0] - move_point[0]
     253        dy = mouse_point[1] - move_point[1]
     254        new_poly = [(p[0] + dx, p[1] + dy) for p in poly]
     255        return new_poly
     256
     257    def replace_poly(self, old_point, new_point):
     258        print "Replace!", self._move_poly
     259        new_point = self.point_to_pymunk(new_point)
     260        if self._move_poly:
     261            self.polygons[self._move_poly] = self.translate_poly(
     262                self.polygons[self._move_poly], old_point, new_point)
    242263
    243264    def replace_vertex(self, old_point, new_point):
     
    424445        self._parent = parent
    425446        self._move_point_mode = False
     447        self._move_poly_mode = False
    426448        self._move_point = False
    427449        self._zoom_factor = 1.0
     
    488510            mouse_pos = self._level_coordinates(self.mouse_pos)
    489511            mouse_pos = self.snap_to_grid(mouse_pos)
    490         elif self._move_point_mode:
     512        elif self._move_point_mode or self._move_poly_mode:
    491513            mouse_pos = self._level_coordinates(self.mouse_pos)
    492514            mouse_pos = self.snap_to_grid(mouse_pos)
     
    495517        level_surface = level.draw(mouse_pos, self.cur_poly, self.filled_mode,
    496518                                   self._draw_lines, self._start_pos,
    497                                    self._move_point_mode, self._move_point,
    498                                    self._zoom_factor, self)
     519                                   self._move_point_mode, self._move_poly_mode,
     520                                   self._move_point, self._zoom_factor, self)
    499521        if self._draw_objects:
    500522            for thing in self.level.drawables:
     
    528550        self._start_pos = None
    529551        self._move_point_mode = False
     552        self._move_poly_mode = False
    530553
    531554    def key_down(self, ev):
     
    549572            self.close_poly()
    550573
     574    def set_move_poly_mode(self):
     575        self._draw_lines = False
     576        self._move_point_mode = False
     577        self._move_poly_mode = True
     578        self.filled_mode = False
     579        self._parent.reset_lit_buttons()
     580        self._move_point = None
     581
    551582    def set_move_mode(self):
    552583        self._draw_lines = False
    553584        self._move_point_mode = True
     585        self._move_poly_mode = False
    554586        self.filled_mode = False
    555587        self._parent.reset_lit_buttons()
     
    564596            self._draw_lines = False
    565597            self._move_point_mode = False
     598            self._move_poly_mode = False
    566599        else:
    567600            alert('Not all polygons closed, so not filling')
     
    571604        self.mouse_pos = ev.pos
    572605        if old_pos != self.mouse_pos and (self.cur_poly or self._draw_lines
    573                                           or self._move_point_mode):
     606                                          or self._move_point_mode
     607                                          or self._move_poly_mode):
    574608            self.invalidate()
    575609
     
    586620        corrected_pos = self._level_coordinates(ev.pos)
    587621        snapped_pos = self.snap_to_grid(corrected_pos)
     622        print self._move_poly_mode, ev.button, self._move_point
    588623        if self.sel_mode and ev.button == 1:
    589624            obj = self.level.find_obj_at_pos(corrected_pos)
    590625            if obj is not None:
    591626                self._edit_selected(obj)
     627        elif self._move_poly_mode and ev.button == 1:
     628            if self._move_point:
     629                # Place the current point
     630                self.level.replace_poly(self._move_point, snapped_pos)
     631                self._move_point = None
     632                self.invalidate()
     633            else:
     634                # find the current point
     635                self._move_point = self.level.find_vertex(snapped_pos)
     636                print "NEW MOV:", self._move_point
    592637        elif self._move_point_mode and ev.button == 1:
    593638            if self._move_point:
     
    896941        y += MENU_BUTTON_HEIGHT + MENU_PAD
    897942
    898         self.move_point_but = HighLightButton("Move Point", self,
     943        self.move_point_but = HighLightButton("Mv Point", self,
    899944                                              action=self.move_point)
    900         self.move_point_but.rect = BUTTON_RECT.copy()
     945        self.move_point_but.rect = HALF_BUTTON_RECT.copy()
    901946        self.move_point_but.rect.move_ip(MENU_LEFT, y)
    902947        widgets.append(self.move_point_but)
    903948        self._light_buttons.append(self.move_point_but)
     949
     950        self.move_poly_but = HighLightButton("Mv Poly", self,
     951                                             action=self.move_poly)
     952        self.move_poly_but.rect = HALF_BUTTON_RECT.copy()
     953        self.move_poly_but.rect.move_ip(MENU_LEFT + MENU_HALF_WIDTH, y)
     954        widgets.append(self.move_poly_but)
     955        self._light_buttons.append(self.move_poly_but)
     956
    904957        y += MENU_BUTTON_HEIGHT + MENU_PAD
    905958
     
    11401193        self.level_widget.set_move_mode()
    11411194        self.move_point_but.highlight()
     1195
     1196    def move_poly(self):
     1197        self.level_widget.set_move_poly_mode()
     1198        self.move_poly_but.highlight()
    11421199
    11431200    def draw(self, surface):
  • tools/area_editor.py

    r458 r459  
    127127
    128128    def draw(self, mouse_pos, mouse_poly, filled, draw_cand_line, start_pos,
    129              move_point_mode, move_poly_mode, move_point, zoom_factor):
     129             move_point_mode, move_poly_mode, move_point, zoom_factor,
     130             level_widget):
    130131        self._draw_background(True)
    131132        # Draw polygons as needed for the editor
     
    169170                              line_width)
    170171        if draw_cand_line and start_pos and mouse_pos:
    171             endpoint = self.snap_to_grid(mouse_pos)
     172            endpoint = level_widget.snap_to_grid(mouse_pos)
     173            endpoint = self.point_to_pymunk(endpoint)
    172174            pointlist = [start_pos,
    173175                         self.point_to_pygame(endpoint)]
     
    400402                try:
    401403                    l = eval(text)
    402                     args.append(' - - %s' % l[0])
    403                     for coord in l[1:]:
    404                         args.append('   - %s' % coord)
    405404                except Exception:
    406405                    alert("Invalid polygon %s" % text)
     
    408407                    return None
    409408                # Check for convexity
    410                 hull = pymunk.util.convex_hull(l)
    411                 if hull != l:
     409                if not pymunk.util.is_convex(l):
    412410                    alert("Invalid polygon %s - not convex" % text)
    413411                    return None
     412                if not pymunk.util.is_clockwise(l):
     413                    l.reverse()
     414                    if not pymunk.util.is_clockwise(l):
     415                        alert("Invalid polygon %s - unable to make clockwise"
     416                              % text)
     417                        return None
     418                args.append(' - - %s' % l[0])
     419                for coord in l[1:]:
     420                    args.append('   - %s' % coord)
    414421            else:
    415422                args.append(' - ' + text)
     
    447454            return (0, 0)
    448455        # Apply zoom_factor
     456        pos = pos[0] + self.pos[0], pos[1] + self.pos[1]
    449457        zoomed = (pos[0] * self._zoom_factor, pos[1] * self._zoom_factor)
    450         return int(zoomed[0] + self.pos[0]), int(zoomed[1] + self.pos[1])
     458        return int(zoomed[0]), int(zoomed[1])
    451459
    452460    def _move_view(self, offset):
     
    510518                                   self._draw_lines, self._start_pos,
    511519                                   self._move_point_mode, self._move_poly_mode,
    512                                    self._move_point,
    513                                    self._zoom_factor)
     520                                   self._move_point, self._zoom_factor, self)
    514521        if self._draw_objects:
    515522            for thing in self.level.drawables:
Note: See TracChangeset for help on using the changeset viewer.