Mercurial > nagslang
comparison tools/area_editor.py @ 280:7bb6296024c4
Add current mode hints
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 05 Sep 2013 14:12:55 +0200 |
parents | 56e42c00da25 |
children | 78bc8c873f7f |
comparison
equal
deleted
inserted
replaced
279:9f68e22c1e58 | 280:7bb6296024c4 |
---|---|
329 return result | 329 return result |
330 | 330 |
331 | 331 |
332 class LevelWidget(Widget): | 332 class LevelWidget(Widget): |
333 | 333 |
334 def __init__(self, level): | 334 def __init__(self, level, parent): |
335 super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, | 335 super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, |
336 SCREEN[0], SCREEN[1])) | 336 SCREEN[0], SCREEN[1])) |
337 self.level = level | 337 self.level = level |
338 self.pos = (0, 0) | 338 self.pos = (0, 0) |
339 self.filled_mode = False | 339 self.filled_mode = False |
343 self._draw_objects = False | 343 self._draw_objects = False |
344 self._draw_enemies = False | 344 self._draw_enemies = False |
345 self._draw_lines = False | 345 self._draw_lines = False |
346 self.sel_mode = False | 346 self.sel_mode = False |
347 self._start_pos = None | 347 self._start_pos = None |
348 self._parent = parent | |
348 | 349 |
349 def _level_coordinates(self, pos): | 350 def _level_coordinates(self, pos): |
350 # Move positions to level values | 351 # Move positions to level values |
351 if not pos: | 352 if not pos: |
352 return (0, 0) | 353 return (0, 0) |
399 | 400 |
400 def change_poly(self, new_poly): | 401 def change_poly(self, new_poly): |
401 self.cur_poly = new_poly | 402 self.cur_poly = new_poly |
402 self._draw_lines = False | 403 self._draw_lines = False |
403 if self.cur_poly is not None: | 404 if self.cur_poly is not None: |
405 self._parent.reset_lit_buttons() | |
404 self.filled_mode = False | 406 self.filled_mode = False |
405 | 407 |
406 def line_mode(self): | 408 def line_mode(self): |
407 self.cur_poly = None | 409 self.cur_poly = None |
410 self._parent.reset_lit_buttons() | |
408 self._draw_lines = True | 411 self._draw_lines = True |
409 self.filled_mode = False | 412 self.filled_mode = False |
410 self._start_pos = None | 413 self._start_pos = None |
411 | 414 |
412 def key_down(self, ev): | 415 def key_down(self, ev): |
431 | 434 |
432 def set_filled(self): | 435 def set_filled(self): |
433 closed, _ = self.level.all_closed() | 436 closed, _ = self.level.all_closed() |
434 if closed: | 437 if closed: |
435 self.cur_poly = None | 438 self.cur_poly = None |
439 self._parent.reset_lit_buttons() | |
436 self.filled_mode = True | 440 self.filled_mode = True |
437 self._draw_lines = False | 441 self._draw_lines = False |
438 else: | 442 else: |
439 alert('Not all polygons closed, so not filling') | 443 alert('Not all polygons closed, so not filling') |
440 | 444 |
632 if new_cls is not None: | 636 if new_cls is not None: |
633 self.level.try_new_object(classname, self.level._game_objects, | 637 self.level.try_new_object(classname, self.level._game_objects, |
634 new_cls, None) | 638 new_cls, None) |
635 | 639 |
636 | 640 |
637 class PolyButton(Button): | 641 class HighLightButton(Button): |
642 """Button with highlight support""" | |
643 def __init__(self, text, parent, **kwds): | |
644 super(HighLightButton, self).__init__(text, **kwds) | |
645 self._parent = parent | |
646 | |
647 def highlight(self): | |
648 self.border_color = pygame.color.Color('red') | |
649 | |
650 def reset(self): | |
651 self.border_color = self.fg_color | |
652 | |
653 | |
654 class PolyButton(HighLightButton): | |
638 """Button for coosing the correct polygon""" | 655 """Button for coosing the correct polygon""" |
639 | 656 |
640 def __init__(self, index, level_widget): | 657 def __init__(self, index, level_widget, parent): |
641 if index is not None: | 658 if index is not None: |
642 text = "Draw: %s" % index | 659 text = "Draw: %s" % index |
643 else: | 660 else: |
644 text = 'Exit Draw Mode' | 661 text = 'Exit Draw Mode' |
645 super(PolyButton, self).__init__(text) | 662 super(PolyButton, self).__init__(text, parent) |
646 self.index = index | 663 self.index = index |
647 self.level_widget = level_widget | 664 self.level_widget = level_widget |
648 | 665 |
649 def action(self): | 666 def action(self): |
650 self.level_widget.change_poly(self.index) | 667 self.level_widget.change_poly(self.index) |
668 self._parent.reset_lit_buttons() | |
669 if self.index is not None: | |
670 self.highlight() | |
651 | 671 |
652 | 672 |
653 class EditorApp(RootWidget): | 673 class EditorApp(RootWidget): |
654 | 674 |
655 def __init__(self, level, surface): | 675 def __init__(self, level, surface): |
656 super(EditorApp, self).__init__(surface) | 676 super(EditorApp, self).__init__(surface) |
657 self.level = level | 677 self.level = level |
658 self.level_widget = LevelWidget(self.level) | 678 self.level_widget = LevelWidget(self.level, self) |
659 self.add(self.level_widget) | 679 self.add(self.level_widget) |
660 | 680 |
661 self._dMenus = {} | 681 self._dMenus = {} |
682 | |
683 self._light_buttons = [] | |
662 | 684 |
663 self._make_draw_menu() | 685 self._make_draw_menu() |
664 self._make_objects_menu() | 686 self._make_objects_menu() |
665 | 687 |
666 self._menu_mode = 'drawing' | 688 self._menu_mode = 'drawing' |
670 widgets = [] | 692 widgets = [] |
671 | 693 |
672 # Add poly buttons | 694 # Add poly buttons |
673 y = 15 | 695 y = 15 |
674 for poly in range(1, 7): | 696 for poly in range(1, 7): |
675 but = PolyButton(poly, self.level_widget) | 697 but = PolyButton(poly, self.level_widget, self) |
676 but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH // 2 - MENU_PAD, | 698 but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH // 2 - MENU_PAD, |
677 MENU_BUTTON_HEIGHT) | 699 MENU_BUTTON_HEIGHT) |
678 if poly % 2: | 700 if poly % 2: |
679 but.rect.move_ip(MENU_LEFT, y) | 701 but.rect.move_ip(MENU_LEFT, y) |
680 else: | 702 else: |
681 but.rect.move_ip(MENU_LEFT + MENU_WIDTH // 2 - MENU_HALF_PAD, | 703 but.rect.move_ip(MENU_LEFT + MENU_WIDTH // 2 - MENU_HALF_PAD, |
682 y) | 704 y) |
683 y += MENU_BUTTON_HEIGHT + MENU_PAD | 705 y += MENU_BUTTON_HEIGHT + MENU_PAD |
706 self._light_buttons.append(but) | |
684 widgets.append(but) | 707 widgets.append(but) |
685 | 708 |
686 end_poly_but = PolyButton(None, self.level_widget) | 709 end_poly_but = PolyButton(None, self.level_widget, self) |
687 end_poly_but.rect = BUTTON_RECT.copy() | 710 end_poly_but.rect = BUTTON_RECT.copy() |
688 end_poly_but.rect.move_ip(MENU_LEFT, y) | 711 end_poly_but.rect.move_ip(MENU_LEFT, y) |
689 widgets.append(end_poly_but) | 712 widgets.append(end_poly_but) |
690 y += MENU_BUTTON_HEIGHT + MENU_PAD | 713 y += MENU_BUTTON_HEIGHT + MENU_PAD |
691 | 714 |
692 draw_line = Button("Draw interior wall", self.level_widget.line_mode) | 715 self.draw_line_but = HighLightButton("Draw interior wall", self, |
693 draw_line.rect = BUTTON_RECT.copy() | 716 action=self.set_line_mode) |
694 draw_line.rect.move_ip(MENU_LEFT, y) | 717 self.draw_line_but.rect = BUTTON_RECT.copy() |
695 widgets.append(draw_line) | 718 self.draw_line_but.rect.move_ip(MENU_LEFT, y) |
719 widgets.append(self.draw_line_but) | |
720 self._light_buttons.append(self.draw_line_but) | |
696 y += MENU_BUTTON_HEIGHT + MENU_PAD | 721 y += MENU_BUTTON_HEIGHT + MENU_PAD |
697 | 722 |
698 fill_but = Button('Fill exterior', action=self.level_widget.set_filled) | 723 fill_but = Button('Fill exterior', action=self.level_widget.set_filled) |
699 fill_but.rect = BUTTON_RECT.copy() | 724 fill_but.rect = BUTTON_RECT.copy() |
700 fill_but.rect.move_ip(MENU_LEFT, y) | 725 fill_but.rect.move_ip(MENU_LEFT, y) |
788 add_enemy_but.rect.move_ip(MENU_LEFT, y) | 813 add_enemy_but.rect.move_ip(MENU_LEFT, y) |
789 widgets.append(add_enemy_but) | 814 widgets.append(add_enemy_but) |
790 y += MENU_BUTTON_HEIGHT + MENU_PAD | 815 y += MENU_BUTTON_HEIGHT + MENU_PAD |
791 | 816 |
792 y += MENU_PAD | 817 y += MENU_PAD |
793 sel_mode_but = Button('Select Object', | 818 self.sel_mode_but = HighLightButton('Select Object', self, |
794 action=self.sel_mode) | 819 action=self.sel_mode) |
795 sel_mode_but.rect = BUTTON_RECT.copy() | 820 self.sel_mode_but.rect = BUTTON_RECT.copy() |
796 sel_mode_but.rect.move_ip(MENU_LEFT, y) | 821 self.sel_mode_but.rect.move_ip(MENU_LEFT, y) |
797 widgets.append(sel_mode_but) | 822 widgets.append(self.sel_mode_but) |
823 self._light_buttons.append(self.sel_mode_but) | |
798 y += MENU_BUTTON_HEIGHT + MENU_PAD | 824 y += MENU_BUTTON_HEIGHT + MENU_PAD |
799 | 825 |
800 y += MENU_PAD | 826 y += MENU_PAD |
801 switch_but = Button('Switch to Drawing', action=self.switch_to_draw) | 827 switch_but = Button('Switch to Drawing', action=self.switch_to_draw) |
802 switch_but.rect = BUTTON_RECT.copy() | 828 switch_but.rect = BUTTON_RECT.copy() |
850 | 876 |
851 def _clear_menu(self): | 877 def _clear_menu(self): |
852 for widget in self._dMenus[self._menu_mode]: | 878 for widget in self._dMenus[self._menu_mode]: |
853 self.remove(widget) | 879 self.remove(widget) |
854 | 880 |
881 def reset_lit_buttons(self): | |
882 for but in self._light_buttons: | |
883 but.reset() | |
884 | |
855 def _populate_menu(self): | 885 def _populate_menu(self): |
856 self.level_widget.change_poly(None) | 886 self.level_widget.change_poly(None) |
857 self.level_widget.sel_mode = False | 887 self.level_widget.sel_mode = False |
858 for widget in self._dMenus[self._menu_mode]: | 888 for widget in self._dMenus[self._menu_mode]: |
859 self.add(widget) | 889 self.add(widget) |
860 self.invalidate() | 890 self.invalidate() |
861 | 891 |
892 def set_line_mode(self): | |
893 self.level_widget.line_mode() | |
894 self.draw_line_but.highlight() | |
895 | |
862 def sel_mode(self): | 896 def sel_mode(self): |
863 self.level_widget.sel_mode = not self.level_widget.sel_mode | 897 self.level_widget.sel_mode = not self.level_widget.sel_mode |
898 if self.level_widget.sel_mode: | |
899 self.sel_mode_but.highlight() | |
900 else: | |
901 self.sel_mode_but.reset() | |
864 | 902 |
865 def mouse_move(self, ev): | 903 def mouse_move(self, ev): |
866 self.level_widget.mouse_move(ev) | 904 self.level_widget.mouse_move(ev) |
867 | 905 |
868 def draw(self, surface): | 906 def draw(self, surface): |