# HG changeset patch # User Neil Muller # Date 1378241603 -7200 # Node ID c291fd4b49bfecdb45c98de0023a1ed7f1962e20 # Parent 05c2c592ce2eb817fe776f15ede6015ff3dc8e84 Add showing objects to the level editor diff -r 05c2c592ce2e -r c291fd4b49bf tools/area_editor.py --- a/tools/area_editor.py Tue Sep 03 22:19:20 2013 +0200 +++ b/tools/area_editor.py Tue Sep 03 22:53:23 2013 +0200 @@ -26,8 +26,10 @@ from albow.controls import Button, Label, CheckBox from albow.dialogs import alert +from nagslang.options import parse_args from nagslang.constants import SCREEN from nagslang.level import Level, POLY_COLORS +from nagslang.enemies import Enemy # layout constants @@ -124,7 +126,7 @@ return True return False - def draw(self, surface, topleft, mouse_pos, mouse_poly, filled): + def draw(self, mouse_pos, mouse_poly, filled): self._draw_background(True) # Draw polygons as needed for the editor if filled: @@ -139,8 +141,7 @@ pygame.draw.line(self._surface, color, self.point_to_pygame(polygon[-1]), self.point_to_pygame(endpoint)) - surface_area = pygame.rect.Rect(topleft, SCREEN) - surface.blit(self._surface, (0, 0), surface_area) + return self._surface.copy() class LevelWidget(Widget): @@ -154,6 +155,8 @@ self.mouse_pos = None self.cur_poly = None self._mouse_drag = False + self._draw_objects = False + self._draw_enemies = False def _level_coordinates(self, pos): # Move positions to level values @@ -173,6 +176,16 @@ new_pos[1] = self.pos[1] self.pos = tuple(new_pos) + def set_objects(self, value): + if self._draw_objects != value: + self._draw_objects = value + self.invalidate() + + def set_enemies(self, value): + if self._draw_enemies != value: + self._draw_enemies = value + self.invalidate() + def draw(self, surface): if (self.cur_poly is not None and self.cur_poly in self.level.polygons and len(self.level.polygons[self.cur_poly])): @@ -180,8 +193,17 @@ mouse_pos = self._level_coordinates(self.mouse_pos) else: mouse_pos = None - level.draw(surface, self.pos, mouse_pos, self.cur_poly, - self.filled_mode) + level_surface = level.draw(mouse_pos, self.cur_poly, self.filled_mode) + if self._draw_objects: + for thing in self.level.drawables: + if not isinstance(thing, Enemy): + thing.render(level_surface) + if self._draw_enemies: + for thing in self.level.drawables: + if isinstance(thing, Enemy): + thing.render(level_surface) + surface_area = pygame.rect.Rect(self.pos, SCREEN) + surface.blit(level_surface, (0, 0), surface_area) def change_poly(self, new_poly): self.cur_poly = new_poly @@ -377,11 +399,19 @@ def mouse_move(self, ev): self.level_widget.mouse_move(ev) + def draw(self, surface): + # Update checkbox state + self.level_widget.set_objects(self.show_objs.value) + self.level_widget.set_enemies(self.show_enemies.value) + super(EditorApp, self).draw(surface) + if __name__ == "__main__": if len(sys.argv) not in [2, 4]: print 'Please supply a levelname or levelname and level size' sys.exit() + # Need to ensure we have defaults for rendering + parse_args([]) pygame.display.init() pygame.font.init() pygame.display.set_mode((SCREEN[0] + MENU_WIDTH, SCREEN[1]),