comparison tools/area_editor.py @ 413:c5a3ed165df9

Partial zoom support
author Neil Muller <drnlmuller@gmail.com>
date Sat, 07 Sep 2013 12:43:31 +0200
parents ddff1f8668d5
children 060420389033
comparison
equal deleted inserted replaced
412:23e751f26f81 413:c5a3ed165df9
453 self.sel_mode = False 453 self.sel_mode = False
454 self._start_pos = None 454 self._start_pos = None
455 self._parent = parent 455 self._parent = parent
456 self._move_point_mode = False 456 self._move_point_mode = False
457 self._move_point = False 457 self._move_point = False
458 self._zoom_factor = 1.0
458 459
459 def _level_coordinates(self, pos): 460 def _level_coordinates(self, pos):
460 # Move positions to level values 461 # Move positions to level values
461 if not pos: 462 if not pos:
462 return (0, 0) 463 return (0, 0)
463 return pos[0] + self.pos[0], pos[1] + self.pos[1] 464 # Apply zoom_factor
465 zoomed = (pos[0] * self._zoom_factor, pos[1] * self._zoom_factor)
466 return zoomed[0] + self.pos[0], zoomed[1] + self.pos[1]
464 467
465 def _move_view(self, offset): 468 def _move_view(self, offset):
466 new_pos = [self.pos[0] + offset[0], self.pos[1] + offset[1]] 469 new_pos = [self.pos[0] + offset[0], self.pos[1] + offset[1]]
467 if new_pos[0] < 0: 470 if new_pos[0] < 0:
468 new_pos[0] = self.pos[0] 471 new_pos[0] = self.pos[0]
481 484
482 def set_enemies(self, value): 485 def set_enemies(self, value):
483 if self._draw_enemies != value: 486 if self._draw_enemies != value:
484 self._draw_enemies = value 487 self._draw_enemies = value
485 self.invalidate() 488 self.invalidate()
489
490 def zoom_out(self):
491 self._zoom_factor = self._zoom_factor * 2.0
492 if self._zoom_factor > 8:
493 self._zoom_factor = 8
494
495 def zoom_in(self):
496 self._zoom_factor = self._zoom_factor // 2.0
497 if self._zoom_factor < 1:
498 self._zoom_factor = 1
486 499
487 def draw(self, surface): 500 def draw(self, surface):
488 if (self.cur_poly is not None and self.cur_poly in self.level.polygons 501 if (self.cur_poly is not None and self.cur_poly in self.level.polygons
489 and len(self.level.polygons[self.cur_poly])): 502 and len(self.level.polygons[self.cur_poly])):
490 # We have an active polygon 503 # We have an active polygon
506 if self._draw_enemies: 519 if self._draw_enemies:
507 for thing in self.level.drawables: 520 for thing in self.level.drawables:
508 if isinstance(thing, ne.Enemy): 521 if isinstance(thing, ne.Enemy):
509 thing.render(level_surface) 522 thing.render(level_surface)
510 surface_area = pygame.rect.Rect(self.pos, SCREEN) 523 surface_area = pygame.rect.Rect(self.pos, SCREEN)
511 surface.blit(level_surface, (0, 0), surface_area) 524 zoomed_surface = level_surface.copy()
525 zoomed_surface = pygame.transform.scale(
526 level_surface,
527 (int(level_surface.get_width() / self._zoom_factor),
528 int(level_surface.get_height() / self._zoom_factor)))
529 surface.blit(zoomed_surface, (0, 0), surface_area)
512 530
513 def change_poly(self, new_poly): 531 def change_poly(self, new_poly):
514 self.cur_poly = new_poly 532 self.cur_poly = new_poly
515 self._draw_lines = False 533 self._draw_lines = False
516 if self.cur_poly is not None: 534 if self.cur_poly is not None:
592 self._move_point = None 610 self._move_point = None
593 self.invalidate() 611 self.invalidate()
594 else: 612 else:
595 # find the current point 613 # find the current point
596 self._move_point = self.level.find_vertex(corrected_pos) 614 self._move_point = self.level.find_vertex(corrected_pos)
597 elif self.cur_poly and ev.button == 1:
598 # Add a point
599 self.level.add_point(self.cur_poly,
600 self._level_coordinates(corrected_pos))
601 elif ev.button == 1: 615 elif ev.button == 1:
602 if self._draw_lines: 616 if self._draw_lines:
603 if self._start_pos is None: 617 if self._start_pos is None:
604 self._start_pos = ev.pos 618 self._start_pos = ev.pos
605 else: 619 else:
615 self._move_view((0, 10)) 629 self._move_view((0, 10))
616 elif ev.button == 6: # Scroll left 630 elif ev.button == 6: # Scroll left
617 self._move_view((-10, 0)) 631 self._move_view((-10, 0))
618 elif ev.button == 7: # Scroll right 632 elif ev.button == 7: # Scroll right
619 self._move_view((10, 0)) 633 self._move_view((10, 0))
634 elif self.cur_poly and ev.button == 1:
635 # Add a point
636 self.level.add_point(self.cur_poly,
637 self._level_coordinates(ev.pos))
620 elif ev.button == 3: 638 elif ev.button == 3:
621 self._mouse_drag = True 639 self._mouse_drag = True
622 640
623 def mouse_up(self, ev): 641 def mouse_up(self, ev):
624 if ev.button == 3: 642 if ev.button == 3:
831 self._make_objects_menu() 849 self._make_objects_menu()
832 850
833 self._menu_mode = 'drawing' 851 self._menu_mode = 'drawing'
834 self._populate_menu() 852 self._populate_menu()
835 853
854 self._zoom = 1
855
836 def _make_draw_menu(self): 856 def _make_draw_menu(self):
837 widgets = [] 857 widgets = []
838 858
839 # Add poly buttons 859 # Add poly buttons
840 y = 15 860 y = 15
915 save_but = Button('Save Level', action=self.save) 935 save_but = Button('Save Level', action=self.save)
916 save_but.rect = BUTTON_RECT.copy() 936 save_but.rect = BUTTON_RECT.copy()
917 save_but.rect.move_ip(MENU_LEFT, y) 937 save_but.rect.move_ip(MENU_LEFT, y)
918 widgets.append(save_but) 938 widgets.append(save_but)
919 y += MENU_BUTTON_HEIGHT + MENU_PAD 939 y += MENU_BUTTON_HEIGHT + MENU_PAD
940
941 zoom_out = Button('Zoom out', action=self.level_widget.zoom_out)
942 zoom_out.rect = BUTTON_RECT.copy()
943 zoom_out.rect.move_ip(MENU_LEFT, y)
944 widgets.append(zoom_out)
945 y += MENU_BUTTON_HEIGHT + MENU_PAD
946
947 zoom_in = Button('Zoom in', action=self.level_widget.zoom_in)
948 zoom_in.rect = BUTTON_RECT.copy()
949 zoom_in.rect.move_ip(MENU_LEFT, y)
950 widgets.append(zoom_in)
920 951
921 y = SCREEN[1] - MENU_BUTTON_HEIGHT - MENU_PAD 952 y = SCREEN[1] - MENU_BUTTON_HEIGHT - MENU_PAD
922 quit_but = Button('Quit', action=self.quit) 953 quit_but = Button('Quit', action=self.quit)
923 quit_but.rect = BUTTON_RECT.copy() 954 quit_but.rect = BUTTON_RECT.copy()
924 quit_but.rect.move_ip(MENU_LEFT, y) 955 quit_but.rect.move_ip(MENU_LEFT, y)