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