# HG changeset patch # User Jeremy Thurgood # Date 1378055892 -7200 # Node ID 7f038ee778ada8ded049fd0fa97f76482264fb8c # Parent 1d67a8c9861d41b9a3070a819a429afbba0fb075 Put werewolf facing direction magic back. diff -r 1d67a8c9861d -r 7f038ee778ad nagslang/game_object.py --- 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()) diff -r 1d67a8c9861d -r 7f038ee778ad nagslang/screens/area.py --- a/nagslang/screens/area.py Sun Sep 01 18:57:35 2013 +0200 +++ b/nagslang/screens/area.py Sun Sep 01 19:18:12 2013 +0200 @@ -6,7 +6,7 @@ import pymunk.pygame_util from nagslang.game_object import ( - GameObject, SingleShapePhysicser, ImageRenderer) + GameObject, SingleShapePhysicser, FacingImageRenderer) from nagslang.screens.base import Screen from nagslang.level import Level from nagslang.events import ScreenChange @@ -42,7 +42,10 @@ self.shape.friction = 10.0 super(Protagonist, self).__init__( - ImageRenderer(resources.get_image('creatures', 'werewolf_1.png')), + FacingImageRenderer( + resources.get_image('creatures', 'werewolf_1.png'), + resources.get_image( + 'creatures', 'werewolf_1.png', transforms=(FLIP_H,))), SingleShapePhysicser(self.shape)) self.go_human() @@ -50,20 +53,6 @@ def velocity_func(self, body, gravity, damping, dt): return pymunk.Body.update_velocity(body, gravity, self.damping, dt) - def render_TODO(self, surface): - if self.werewolf: - pos = pymunk.pygame_util.to_pygame(self.body.position, surface) - transforms = () - if abs(self.body.angle) < math.pi / 2: - transforms = (FLIP_H,) - - wolf = resources.get_image('creatures', 'werewolf_1.png', - transforms=transforms) - surface.blit(wolf, (pos[0] - wolf.get_width() / 2, - pos[1] - wolf.get_height() / 2)) - else: - pymunk.pygame_util.draw(surface, self.shape) - def go_werewolf(self): self.werewolf = True self.body.mass = 100