diff nagslang/level.py @ 488:ae8eb7c0f7bb

Better wall and bulkhead drawing.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 07 Sep 2013 17:40:59 +0200
parents 69b8d6cbc692
children 7d8c6e7ffd2b
line wrap: on
line diff
--- a/nagslang/level.py	Sat Sep 07 17:38:50 2013 +0200
+++ b/nagslang/level.py	Sat Sep 07 17:40:59 2013 +0200
@@ -2,12 +2,14 @@
 
 import pygame
 import pygame.locals as pgl
+import pymunk
 
 from nagslang import collectable
 from nagslang import game_object as go
 from nagslang import enemies
 from nagslang import puzzle
-from nagslang.utils import tile_surface
+from nagslang.utils import (
+    tile_surface, points_to_pygame, extend_line, points_to_lines)
 from nagslang.resources import resources
 from nagslang.yamlish import load, dump
 
@@ -183,25 +185,33 @@
         self.basetile = new_tile
         self._tile_image = None
 
-    def point_to_pygame(self, pos):
-        # Convert a point from pymunk (which is what we store)
-        # to pygame for drawing
-        return (pos[0], self.y - pos[1])
-
     def get_walls(self):
         walls = self.polygons.values()
         walls.extend(self.lines)
         return walls
 
-    def _draw_walls(self):
+    def _draw_wall_line(self, points, width, colour, extend):
+        for line in points_to_lines(points):
+            if extend:
+                line = extend_line(
+                    pymunk.Vec2d(line[0]), pymunk.Vec2d(line[1]), extend)
+            line = points_to_pygame(self._surface, line)
+            pygame.draw.line(self._surface, colour, line[0], line[1], width)
+
+    def _draw_walls_lines(self, width, colour, extend):
         for index, polygon in self.polygons.items():
-            color = POLY_COLORS.get(index, pygame.color.THECOLORS['black'])
-            if len(polygon) > 1:
-                pointlist = [self.point_to_pygame(p) for p in polygon]
-                pygame.draw.lines(self._surface, color, False, pointlist, 2)
+            self._draw_wall_line(polygon, width, colour, extend)
         for line in self.lines:
-            pointlist = [self.point_to_pygame(p) for p in line]
-            pygame.draw.lines(self._surface, LINE_COLOR, False, pointlist, 2)
+            self._draw_wall_line(line, width, colour, extend)
+
+    def _draw_walls(self):
+        inner_colour = pygame.color.THECOLORS['red']
+        mid_colour = pygame.color.THECOLORS['orange']
+        outer_colour = pygame.color.THECOLORS['yellow']
+        self._draw_walls_lines(5, outer_colour, 0)
+        self._draw_walls_lines(3, outer_colour, 1)
+        self._draw_walls_lines(3, mid_colour, 0)
+        self._draw_walls_lines(1, inner_colour, 0)
 
     def get_background(self):
         if self._surface is None:
@@ -221,7 +231,7 @@
         surface.fill(black)
         for index, polygon in self.polygons.items():
             if len(polygon) > 1:
-                pointlist = [self.point_to_pygame(p) for p in polygon]
+                pointlist = points_to_pygame(self._surface, polygon)
                 # filled polygons
                 color = white
                 # If a polygon overlaps on of the existing polygons,