diff nagslang/game_object.py @ 63:7f038ee778ad

Put werewolf facing direction magic back.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 01 Sep 2013 19:18:12 +0200
parents 1d67a8c9861d
children a1b4d09e6f23
line wrap: on
line diff
--- a/nagslang/game_object.py	Sun Sep 01 18:57:35 2013 +0200
+++ b/nagslang/game_object.py	Sun Sep 01 19:18:12 2013 +0200
@@ -1,3 +1,4 @@
+import math
 
 
 class Physicser(object):
@@ -7,7 +8,10 @@
     def remove_from_space(self, space):
         raise NotImplementedError()
 
-    def render_position(self):
+    def render_position(self, surface):
+        raise NotImplementedError()
+
+    def render_angle(self):
         raise NotImplementedError()
 
 
@@ -21,6 +25,9 @@
     def render_position(self):
         return (0, 0)
 
+    def render_angle(self):
+        return 0
+
 
 class SingleShapePhysicser(Physicser):
     def __init__(self, shape):
@@ -36,27 +43,51 @@
         pos = self._shape.body.position
         import pymunk.pygame_util
         return pymunk.pygame_util.to_pygame(pos, surface)
-        return (int(pos.x), int(pos.y))
+
+    def render_angle(self):
+        return self._shape.body.angle
 
 
 class Renderer(object):
-    def render(self, surface, pos):
+    def render(self, surface, pos, angle):
         raise NotImplementedError()
 
 
+def image_pos(image, pos):
+    return (pos[0] - image.get_width() / 2,
+            pos[1] - image.get_height() / 2)
+
+
 class ImageRenderer(Renderer):
     def __init__(self, image):
         self._image = image
 
-    def render(self, surface, pos):
-        surface.blit(self._image, pos)
+    def render(self, surface, pos, angle):
+        surface.blit(self._image, image_pos(self._image, pos))
+
+
+class FacingImageRenderer(Renderer):
+    def __init__(self, left_image, right_image):
+        self._images = {
+            'left': left_image,
+            'right': right_image,
+        }
+
+    def get_image(self, angle):
+        if abs(angle) < math.pi / 2:
+            return self._images['right']
+        return self._images['left']
+
+    def render(self, surface, pos, angle):
+        image = self.get_image(angle)
+        surface.blit(image, image_pos(image, pos))
 
 
 class ShapeRenderer(Renderer):
     def __init__(self, shape):
         self._shape = shape
 
-    def render(self, surface, pos):
+    def render(self, surface, pos, angle):
         import pymunk.pygame_util
         pymunk.pygame_util.draw(surface, self._shape)
 
@@ -78,4 +109,5 @@
 
     def render(self, surface):
         return self.renderer.render(
-            surface, self.physicser.render_position(surface))
+            surface, self.physicser.render_position(surface),
+            self.physicser.render_angle())