Mercurial > nagslang
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) |