changeset 199:c291fd4b49bf

Add showing objects to the level editor
author Neil Muller <drnlmuller@gmail.com>
date Tue, 03 Sep 2013 22:53:23 +0200
parents 05c2c592ce2e
children dc0cc8228e2a
files tools/area_editor.py
diffstat 1 files changed, 35 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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]),