comparison tools/area_editor.py @ 204:687459429550

Display interior walls and start working towards drawing them
author Neil Muller <drnlmuller@gmail.com>
date Tue, 03 Sep 2013 23:14:48 +0200
parents c291fd4b49bf
children 51f979ddddbb
comparison
equal deleted inserted replaced
203:917e721f170e 204:687459429550
26 from albow.controls import Button, Label, CheckBox 26 from albow.controls import Button, Label, CheckBox
27 from albow.dialogs import alert 27 from albow.dialogs import alert
28 28
29 from nagslang.options import parse_args 29 from nagslang.options import parse_args
30 from nagslang.constants import SCREEN 30 from nagslang.constants import SCREEN
31 from nagslang.level import Level, POLY_COLORS 31 from nagslang.level import Level, POLY_COLORS, LINE_COLOR
32 from nagslang.enemies import Enemy 32 from nagslang.enemies import Enemy
33 33
34 34
35 # layout constants 35 # layout constants
36 MENU_BUTTON_HEIGHT = 35 36 MENU_BUTTON_HEIGHT = 35
139 if index == mouse_poly and mouse_pos: 139 if index == mouse_poly and mouse_pos:
140 endpoint = self.fix_angle(index, mouse_pos) 140 endpoint = self.fix_angle(index, mouse_pos)
141 pygame.draw.line(self._surface, color, 141 pygame.draw.line(self._surface, color,
142 self.point_to_pygame(polygon[-1]), 142 self.point_to_pygame(polygon[-1]),
143 self.point_to_pygame(endpoint)) 143 self.point_to_pygame(endpoint))
144 for line in self.lines:
145 pointlist = [self.point_to_pygame(p) for p in line]
146 pygame.draw.lines(self._surface, LINE_COLOR, False, pointlist, 2)
144 return self._surface.copy() 147 return self._surface.copy()
145 148
146 149
147 class LevelWidget(Widget): 150 class LevelWidget(Widget):
148 151
155 self.mouse_pos = None 158 self.mouse_pos = None
156 self.cur_poly = None 159 self.cur_poly = None
157 self._mouse_drag = False 160 self._mouse_drag = False
158 self._draw_objects = False 161 self._draw_objects = False
159 self._draw_enemies = False 162 self._draw_enemies = False
163 self._draw_lines = False
160 164
161 def _level_coordinates(self, pos): 165 def _level_coordinates(self, pos):
162 # Move positions to level values 166 # Move positions to level values
163 if not pos: 167 if not pos:
164 return (0, 0) 168 return (0, 0)
205 surface_area = pygame.rect.Rect(self.pos, SCREEN) 209 surface_area = pygame.rect.Rect(self.pos, SCREEN)
206 surface.blit(level_surface, (0, 0), surface_area) 210 surface.blit(level_surface, (0, 0), surface_area)
207 211
208 def change_poly(self, new_poly): 212 def change_poly(self, new_poly):
209 self.cur_poly = new_poly 213 self.cur_poly = new_poly
214 self._draw_lines = False
210 if self.cur_poly is not None: 215 if self.cur_poly is not None:
211 self.filled_mode = False 216 self.filled_mode = False
217
218 def line_mode(self):
219 self.cur_poly = None
220 self._draw_lines = True
221 self.filled_mode = False
212 222
213 def key_down(self, ev): 223 def key_down(self, ev):
214 if ev.key == pgl.K_LEFT: 224 if ev.key == pgl.K_LEFT:
215 self._move_view((-10, 0)) 225 self._move_view((-10, 0))
216 elif ev.key == pgl.K_RIGHT: 226 elif ev.key == pgl.K_RIGHT:
233 def set_filled(self): 243 def set_filled(self):
234 closed, _ = self.level.all_closed() 244 closed, _ = self.level.all_closed()
235 if closed: 245 if closed:
236 self.cur_poly = None 246 self.cur_poly = None
237 self.filled_mode = True 247 self.filled_mode = True
248 self._draw_lines = False
238 else: 249 else:
239 alert('Not all polygons closed, so not filling') 250 alert('Not all polygons closed, so not filling')
240 251
241 def mouse_move(self, ev): 252 def mouse_move(self, ev):
242 old_pos = self.mouse_pos 253 old_pos = self.mouse_pos
253 self._move_view(diff) 264 self._move_view(diff)
254 self.invalidate() 265 self.invalidate()
255 266
256 def mouse_down(self, ev): 267 def mouse_down(self, ev):
257 if ev.button == 1: 268 if ev.button == 1:
258 print "Click: %r" % ( 269 if self._draw_lines:
259 self.level.point_to_pymunk(self._level_coordinates(ev.pos)),) 270 pass
271 else:
272 print "Click: %r" % (
273 self.level.point_to_pymunk(
274 self._level_coordinates(ev.pos)),)
260 if ev.button == 4: # Scroll up 275 if ev.button == 4: # Scroll up
261 self._move_view((0, -10)) 276 self._move_view((0, -10))
262 elif ev.button == 5: # Scroll down 277 elif ev.button == 5: # Scroll down
263 self._move_view((0, 10)) 278 self._move_view((0, 10))
264 elif ev.button == 6: # Scroll left 279 elif ev.button == 6: # Scroll left
331 346
332 end_poly_but = PolyButton(None, self.level_widget) 347 end_poly_but = PolyButton(None, self.level_widget)
333 end_poly_but.rect = button_rect.copy() 348 end_poly_but.rect = button_rect.copy()
334 end_poly_but.rect.move_ip(MENU_LEFT, y) 349 end_poly_but.rect.move_ip(MENU_LEFT, y)
335 self.add(end_poly_but) 350 self.add(end_poly_but)
351 y += MENU_BUTTON_HEIGHT + MENU_PAD
352
353 draw_line = Button("Draw interior wall", self.level_widget.line_mode)
354 draw_line.rect = button_rect.copy()
355 draw_line.rect.move_ip(MENU_LEFT, y)
356 self.add(draw_line)
336 y += MENU_BUTTON_HEIGHT + MENU_PAD 357 y += MENU_BUTTON_HEIGHT + MENU_PAD
337 358
338 fill_but = Button('Fill exterior', action=self.level_widget.set_filled) 359 fill_but = Button('Fill exterior', action=self.level_widget.set_filled)
339 fill_but.rect = button_rect.copy() 360 fill_but.rect = button_rect.copy()
340 fill_but.rect.move_ip(MENU_LEFT, y) 361 fill_but.rect.move_ip(MENU_LEFT, y)