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)