Mercurial > nagslang
view 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 source
import math class Physicser(object): def add_to_space(self, space): raise NotImplementedError() def remove_from_space(self, space): raise NotImplementedError() def render_position(self, surface): raise NotImplementedError() def render_angle(self): raise NotImplementedError() class NullPhysicser(Physicser): def add_to_space(self, space): pass def remove_from_space(self, space): pass def render_position(self): return (0, 0) def render_angle(self): return 0 class SingleShapePhysicser(Physicser): def __init__(self, shape): self._shape = shape def add_to_space(self, space): space.add(self._shape, self._shape.body) def remove_from_space(self, space): space.remove(self._shape, self._shape.body) def render_position(self, surface): pos = self._shape.body.position import pymunk.pygame_util return pymunk.pygame_util.to_pygame(pos, surface) def render_angle(self): return self._shape.body.angle class Renderer(object): 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, 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, angle): import pymunk.pygame_util pymunk.pygame_util.draw(surface, self._shape) class GameObject(object): """A representation of a thing in the game world. This has a rendery thing, physicsy things and maybe some other things. """ def __init__(self, renderer, physicser=None): self.renderer = renderer if physicser is None: physicser = NullPhysicser() self.physicser = physicser def add_to_space(self, space): self.physicser.add_to_space(space) def render(self, surface): return self.renderer.render( surface, self.physicser.render_position(surface), self.physicser.render_angle())