changeset 160:0c9b0449485e

Consolidate image rendering stuff a bit.
author Jeremy Thurgood <firxen@gmail.com>
date Tue, 03 Sep 2013 00:50:11 +0200
parents f80323140317
children 500c5a68607c
files nagslang/game_object.py
diffstat 1 files changed, 24 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/game_object.py	Tue Sep 03 00:10:54 2013 +0200
+++ b/nagslang/game_object.py	Tue Sep 03 00:50:11 2013 +0200
@@ -165,15 +165,24 @@
     def __init__(self, image):
         self._image = image
 
-    def render(self, surface):
-        pos = self.game_object.get_render_position(surface)
+    def get_image(self):
+        return self._image
+
+    def rotate_image(self, image):
         angle = self.game_object.get_render_angle() * 180 / math.pi
-        image = pygame.transform.rotate(self._image, angle)
+        return pygame.transform.rotate(image, angle)
+
+    def render_image(self, surface, image):
+        image = self.rotate_image(image)
+        pos = self.game_object.get_render_position(surface)
         surface.blit(image, image_pos(image, pos))
+
+    def render(self, surface):
+        self.render_image(surface, self.get_image())
         super(ImageRenderer, self).render(surface)
 
 
-class FacingImageRenderer(Renderer):
+class FacingImageRenderer(ImageRenderer):
     def __init__(self, left_image, right_image):
         self._images = {
             'left': left_image,
@@ -187,15 +196,17 @@
         elif abs(angle) > math.pi / 2:
             self._face = 'left'
 
-    def get_image(self, angle):
-        self._update_facing(angle)
+    def rotate_image(self, image):
+        # Facing images don't get rotated.
+        return image
+
+    def get_facing_image(self):
         return self._images[self._face]
 
-    def render(self, surface):
-        pos = self.game_object.get_render_position(surface)
-        image = self.get_image(self.game_object.get_render_angle())
-        surface.blit(image, image_pos(image, pos))
-        super(FacingImageRenderer, self).render(surface)
+    def get_image(self):
+        angle = self.game_object.get_render_angle()
+        self._update_facing(angle)
+        return self.get_facing_image()
 
 
 class AnimatedFacingImageRenderer(FacingImageRenderer):
@@ -208,18 +219,11 @@
         self._moving = False
         self._face = 'left'
 
-    def get_image(self, angle):
-        self._update_facing(angle)
+    def get_facing_image(self):
         if self._frame >= len(self._images[self._face]):
             self._frame = 0
         return self._images[self._face][self._frame]
 
-    def render(self, surface):
-        pos = self.game_object.get_render_position(surface)
-        image = self.get_image(self.game_object.get_render_angle())
-        surface.blit(image, image_pos(image, pos))
-        super(FacingImageRenderer, self).render(surface)
-
     def animate(self):
         if self._moving:
             self._frame += 1
@@ -240,15 +244,11 @@
         self._frame = 0
         self._image = None
 
-    def _get_image(self):
+    def get_image(self):
         if self._frame > len(self._imaages):
             self._frame = 0
         return self._images[self._frame]
 
-    def render(self, surface):
-        self._image = self._get_image()
-        super(TimedAnimatedRenderer, self).render(surface)
-
     def animate(self):
         self._frame += 1