Mercurial > nagslang
comparison nagslang/game_object.py @ 162:507df17cfbaf
Pictures for lights and switches.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Tue, 03 Sep 2013 01:00:29 +0200 |
parents | 0c9b0449485e |
children | 054944c6472b |
comparison
equal
deleted
inserted
replaced
161:500c5a68607c | 162:507df17cfbaf |
---|---|
3 import pygame | 3 import pygame |
4 import pymunk | 4 import pymunk |
5 import pymunk.pygame_util | 5 import pymunk.pygame_util |
6 | 6 |
7 from nagslang.constants import ( | 7 from nagslang.constants import ( |
8 SWITCH_PUSHERS, COLLISION_TYPE_SWITCH, COLLISION_TYPE_BOX, ZORDER_LOW) | 8 SWITCH_PUSHERS, COLLISION_TYPE_SWITCH, COLLISION_TYPE_BOX, ZORDER_LOW, |
9 ZORDER_FLOOR) | |
9 from nagslang.options import options | 10 from nagslang.options import options |
10 from nagslang.resources import resources | 11 from nagslang.resources import resources |
11 | 12 |
12 | 13 |
13 class PuzzleGlue(object): | 14 class PuzzleGlue(object): |
180 def render(self, surface): | 181 def render(self, surface): |
181 self.render_image(surface, self.get_image()) | 182 self.render_image(surface, self.get_image()) |
182 super(ImageRenderer, self).render(surface) | 183 super(ImageRenderer, self).render(surface) |
183 | 184 |
184 | 185 |
186 class ImageStateRenderer(ImageRenderer): | |
187 def __init__(self, state_images): | |
188 self._state_images = state_images | |
189 | |
190 def get_image(self): | |
191 return self._state_images[self.game_object.puzzler.get_state()] | |
192 | |
193 | |
185 class FacingImageRenderer(ImageRenderer): | 194 class FacingImageRenderer(ImageRenderer): |
186 def __init__(self, left_image, right_image): | 195 def __init__(self, left_image, right_image): |
187 self._images = { | 196 self._images = { |
188 'left': left_image, | 197 'left': left_image, |
189 'right': right_image, | 198 'right': right_image, |
294 """A representation of a thing in the game world. | 303 """A representation of a thing in the game world. |
295 | 304 |
296 This has a rendery thing, physicsy things and maybe some other things. | 305 This has a rendery thing, physicsy things and maybe some other things. |
297 """ | 306 """ |
298 | 307 |
308 zorder = ZORDER_LOW | |
309 | |
299 def __init__(self, physicser, renderer, puzzler=None): | 310 def __init__(self, physicser, renderer, puzzler=None): |
300 self.physicser = physicser | 311 self.physicser = physicser |
301 physicser.set_game_object(self) | 312 physicser.set_game_object(self) |
302 self.physicser.add_to_space() | 313 self.physicser.add_to_space() |
303 self.renderer = renderer | 314 self.renderer = renderer |
304 renderer.set_game_object(self) | 315 renderer.set_game_object(self) |
305 self.puzzler = puzzler | 316 self.puzzler = puzzler |
306 if puzzler is not None: | 317 if puzzler is not None: |
307 puzzler.set_game_object(self) | 318 puzzler.set_game_object(self) |
308 self.zorder = ZORDER_LOW | |
309 | 319 |
310 def get_space(self): | 320 def get_space(self): |
311 return self.physicser.get_space() | 321 return self.physicser.get_space() |
312 | 322 |
313 def get_shape(self): | 323 def get_shape(self): |
325 def animate(self): | 335 def animate(self): |
326 self.renderer.animate() | 336 self.renderer.animate() |
327 | 337 |
328 | 338 |
329 class FloorSwitch(GameObject): | 339 class FloorSwitch(GameObject): |
340 zorder = ZORDER_FLOOR | |
341 | |
330 def __init__(self, space, position): | 342 def __init__(self, space, position): |
331 body = make_body(None, None, position) | 343 body = make_body(None, None, position) |
332 self.shape = pymunk.Circle(body, 30) | 344 self.shape = pymunk.Circle(body, 30) |
333 self.shape.collision_type = COLLISION_TYPE_SWITCH | 345 self.shape.collision_type = COLLISION_TYPE_SWITCH |
334 self.shape.sensor = True | 346 self.shape.sensor = True |
335 super(FloorSwitch, self).__init__( | 347 super(FloorSwitch, self).__init__( |
336 SingleShapePhysicser(space, self.shape), | 348 SingleShapePhysicser(space, self.shape), |
337 ShapeStateRenderer(), | 349 ImageStateRenderer({ |
350 True: resources.get_image('objects', 'sensor_on.png'), | |
351 False: resources.get_image('objects', 'sensor_off.png'), | |
352 }), | |
338 FloorSwitchPuzzler(), | 353 FloorSwitchPuzzler(), |
339 ) | 354 ) |
340 | 355 |
341 | 356 |
342 class FloorLight(GameObject): | 357 class FloorLight(GameObject): |
358 zorder = ZORDER_FLOOR | |
359 | |
343 def __init__(self, space, position, state_source): | 360 def __init__(self, space, position, state_source): |
344 body = make_body(None, None, position) | 361 body = make_body(None, None, position) |
345 self.shape = pymunk.Circle(body, 10) | 362 self.shape = pymunk.Circle(body, 10) |
346 self.shape.collision_type = COLLISION_TYPE_SWITCH | 363 self.shape.collision_type = COLLISION_TYPE_SWITCH |
347 self.shape.sensor = True | 364 self.shape.sensor = True |
348 super(FloorLight, self).__init__( | 365 super(FloorLight, self).__init__( |
349 SingleShapePhysicser(space, self.shape), | 366 SingleShapePhysicser(space, self.shape), |
350 ShapeStateRenderer(), | 367 ImageStateRenderer({ |
368 True: resources.get_image('objects', 'light_on.png'), | |
369 False: resources.get_image('objects', 'light_off.png'), | |
370 }), | |
351 StateProxyPuzzler(state_source), | 371 StateProxyPuzzler(state_source), |
352 ) | 372 ) |
353 | 373 |
354 | 374 |
355 class Box(GameObject): | 375 class Box(GameObject): |