Mercurial > nagslang
annotate nagslang/game_object.py @ 104:1be3eebb87c4
More consistent debug rendering.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Mon, 02 Sep 2013 13:21:53 +0200 |
parents | d6a49f0c1e6e |
children | bce9cd8a4a8c |
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 |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
3 import pygame |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
4 import pymunk |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
5 import pymunk.pygame_util |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
6 |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
7 from nagslang.constants import SWITCH_PUSHERS, COLLISION_TYPE_SWITCH |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
8 from nagslang.options import options |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
9 |
82 | 10 |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
11 class Puzzler(object): |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
12 def get_state(self, space): |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
13 raise NotImplementedError() |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
14 |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
15 def notify(self): |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
16 pass |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
17 |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
18 |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
19 class FloorSwitchPuzzler(Puzzler): |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
20 def __init__(self, space, shape): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
21 self._space = space |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
22 self._shape = shape |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
23 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
24 def get_state(self): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
25 for shape in self._space.shape_query(self._shape): |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
26 if shape.collision_type in SWITCH_PUSHERS: |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
27 return True |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
28 return False |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
29 |
59 | 30 |
31 class Physicser(object): | |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
32 def __init__(self, space): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
33 self.space = space |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
34 |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
35 def add_to_space(self): |
59 | 36 raise NotImplementedError() |
37 | |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
38 def remove_from_space(self): |
59 | 39 raise NotImplementedError() |
40 | |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
41 def get_render_position(self, surface): |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
42 raise NotImplementedError() |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
43 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
44 def get_angle(self): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
45 raise NotImplementedError() |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
46 |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
47 def apply_impulse(self, j, r=(0, 0)): |
59 | 48 raise NotImplementedError() |
49 | |
50 | |
51 class SingleShapePhysicser(Physicser): | |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
52 def __init__(self, space, shape): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
53 super(SingleShapePhysicser, self).__init__(space) |
59 | 54 self._shape = shape |
55 | |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
56 def add_to_space(self): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
57 self.space.add(self._shape) |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
58 if not self._shape.body.is_static: |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
59 self.space.add(self._shape.body) |
59 | 60 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
61 def remove_from_space(self): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
62 self.space.remove(self._shape) |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
63 if not self._shape.body.is_static: |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
64 self.space.remove(self._shape.body) |
59 | 65 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
66 def get_render_position(self, surface): |
59 | 67 pos = self._shape.body.position |
68 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
|
69 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
70 def get_angle(self): |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
71 return self._shape.body.angle |
59 | 72 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
73 def apply_impulse(self, j, r=(0, 0)): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
74 return self._shape.body.apply_impulse(j, r) |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
75 |
59 | 76 |
77 class Renderer(object): | |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
78 def __init__(self, shape): |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
79 self._shape = shape |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
80 |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
81 def _render_shape(self, surface, pos, angle): |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
82 # Less general that pymunk.pygame_util.draw, but also a lot less noisy. |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
83 color = getattr( |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
84 self._shape, 'color', pygame.color.THECOLORS['lightblue']) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
85 # We only explicitly draw Circle and Poly shapes. Everything else we |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
86 # forward to pymunk. |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
87 if isinstance(self._shape, pymunk.Circle): |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
88 centre = pymunk.pygame_util.to_pygame( |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
89 self._shape.body.position, surface) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
90 radius = int(self._shape.radius) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
91 pygame.draw.circle(surface, color, centre, radius, 2) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
92 elif isinstance(self._shape, pymunk.Poly): |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
93 # polygon bounding box |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
94 points = [pymunk.pygame_util.to_pygame(p, surface) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
95 for p in self._shape.get_vertices()] |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
96 pygame.draw.lines(surface, color, True, points, 2) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
97 else: |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
98 pymunk.pygame_util.draw(surface, self._shape) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
99 |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
100 def render(self, surface, pos, angle): |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
101 if options.debug: |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
102 self._render_shape(surface, pos, angle) |
59 | 103 |
104 | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
105 def image_pos(image, pos): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
106 return (pos[0] - image.get_width() / 2, |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
107 pos[1] - image.get_height() / 2) |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
108 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
109 |
59 | 110 class ImageRenderer(Renderer): |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
111 def __init__(self, shape, image): |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
112 super(ImageRenderer, self).__init__(shape) |
59 | 113 self._image = image |
114 | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
115 def render(self, surface, pos, angle): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
116 surface.blit(self._image, image_pos(self._image, pos)) |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
117 super(ImageRenderer, self).render(surface, pos, angle) |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
118 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
119 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
120 class FacingImageRenderer(Renderer): |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
121 def __init__(self, shape, left_image, right_image): |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
122 super(FacingImageRenderer, self).__init__(shape) |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
123 self._images = { |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
124 'left': left_image, |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
125 'right': right_image, |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
126 } |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
127 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
128 def get_image(self, angle): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
129 if abs(angle) < math.pi / 2: |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
130 return self._images['right'] |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
131 return self._images['left'] |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
132 |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
133 def render(self, surface, pos, angle): |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
134 image = self.get_image(angle) |
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
135 surface.blit(image, image_pos(image, pos)) |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
136 super(FacingImageRenderer, self).render(surface, pos, angle) |
59 | 137 |
138 | |
139 class ShapeRenderer(Renderer): | |
63
7f038ee778ad
Put werewolf facing direction magic back.
Jeremy Thurgood <firxen@gmail.com>
parents:
62
diff
changeset
|
140 def render(self, surface, pos, angle): |
104
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
141 self._render_shape(surface, pos, angle) |
1be3eebb87c4
More consistent debug rendering.
Jeremy Thurgood <firxen@gmail.com>
parents:
93
diff
changeset
|
142 super(ShapeRenderer, self).render(surface, pos, angle) |
59 | 143 |
144 | |
145 class GameObject(object): | |
146 """A representation of a thing in the game world. | |
147 | |
148 This has a rendery thing, physicsy things and maybe some other things. | |
149 """ | |
150 | |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
151 def __init__(self, physicser, renderer, puzzler=None): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
152 self.physicser = physicser |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
153 self.physicser.add_to_space() |
59 | 154 self.renderer = renderer |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
155 self.puzzler = puzzler |
59 | 156 |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
157 def get_render_position(self, surface): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
158 return self.physicser.get_render_position(surface) |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
159 |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
160 def get_render_angle(self): |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
161 return self.physicser.get_angle() |
59 | 162 |
163 def render(self, surface): | |
60 | 164 return self.renderer.render( |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
165 surface, self.get_render_position(surface), |
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
166 self.get_render_angle()) |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
167 |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
168 |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
169 class FloorSwitch(GameObject): |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
170 def __init__(self, space, position): |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
171 body = pymunk.Body() |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
172 body.position = position |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
173 self.shape = pymunk.Circle(body, 30) |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
174 self.shape.collision_type = COLLISION_TYPE_SWITCH |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
175 self.shape.sensor = True |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
176 super(FloorSwitch, self).__init__( |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
177 SingleShapePhysicser(space, self.shape), |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
178 ShapeRenderer(self.shape), |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
179 FloorSwitchPuzzler(space, self.shape), |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
180 ) |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
181 |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
182 def render(self, surface): |
93
d6a49f0c1e6e
Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents:
91
diff
changeset
|
183 if self.puzzler.get_state(): |
81
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
184 self.shape.color = pygame.color.THECOLORS['green'] |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
185 else: |
a1b4d09e6f23
Floor switch with horrible hackery.
davidsharpe@lantea.local
parents:
63
diff
changeset
|
186 self.shape.color = pygame.color.THECOLORS['red'] |
82 | 187 super(FloorSwitch, self).render(surface) |