# HG changeset patch # User Jeremy Thurgood # Date 1378565024 -7200 # Node ID 9775055ba2f0241990f1da8c371ff6000d4f7d8f # Parent d4237c4a493af22a40e33e103a41047e5d858d58 Prettier bulkheads. diff -r d4237c4a493a -r 9775055ba2f0 nagslang/game_object.py --- 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, ) diff -r d4237c4a493a -r 9775055ba2f0 nagslang/render.py --- 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)