diff nagslang/level.py @ 95:ecba9550ad8d

Fill the exterior with the blackness of space
author Neil Muller <drnlmuller@gmail.com>
date Mon, 02 Sep 2013 11:20:04 +0200
parents 79748a884eb5
children 93256a0987a2
line wrap: on
line diff
--- a/nagslang/level.py	Mon Sep 02 11:20:17 2013 +0200
+++ b/nagslang/level.py	Mon Sep 02 11:20:04 2013 +0200
@@ -24,6 +24,7 @@
         self.basetile = 'tiles/floor.png'
         self._tile_image = None
         self._surface = None
+        self._exterior = False
 
     def load(self):
 
@@ -62,7 +63,8 @@
         if index:
             add_polygon(polygon, index, num_points)
 
-    def save(self):
+    def all_closed(self):
+        """Check if all the polygons are closed"""
         closed = True
         for poly in self.polygons.values():
             if len(poly) == 0:
@@ -74,6 +76,10 @@
             elif poly[-1] != poly[0]:
                 closed = False
                 print "\033[31mError: polygon not closed\033[0m"
+        return closed
+
+    def save(self):
+        closed = self.all_closed()
         if not closed:
             print 'Not saving the level'
             return
@@ -113,10 +119,26 @@
 
     def get_background(self):
         self._draw_background()
+        self._draw_exterior()
         # Draw polygons
         self._draw_walls()
         return self._surface
 
+    def _draw_exterior(self, force=False):
+        """Fill the exterior of the level with black"""
+        if self._exterior and not force:
+            return
+        surface = pygame.surface.Surface((self.x, self.y), pgl.SRCALPHA)
+        surface.fill(pygame.color.THECOLORS["black"])
+        for index, polygon in self.polygons.items():
+            if len(polygon) > 1:
+                pointlist = [self.point_to_pygame(p) for p in polygon]
+                # filled polygons
+                pygame.draw.polygon(surface, pygame.color.THECOLORS['white'],
+                        pointlist, 0)
+        self._surface.blit(surface, (0, 0), special_flags=pgl.BLEND_RGBA_MULT)
+        self._exterior = True
+
     def _draw_background(self, force=False):
         if self._tile_image is None:
             self._tile_image = resources.get_image(self.basetile)