diff nagslang/game_object.py @ 126:c3af35561494

Cleaner switch/light rendering.
author Jeremy Thurgood <firxen@gmail.com>
date Mon, 02 Sep 2013 17:09:47 +0200
parents 23b533d6f27e
children 79e1888573d3
line wrap: on
line diff
--- a/nagslang/game_object.py	Mon Sep 02 16:57:31 2013 +0200
+++ b/nagslang/game_object.py	Mon Sep 02 17:09:47 2013 +0200
@@ -174,10 +174,20 @@
         super(FacingImageRenderer, self).render(surface)
 
 
-class ShapeRenderer(Renderer):
+class ShapeStateRenderer(Renderer):
+    """Renders the shape in a different colour depending on the state.
+
+    Requires the game object it's attached to to have a puzzler.
+    """
     def render(self, surface):
+        if self.game_object.puzzler.get_state():
+            color = pygame.color.THECOLORS['green']
+        else:
+            color = pygame.color.THECOLORS['red']
+
+        self.game_object.get_shape().color = color
         self._render_shape(surface)
-        super(ShapeRenderer, self).render(surface)
+        super(ShapeStateRenderer, self).render(surface)
 
 
 class GameObject(object):
@@ -222,17 +232,10 @@
         self.shape.sensor = True
         super(FloorSwitch, self).__init__(
             SingleShapePhysicser(space, self.shape),
-            ShapeRenderer(),
+            ShapeStateRenderer(),
             FloorSwitchPuzzler(),
         )
 
-    def render(self, surface):
-        if self.puzzler.get_state():
-            self.shape.color = pygame.color.THECOLORS['green']
-        else:
-            self.shape.color = pygame.color.THECOLORS['red']
-        super(FloorSwitch, self).render(surface)
-
 
 class FloorLight(GameObject):
     def __init__(self, space, position, state_source):
@@ -243,13 +246,6 @@
         self.shape.sensor = True
         super(FloorLight, self).__init__(
             SingleShapePhysicser(space, self.shape),
-            ShapeRenderer(),
+            ShapeStateRenderer(),
             StateProxyPuzzler(state_source),
         )
-
-    def render(self, surface):
-        if self.puzzler.get_state():
-            self.shape.color = pygame.color.THECOLORS['green']
-        else:
-            self.shape.color = pygame.color.THECOLORS['red']
-        super(FloorLight, self).render(surface)