Changeset 108:dde91f8c4335


Ignore:
Timestamp:
Sep 2, 2013, 11:59:11 AM (7 years ago)
Author:
Neil Muller <drnlmuller@…>
Branch:
default
rebase_source:
5d44933a75fc1bd538788884896e67f6a22efb86
Message:

Add fonts needed for Albowifying the editor

Location:
tools
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • tools/area_editor.py

    r99 r108  
    1818import pygame.locals as pgl
    1919
     20from albow.root import RootWidget
     21from albow.widget import Widget
     22from albow.controls import Button, Image
     23from albow.resource import get_font
     24
    2025sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
    2126
    2227from nagslang.constants import SCREEN, FPS
    2328from nagslang.level import Level, POLY_COLORS
     29
     30
     31# layout constants
     32MENU_WIDTH = 200
     33MENU_BUTTON_HEIGHT = 35
    2434
    2535
     
    95105        surface.blit(self._surface, (0, 0), surface_area)
    96106
    97 
    98 class Editor(object):
    99 
    100     def __init__(self, level, surface):
     107class LevelWidget(Widget):
     108
     109    def __init__(self, level):
     110        super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0,
     111            SCREEN[0], SCREEN[1]))
    101112        self.level = level
    102         self.surface = surface
    103113        self.pos = (0, 0)
     114        self.filled_mode = False
     115        self.mouse_pos = None
    104116        self.cur_poly = None
    105         self.mouse_pos = None
    106         self.filled_mode = False
    107 
    108     def move_view(self, offset):
     117
     118    def _level_coordinates(self, pos):
     119        # Move positions to level values
     120        if not pos:
     121            return (0, 0)
     122        return pos[0] + self.pos[0], pos[1] + self.pos[1]
     123
     124    def _move_view(self, offset):
    109125        new_pos = [self.pos[0] + offset[0], self.pos[1] + offset[1]]
    110126        if new_pos[0] < 0:
     
    118134        self.pos = tuple(new_pos)
    119135
    120     def draw(self):
     136
     137    def draw(self, surface):
    121138        if (self.cur_poly is not None and self.cur_poly in self.level.polygons
    122139                and len(self.level.polygons[self.cur_poly])):
     
    125142        else:
    126143            mouse_pos = None
    127         self.level.draw(self.surface, self.pos, mouse_pos,
    128                         self.cur_poly, self.filled_mode)
    129 
    130     def _level_coordinates(self, pos):
    131         # Move positions to level values
    132         if not pos:
    133             return (0, 0)
    134         return pos[0] + self.pos[0], pos[1] + self.pos[1]
    135 
    136     def run(self):
    137         pygame.key.set_repeat(100, 50)
    138         running = True
    139         clock = pygame.time.Clock()
    140         while running:
    141             for ev in pygame.event.get():
    142                 if ev.type == pgl.QUIT:
    143                     running = False
    144                 elif ev.type == pgl.KEYDOWN:
    145                     if ev.key == pgl.K_ESCAPE:
    146                         running = False
    147                     elif ev.key == pgl.K_LEFT:
    148                         self.move_view((-10, 0))
    149                     elif ev.key == pgl.K_RIGHT:
    150                         self.move_view((10, 0))
    151                     elif ev.key == pgl.K_UP:
    152                         self.move_view((0, -10))
    153                     elif ev.key == pgl.K_DOWN:
    154                         self.move_view((0, 10))
    155                     if ev.key == pgl.K_1:
    156                         self.cur_poly = 1
    157                         self.filled_mode = False
    158                     if ev.key == pgl.K_2:
    159                         self.cur_poly = 2
    160                         self.filled_mode = False
    161                     if ev.key == pgl.K_3:
    162                         self.cur_poly = 3
    163                         self.filled_mode = False
    164                     if ev.key == pgl.K_4:
    165                         self.cur_poly = 4
    166                         self.filled_mode = False
    167                     if ev.key == pgl.K_5:
    168                         self.cur_poly = 5
    169                         self.filled_mode = False
    170                     if ev.key == pgl.K_6:
    171                         self.cur_poly = 6
    172                         self.filled_mode = False
    173                     if ev.key == pgl.K_0:
    174                         self.cur_poly = None
    175                     if ev.key == pgl.K_d and self.cur_poly:
    176                         self.level.delete_point(self.cur_poly)
    177                     if ev.key == pgl.K_s:
    178                         level.save()
    179                     if ev.key == pgl.K_f:
    180                         if level.all_closed():
    181                             self.cur_poly = None
    182                             self.filled_mode = True
    183                         else:
    184                             print 'Not all polygons closed, so not filling'
    185                 elif ev.type == pgl.MOUSEBUTTONDOWN and self.cur_poly:
    186                     # Add a point
    187                     self.level.add_point(self.cur_poly,
    188                                          self._level_coordinates(ev.pos))
    189                 elif ev.type == pgl.MOUSEMOTION:
    190                     self.mouse_pos = ev.pos
    191             self.draw()
    192             pygame.display.flip()
    193             clock.tick(FPS)
     144        level.draw(surface, self.pos, self.mouse_pos, self.cur_poly,
     145                self.filled_mode)
     146
     147    def key_down(self, ev):
     148        if ev.key == pgl.K_LEFT:
     149            self._move_view((-10, 0))
     150        elif ev.key == pgl.K_RIGHT:
     151            self._move_view((10, 0))
     152        elif ev.key == pgl.K_UP:
     153            self._move_view((0, -10))
     154        elif ev.key == pgl.K_DOWN:
     155            self._move_view((0, 10))
     156        elif ev.key == pgl.K_1:
     157            self.cur_poly = 1
     158            self.filled_mode = False
     159        elif ev.key == pgl.K_2:
     160            self.cur_poly = 2
     161            self.filled_mode = False
     162        elif ev.key == pgl.K_3:
     163            self.cur_poly = 3
     164            self.filled_mode = False
     165        elif ev.key == pgl.K_4:
     166            self.cur_poly = 4
     167            self.filled_mode = False
     168        elif ev.key == pgl.K_5:
     169            self.cur_poly = 5
     170            self.filled_mode = False
     171        elif ev.key == pgl.K_6:
     172            self.cur_poly = 6
     173            self.filled_mode = False
     174        elif ev.key == pgl.K_0:
     175            self.cur_poly = None
     176        elif ev.key == pgl.K_d and self.cur_poly:
     177            self.level.delete_point(self.cur_poly)
     178        elif ev.key == pgl.K_s:
     179            level.save()
     180        elif ev.key == pgl.K_f:
     181            if level.all_closed():
     182                self.cur_poly = None
     183                self.filled_mode = True
     184            else:
     185                print 'Not all polygons closed, so not filling'
     186
     187
     188
     189class EditorApp(RootWidget):
     190
     191    def __init__(self, level, surface):
     192        super(EditorApp, self).__init__(surface)
     193        self.level = level
     194        self.level_widget = LevelWidget(self.level)
     195        self.add(self.level_widget)
     196
     197        quit_but = Button('Quit', action=self.quit)
     198        quit_but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH, MENU_BUTTON_HEIGHT)
     199        quit_but.rect.move_ip(SCREEN[0], 25)
     200        self.add(quit_but)
     201
     202        #        elif ev.type == pgl.MOUSEBUTTONDOWN and self.cur_poly:
     203        #            # Add a point
     204        #            self.level.add_point(self.cur_poly,
     205        #                                 self._level_coordinates(ev.pos))
     206        #        elif ev.type == pgl.MOUSEMOTION:
     207        #            self.mouse_pos = ev.pos
     208        #    self.draw()
     209        #    pygame.display.flip()
     210        #    clock.tick(FPS)
     211
     212    def key_down(self, ev):
     213        if ev.key == pgl.K_ESCAPE:
     214            self.quit()
     215        else:
     216            self.level_widget.key_down(ev)
    194217
    195218
     
    205228    pygame.display.init()
    206229    pygame.font.init()
    207     pygame.display.set_mode(SCREEN, pgl.SWSURFACE)
     230    pygame.display.set_mode((SCREEN[0] + MENU_WIDTH, SCREEN[1]),
     231            pgl.SWSURFACE)
    208232    pygame.display.set_caption('Nagslang Area Editor')
    209     editor = Editor(level, pygame.display.get_surface())
    210     editor.run()
     233    pygame.key.set_repeat(200, 100)
     234    app = EditorApp(level, pygame.display.get_surface())
     235    app.run()
Note: See TracChangeset for help on using the changeset viewer.