Mercurial > nagslang
comparison tools/area_editor.py @ 459:41ebc538109c
Merge.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 07 Sep 2013 15:42:30 +0200 |
parents | fcf9f6edf153 0f8945232e54 |
children | 49f6adde49d0 |
comparison
equal
deleted
inserted
replaced
457:fcf9f6edf153 | 459:41ebc538109c |
---|---|
124 startpoint = self.point_to_pymunk(start_pos) | 124 startpoint = self.point_to_pymunk(start_pos) |
125 endpoint = self.point_to_pymunk(end_pos) | 125 endpoint = self.point_to_pymunk(end_pos) |
126 self.lines.append([startpoint, endpoint]) | 126 self.lines.append([startpoint, endpoint]) |
127 | 127 |
128 def draw(self, mouse_pos, mouse_poly, filled, draw_cand_line, start_pos, | 128 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): | |
130 self._draw_background(True) | 131 self._draw_background(True) |
131 # Draw polygons as needed for the editor | 132 # Draw polygons as needed for the editor |
132 line_width = int(2 * zoom_factor) | 133 line_width = int(2 * zoom_factor) |
133 if filled: | 134 if filled: |
134 self._draw_exterior(True) | 135 self._draw_exterior(True) |
135 for index, polygon in self.polygons.items(): | 136 for index, polygon in self.polygons.items(): |
136 color = POLY_COLORS.get(index, pygame.color.THECOLORS['black']) | 137 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: |
138 pointlist = [p for p in polygon] | 139 pointlist = [p for p in polygon] |
139 pointlist = [self.point_to_pygame(p) if p != move_point else | 140 pointlist = [self.point_to_pygame(p) if p != move_point else |
140 mouse_pos for p in pointlist] | 141 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)] | |
141 pygame.draw.lines(self._surface, color, False, pointlist, | 148 pygame.draw.lines(self._surface, color, False, pointlist, |
142 line_width) | 149 line_width) |
143 break | 150 break |
144 if len(polygon) > 1: | 151 if len(polygon) > 1: |
145 pointlist = [self.point_to_pygame(p) for p in polygon] | 152 pointlist = [self.point_to_pygame(p) for p in polygon] |
237 if dist < mindist: | 244 if dist < mindist: |
238 mindist = dist | 245 mindist = dist |
239 move_point = point | 246 move_point = point |
240 self._move_poly = None | 247 self._move_poly = None |
241 return move_point | 248 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) | |
242 | 263 |
243 def replace_vertex(self, old_point, new_point): | 264 def replace_vertex(self, old_point, new_point): |
244 new_point = self.point_to_pymunk(new_point) | 265 new_point = self.point_to_pymunk(new_point) |
245 if self._move_poly: | 266 if self._move_poly: |
246 new_polygon = [p if p != old_point else new_point for p in | 267 new_polygon = [p if p != old_point else new_point for p in |
421 self.grid_size = 1 | 442 self.grid_size = 1 |
422 self.sel_mode = False | 443 self.sel_mode = False |
423 self._start_pos = None | 444 self._start_pos = None |
424 self._parent = parent | 445 self._parent = parent |
425 self._move_point_mode = False | 446 self._move_point_mode = False |
447 self._move_poly_mode = False | |
426 self._move_point = False | 448 self._move_point = False |
427 self._zoom_factor = 1.0 | 449 self._zoom_factor = 1.0 |
428 | 450 |
429 def _level_coordinates(self, pos): | 451 def _level_coordinates(self, pos): |
430 # Move positions to level values | 452 # Move positions to level values |
485 mouse_pos = self.snap_to_grid(mouse_pos) | 507 mouse_pos = self.snap_to_grid(mouse_pos) |
486 elif self._draw_lines: | 508 elif self._draw_lines: |
487 # Interior wall mode | 509 # Interior wall mode |
488 mouse_pos = self._level_coordinates(self.mouse_pos) | 510 mouse_pos = self._level_coordinates(self.mouse_pos) |
489 mouse_pos = self.snap_to_grid(mouse_pos) | 511 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: |
491 mouse_pos = self._level_coordinates(self.mouse_pos) | 513 mouse_pos = self._level_coordinates(self.mouse_pos) |
492 mouse_pos = self.snap_to_grid(mouse_pos) | 514 mouse_pos = self.snap_to_grid(mouse_pos) |
493 else: | 515 else: |
494 mouse_pos = None | 516 mouse_pos = None |
495 level_surface = level.draw(mouse_pos, self.cur_poly, self.filled_mode, | 517 level_surface = level.draw(mouse_pos, self.cur_poly, self.filled_mode, |
496 self._draw_lines, self._start_pos, | 518 self._draw_lines, self._start_pos, |
497 self._move_point_mode, self._move_point, | 519 self._move_point_mode, self._move_poly_mode, |
498 self._zoom_factor, self) | 520 self._move_point, self._zoom_factor, self) |
499 if self._draw_objects: | 521 if self._draw_objects: |
500 for thing in self.level.drawables: | 522 for thing in self.level.drawables: |
501 if not isinstance(thing, ne.Enemy): | 523 if not isinstance(thing, ne.Enemy): |
502 thing.render(level_surface) | 524 thing.render(level_surface) |
503 if self._draw_enemies: | 525 if self._draw_enemies: |
525 self._parent.reset_lit_buttons() | 547 self._parent.reset_lit_buttons() |
526 self._draw_lines = True | 548 self._draw_lines = True |
527 self.filled_mode = False | 549 self.filled_mode = False |
528 self._start_pos = None | 550 self._start_pos = None |
529 self._move_point_mode = False | 551 self._move_point_mode = False |
552 self._move_poly_mode = False | |
530 | 553 |
531 def key_down(self, ev): | 554 def key_down(self, ev): |
532 if ev.key == pgl.K_LEFT: | 555 if ev.key == pgl.K_LEFT: |
533 self._move_view((-10, 0)) | 556 self._move_view((-10, 0)) |
534 elif ev.key == pgl.K_RIGHT: | 557 elif ev.key == pgl.K_RIGHT: |
546 elif ev.key == pgl.K_f: | 569 elif ev.key == pgl.K_f: |
547 self.set_filled() | 570 self.set_filled() |
548 elif ev.key == pgl.K_c: | 571 elif ev.key == pgl.K_c: |
549 self.close_poly() | 572 self.close_poly() |
550 | 573 |
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 | |
551 def set_move_mode(self): | 582 def set_move_mode(self): |
552 self._draw_lines = False | 583 self._draw_lines = False |
553 self._move_point_mode = True | 584 self._move_point_mode = True |
585 self._move_poly_mode = False | |
554 self.filled_mode = False | 586 self.filled_mode = False |
555 self._parent.reset_lit_buttons() | 587 self._parent.reset_lit_buttons() |
556 self._move_point = None | 588 self._move_point = None |
557 | 589 |
558 def set_filled(self): | 590 def set_filled(self): |
561 self.cur_poly = None | 593 self.cur_poly = None |
562 self._parent.reset_lit_buttons() | 594 self._parent.reset_lit_buttons() |
563 self.filled_mode = True | 595 self.filled_mode = True |
564 self._draw_lines = False | 596 self._draw_lines = False |
565 self._move_point_mode = False | 597 self._move_point_mode = False |
598 self._move_poly_mode = False | |
566 else: | 599 else: |
567 alert('Not all polygons closed, so not filling') | 600 alert('Not all polygons closed, so not filling') |
568 | 601 |
569 def mouse_move(self, ev): | 602 def mouse_move(self, ev): |
570 old_pos = self.mouse_pos | 603 old_pos = self.mouse_pos |
571 self.mouse_pos = ev.pos | 604 self.mouse_pos = ev.pos |
572 if old_pos != self.mouse_pos and (self.cur_poly or self._draw_lines | 605 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): | |
574 self.invalidate() | 608 self.invalidate() |
575 | 609 |
576 def mouse_drag(self, ev): | 610 def mouse_drag(self, ev): |
577 if self._mouse_drag: | 611 if self._mouse_drag: |
578 old_pos = self.mouse_pos | 612 old_pos = self.mouse_pos |
583 self.invalidate() | 617 self.invalidate() |
584 | 618 |
585 def mouse_down(self, ev): | 619 def mouse_down(self, ev): |
586 corrected_pos = self._level_coordinates(ev.pos) | 620 corrected_pos = self._level_coordinates(ev.pos) |
587 snapped_pos = self.snap_to_grid(corrected_pos) | 621 snapped_pos = self.snap_to_grid(corrected_pos) |
622 print self._move_poly_mode, ev.button, self._move_point | |
588 if self.sel_mode and ev.button == 1: | 623 if self.sel_mode and ev.button == 1: |
589 obj = self.level.find_obj_at_pos(corrected_pos) | 624 obj = self.level.find_obj_at_pos(corrected_pos) |
590 if obj is not None: | 625 if obj is not None: |
591 self._edit_selected(obj) | 626 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 | |
592 elif self._move_point_mode and ev.button == 1: | 637 elif self._move_point_mode and ev.button == 1: |
593 if self._move_point: | 638 if self._move_point: |
594 # Place the current point | 639 # Place the current point |
595 self.level.replace_vertex(self._move_point, snapped_pos) | 640 self.level.replace_vertex(self._move_point, snapped_pos) |
596 self._move_point = None | 641 self._move_point = None |
893 end_poly_but.rect = BUTTON_RECT.copy() | 938 end_poly_but.rect = BUTTON_RECT.copy() |
894 end_poly_but.rect.move_ip(MENU_LEFT, y) | 939 end_poly_but.rect.move_ip(MENU_LEFT, y) |
895 widgets.append(end_poly_but) | 940 widgets.append(end_poly_but) |
896 y += MENU_BUTTON_HEIGHT + MENU_PAD | 941 y += MENU_BUTTON_HEIGHT + MENU_PAD |
897 | 942 |
898 self.move_point_but = HighLightButton("Move Point", self, | 943 self.move_point_but = HighLightButton("Mv Point", self, |
899 action=self.move_point) | 944 action=self.move_point) |
900 self.move_point_but.rect = BUTTON_RECT.copy() | 945 self.move_point_but.rect = HALF_BUTTON_RECT.copy() |
901 self.move_point_but.rect.move_ip(MENU_LEFT, y) | 946 self.move_point_but.rect.move_ip(MENU_LEFT, y) |
902 widgets.append(self.move_point_but) | 947 widgets.append(self.move_point_but) |
903 self._light_buttons.append(self.move_point_but) | 948 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 | |
904 y += MENU_BUTTON_HEIGHT + MENU_PAD | 957 y += MENU_BUTTON_HEIGHT + MENU_PAD |
905 | 958 |
906 # grid size widgets | 959 # grid size widgets |
907 grid_size_label = GridSizeLabel( | 960 grid_size_label = GridSizeLabel( |
908 self.level_widget, width=BUTTON_RECT.width, | 961 self.level_widget, width=BUTTON_RECT.width, |
1137 self.level_widget.mouse_move(ev) | 1190 self.level_widget.mouse_move(ev) |
1138 | 1191 |
1139 def move_point(self): | 1192 def move_point(self): |
1140 self.level_widget.set_move_mode() | 1193 self.level_widget.set_move_mode() |
1141 self.move_point_but.highlight() | 1194 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() | |
1142 | 1199 |
1143 def draw(self, surface): | 1200 def draw(self, surface): |
1144 # Update checkbox state | 1201 # Update checkbox state |
1145 if self._menu_mode == 'drawing': | 1202 if self._menu_mode == 'drawing': |
1146 self.level_widget.set_objects(self.show_objs.value) | 1203 self.level_widget.set_objects(self.show_objs.value) |