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):