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)