Mercurial > nagslang
annotate 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 |
rev | line source |
---|---|
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
1 import math |
62 | 2 |
59 | 3 |
4 class Physicser(object): | |
5 def add_to_space(self, space): | |
6 raise NotImplementedError() | |
7 | |
8 def remove_from_space(self, space): | |
9 raise NotImplementedError() | |
10 | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
11 def render_position(self, surface): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
12 raise NotImplementedError() |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
13 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
14 def render_angle(self): |
59 | 15 raise NotImplementedError() |
16 | |
17 | |
18 class NullPhysicser(Physicser): | |
19 def add_to_space(self, space): | |
20 pass | |
21 | |
22 def remove_from_space(self, space): | |
23 pass | |
24 | |
25 def render_position(self): | |
26 return (0, 0) | |
27 | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
28 def render_angle(self): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
29 return 0 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
30 |
59 | 31 |
32 class SingleShapePhysicser(Physicser): | |
33 def __init__(self, shape): | |
34 self._shape = shape | |
35 | |
36 def add_to_space(self, space): | |
37 space.add(self._shape, self._shape.body) | |
38 | |
39 def remove_from_space(self, space): | |
40 space.remove(self._shape, self._shape.body) | |
41 | |
42 def render_position(self, surface): | |
43 pos = self._shape.body.position | |
44 import pymunk.pygame_util | |
45 return pymunk.pygame_util.to_pygame(pos, surface) | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
46 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
47 def render_angle(self): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
48 return self._shape.body.angle |
59 | 49 |
50 | |
51 class Renderer(object): | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
52 def render(self, surface, pos, angle): |
59 | 53 raise NotImplementedError() |
54 | |
55 | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
56 def image_pos(image, pos): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
57 return (pos[0] - image.get_width() / 2, |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
58 pos[1] - image.get_height() / 2) |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
59 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
60 |
59 | 61 class ImageRenderer(Renderer): |
62 def __init__(self, image): | |
63 self._image = image | |
64 | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
65 def render(self, surface, pos, angle): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
66 surface.blit(self._image, image_pos(self._image, pos)) |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
67 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
68 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
69 class FacingImageRenderer(Renderer): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
70 def __init__(self, left_image, right_image): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
71 self._images = { |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
72 'left': left_image, |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
73 'right': right_image, |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
74 } |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
75 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
76 def get_image(self, angle): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
77 if abs(angle) < math.pi / 2: |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
78 return self._images['right'] |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
79 return self._images['left'] |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
80 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
81 def render(self, surface, pos, angle): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
82 image = self.get_image(angle) |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
83 surface.blit(image, image_pos(image, pos)) |
59 | 84 |
85 | |
86 class ShapeRenderer(Renderer): | |
87 def __init__(self, shape): | |
88 self._shape = shape | |
89 | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
90 def render(self, surface, pos, angle): |
59 | 91 import pymunk.pygame_util |
92 pymunk.pygame_util.draw(surface, self._shape) | |
93 | |
94 | |
95 class GameObject(object): | |
96 """A representation of a thing in the game world. | |
97 | |
98 This has a rendery thing, physicsy things and maybe some other things. | |
99 """ | |
100 | |
101 def __init__(self, renderer, physicser=None): | |
102 self.renderer = renderer | |
103 if physicser is None: | |
104 physicser = NullPhysicser() | |
105 self.physicser = physicser | |
106 | |
107 def add_to_space(self, space): | |
108 self.physicser.add_to_space(space) | |
109 | |
110 def render(self, surface): | |
60 | 111 return self.renderer.render( |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
112 surface, self.physicser.render_position(surface), |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
113 self.physicser.render_angle()) |