# HG changeset patch # User Jeremy Thurgood # Date 1378162211 -7200 # Node ID 0c9b0449485e3ddefbd395deec9be99beb7d5249 # Parent f80323140317d27c21ed9086b81ad92a6f15d7ad Consolidate image rendering stuff a bit. diff -r f80323140317 -r 0c9b0449485e nagslang/game_object.py --- 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