Mercurial > nagslang
comparison nagslang/game_object.py @ 126:c3af35561494
Cleaner switch/light rendering.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Mon, 02 Sep 2013 17:09:47 +0200 |
parents | 23b533d6f27e |
children | 79e1888573d3 |
comparison
equal
deleted
inserted
replaced
125:12be9632fa15 | 126:c3af35561494 |
---|---|
172 image = self.get_image(self.game_object.get_render_angle()) | 172 image = self.get_image(self.game_object.get_render_angle()) |
173 surface.blit(image, image_pos(image, pos)) | 173 surface.blit(image, image_pos(image, pos)) |
174 super(FacingImageRenderer, self).render(surface) | 174 super(FacingImageRenderer, self).render(surface) |
175 | 175 |
176 | 176 |
177 class ShapeRenderer(Renderer): | 177 class ShapeStateRenderer(Renderer): |
178 def render(self, surface): | 178 """Renders the shape in a different colour depending on the state. |
179 | |
180 Requires the game object it's attached to to have a puzzler. | |
181 """ | |
182 def render(self, surface): | |
183 if self.game_object.puzzler.get_state(): | |
184 color = pygame.color.THECOLORS['green'] | |
185 else: | |
186 color = pygame.color.THECOLORS['red'] | |
187 | |
188 self.game_object.get_shape().color = color | |
179 self._render_shape(surface) | 189 self._render_shape(surface) |
180 super(ShapeRenderer, self).render(surface) | 190 super(ShapeStateRenderer, self).render(surface) |
181 | 191 |
182 | 192 |
183 class GameObject(object): | 193 class GameObject(object): |
184 """A representation of a thing in the game world. | 194 """A representation of a thing in the game world. |
185 | 195 |
220 self.shape = pymunk.Circle(body, 30) | 230 self.shape = pymunk.Circle(body, 30) |
221 self.shape.collision_type = COLLISION_TYPE_SWITCH | 231 self.shape.collision_type = COLLISION_TYPE_SWITCH |
222 self.shape.sensor = True | 232 self.shape.sensor = True |
223 super(FloorSwitch, self).__init__( | 233 super(FloorSwitch, self).__init__( |
224 SingleShapePhysicser(space, self.shape), | 234 SingleShapePhysicser(space, self.shape), |
225 ShapeRenderer(), | 235 ShapeStateRenderer(), |
226 FloorSwitchPuzzler(), | 236 FloorSwitchPuzzler(), |
227 ) | 237 ) |
228 | |
229 def render(self, surface): | |
230 if self.puzzler.get_state(): | |
231 self.shape.color = pygame.color.THECOLORS['green'] | |
232 else: | |
233 self.shape.color = pygame.color.THECOLORS['red'] | |
234 super(FloorSwitch, self).render(surface) | |
235 | 238 |
236 | 239 |
237 class FloorLight(GameObject): | 240 class FloorLight(GameObject): |
238 def __init__(self, space, position, state_source): | 241 def __init__(self, space, position, state_source): |
239 body = pymunk.Body() | 242 body = pymunk.Body() |
241 self.shape = pymunk.Circle(body, 10) | 244 self.shape = pymunk.Circle(body, 10) |
242 self.shape.collision_type = COLLISION_TYPE_SWITCH | 245 self.shape.collision_type = COLLISION_TYPE_SWITCH |
243 self.shape.sensor = True | 246 self.shape.sensor = True |
244 super(FloorLight, self).__init__( | 247 super(FloorLight, self).__init__( |
245 SingleShapePhysicser(space, self.shape), | 248 SingleShapePhysicser(space, self.shape), |
246 ShapeRenderer(), | 249 ShapeStateRenderer(), |
247 StateProxyPuzzler(state_source), | 250 StateProxyPuzzler(state_source), |
248 ) | 251 ) |
249 | |
250 def render(self, surface): | |
251 if self.puzzler.get_state(): | |
252 self.shape.color = pygame.color.THECOLORS['green'] | |
253 else: | |
254 self.shape.color = pygame.color.THECOLORS['red'] | |
255 super(FloorLight, self).render(surface) |