Changeset 108:dde91f8c4335
- Timestamp:
- 09/02/13 11:59:11 (8 years ago)
- Branch:
- default
- Phase:
- public
- Rebase:
- 35643434393333613735666331626435333837383838383438393665363766366132326566623836
- Location:
- tools
- Files:
-
- 2 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/area_editor.py
r99 r108 18 18 import pygame.locals as pgl 19 19 20 from albow.root import RootWidget 21 from albow.widget import Widget 22 from albow.controls import Button, Image 23 from albow.resource import get_font 24 20 25 sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 21 26 22 27 from nagslang.constants import SCREEN, FPS 23 28 from nagslang.level import Level, POLY_COLORS 29 30 31 # layout constants 32 MENU_WIDTH = 200 33 MENU_BUTTON_HEIGHT = 35 24 34 25 35 … … 95 105 surface.blit(self._surface, (0, 0), surface_area) 96 106 97 98 class Editor(object): 99 100 def __init__(self, level, surface): 107 class LevelWidget(Widget): 108 109 def __init__(self, level): 110 super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, 111 SCREEN[0], SCREEN[1])) 101 112 self.level = level 102 self.surface = surface103 113 self.pos = (0, 0) 114 self.filled_mode = False 115 self.mouse_pos = None 104 116 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): 109 125 new_pos = [self.pos[0] + offset[0], self.pos[1] + offset[1]] 110 126 if new_pos[0] < 0: … … 118 134 self.pos = tuple(new_pos) 119 135 120 def draw(self): 136 137 def draw(self, surface): 121 138 if (self.cur_poly is not None and self.cur_poly in self.level.polygons 122 139 and len(self.level.polygons[self.cur_poly])): … … 125 142 else: 126 143 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 189 class 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) 194 217 195 218 … … 205 228 pygame.display.init() 206 229 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) 208 232 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.