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