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)