comparison 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
comparison
equal deleted inserted replaced
62:1d67a8c9861d 63:7f038ee778ad
1 import math
1 2
2 3
3 class Physicser(object): 4 class Physicser(object):
4 def add_to_space(self, space): 5 def add_to_space(self, space):
5 raise NotImplementedError() 6 raise NotImplementedError()
6 7
7 def remove_from_space(self, space): 8 def remove_from_space(self, space):
8 raise NotImplementedError() 9 raise NotImplementedError()
9 10
10 def render_position(self): 11 def render_position(self, surface):
12 raise NotImplementedError()
13
14 def render_angle(self):
11 raise NotImplementedError() 15 raise NotImplementedError()
12 16
13 17
14 class NullPhysicser(Physicser): 18 class NullPhysicser(Physicser):
15 def add_to_space(self, space): 19 def add_to_space(self, space):
18 def remove_from_space(self, space): 22 def remove_from_space(self, space):
19 pass 23 pass
20 24
21 def render_position(self): 25 def render_position(self):
22 return (0, 0) 26 return (0, 0)
27
28 def render_angle(self):
29 return 0
23 30
24 31
25 class SingleShapePhysicser(Physicser): 32 class SingleShapePhysicser(Physicser):
26 def __init__(self, shape): 33 def __init__(self, shape):
27 self._shape = shape 34 self._shape = shape
34 41
35 def render_position(self, surface): 42 def render_position(self, surface):
36 pos = self._shape.body.position 43 pos = self._shape.body.position
37 import pymunk.pygame_util 44 import pymunk.pygame_util
38 return pymunk.pygame_util.to_pygame(pos, surface) 45 return pymunk.pygame_util.to_pygame(pos, surface)
39 return (int(pos.x), int(pos.y)) 46
47 def render_angle(self):
48 return self._shape.body.angle
40 49
41 50
42 class Renderer(object): 51 class Renderer(object):
43 def render(self, surface, pos): 52 def render(self, surface, pos, angle):
44 raise NotImplementedError() 53 raise NotImplementedError()
54
55
56 def image_pos(image, pos):
57 return (pos[0] - image.get_width() / 2,
58 pos[1] - image.get_height() / 2)
45 59
46 60
47 class ImageRenderer(Renderer): 61 class ImageRenderer(Renderer):
48 def __init__(self, image): 62 def __init__(self, image):
49 self._image = image 63 self._image = image
50 64
51 def render(self, surface, pos): 65 def render(self, surface, pos, angle):
52 surface.blit(self._image, pos) 66 surface.blit(self._image, image_pos(self._image, pos))
67
68
69 class FacingImageRenderer(Renderer):
70 def __init__(self, left_image, right_image):
71 self._images = {
72 'left': left_image,
73 'right': right_image,
74 }
75
76 def get_image(self, angle):
77 if abs(angle) < math.pi / 2:
78 return self._images['right']
79 return self._images['left']
80
81 def render(self, surface, pos, angle):
82 image = self.get_image(angle)
83 surface.blit(image, image_pos(image, pos))
53 84
54 85
55 class ShapeRenderer(Renderer): 86 class ShapeRenderer(Renderer):
56 def __init__(self, shape): 87 def __init__(self, shape):
57 self._shape = shape 88 self._shape = shape
58 89
59 def render(self, surface, pos): 90 def render(self, surface, pos, angle):
60 import pymunk.pygame_util 91 import pymunk.pygame_util
61 pymunk.pygame_util.draw(surface, self._shape) 92 pymunk.pygame_util.draw(surface, self._shape)
62 93
63 94
64 class GameObject(object): 95 class GameObject(object):
76 def add_to_space(self, space): 107 def add_to_space(self, space):
77 self.physicser.add_to_space(space) 108 self.physicser.add_to_space(space)
78 109
79 def render(self, surface): 110 def render(self, surface):
80 return self.renderer.render( 111 return self.renderer.render(
81 surface, self.physicser.render_position(surface)) 112 surface, self.physicser.render_position(surface),
113 self.physicser.render_angle())