Mercurial > nagslang
changeset 474:9775055ba2f0
Prettier bulkheads.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 07 Sep 2013 16:43:44 +0200 |
parents | d4237c4a493a |
children | 7f33228ff62a |
files | nagslang/game_object.py nagslang/render.py |
diffstat | 2 files changed, 34 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/nagslang/game_object.py Sat Sep 07 16:34:23 2013 +0200 +++ b/nagslang/game_object.py Sat Sep 07 16:43:44 2013 +0200 @@ -454,7 +454,7 @@ puzzler = puzzle.StateProxyPuzzler(key_state) super(Bulkhead, self).__init__( SingleShapePhysicser(space, self.shape), - render.ShapeStateRenderer(), + render.BulkheadRenderer(), puzzler, )
--- a/nagslang/render.py Sat Sep 07 16:34:23 2013 +0200 +++ b/nagslang/render.py Sat Sep 07 16:43:44 2013 +0200 @@ -6,7 +6,7 @@ import pymunk from nagslang.options import options -from nagslang.utils import tile_surface +from nagslang.utils import tile_surface, vec_from_angle from nagslang.widgets.text import LabelWidget, MultiLineWidget @@ -46,6 +46,38 @@ pass +class BulkheadRenderer(Renderer): + def _offset_point(self, vec, to_vec, length): + offset = vec_from_angle((to_vec - vec).angle, abs(length)) + if length < 0: + offset = -offset + return vec + offset + + def _to_pygame(self, surface, *points): + return [pymunk.pygame_util.to_pygame(p, surface) for p in points] + + def draw_bulkhead_line(self, surface, a, b): + ai = self._offset_point(a, b, 2) + bi = self._offset_point(b, a, 2) + a, b, ai, bi = self._to_pygame(surface, a, b, ai, bi) + pygame.draw.line( + surface, pygame.color.THECOLORS['black'], a, b, 8) + pygame.draw.line( + surface, pygame.color.THECOLORS['lightblue'], ai, bi, 6) + + def render(self, surface): + shape = self.game_object.get_shape() + if self.game_object.puzzler.get_state(): + ai = self._offset_point(shape.a, shape.b, 10) + bi = self._offset_point(shape.b, shape.a, 10) + self.draw_bulkhead_line(surface, shape.a, ai) + self.draw_bulkhead_line(surface, bi, shape.b) + else: + mid = shape.a + (shape.b - shape.a) / 2 + self.draw_bulkhead_line(surface, shape.a, mid) + self.draw_bulkhead_line(surface, mid, shape.b) + + def image_pos(image, pos): return (pos[0] - image.get_width() / 2, pos[1] - image.get_height() / 2)