comparison gamelib/state.py @ 278:8e27efd331aa

Offset support for scenes
author Neil Muller <neil@dip.sun.ac.za>
date Fri, 27 Aug 2010 22:04:25 +0200
parents 80cb577e38f2
children d9b19449436f
comparison
equal deleted inserted replaced
277:01b22664a12c 278:8e27efd331aa
220 BACKGROUND = None 220 BACKGROUND = None
221 221
222 # name of scene (optional, defaults to folder) 222 # name of scene (optional, defaults to folder)
223 NAME = None 223 NAME = None
224 224
225 # Offset of the background image
226 OFFSET = (0, 0)
227
225 # size (for detail views) 228 # size (for detail views)
226 SIZE = constants.SCENE_SIZE 229 SIZE = constants.SCENE_SIZE
227 230
228 def __init__(self, state): 231 def __init__(self, state):
229 StatefulGizmo.__init__(self) 232 StatefulGizmo.__init__(self)
267 Rect(5, 5, *self._current_description.size)) 270 Rect(5, 5, *self._current_description.size))
268 self._current_description.draw_all(sub) 271 self._current_description.draw_all(sub)
269 272
270 def draw_background(self, surface): 273 def draw_background(self, surface):
271 if self._background is not None: 274 if self._background is not None:
272 surface.blit(self._background, (0, 0), None) 275 surface.blit(self._background, self.OFFSET, None)
273 else: 276 else:
274 surface.fill((200, 200, 200)) 277 surface.fill((200, 200, 200))
275 278
276 def draw_things(self, surface): 279 def draw_things(self, surface):
277 for thing in self.things.itervalues(): 280 for thing in self.things.itervalues():
377 self.state = None 380 self.state = None
378 self.current_interact = None 381 self.current_interact = None
379 self.rect = None 382 self.rect = None
380 # TODO: add masks 383 # TODO: add masks
381 384
385 def _fix_rect(self):
386 """Fix rects to compensate for scene offset"""
387 if hasattr(self.rect, 'collidepoint'):
388 self.rect.move_ip(self.scene.OFFSET)
389 else:
390 for rect in list(self.rect):
391 rect.move_ip(self.scene.OFFSET)
392
382 def set_scene(self, scene): 393 def set_scene(self, scene):
383 assert self.scene is None 394 assert self.scene is None
384 self.scene = scene 395 self.scene = scene
385 if self.folder is None: 396 if self.folder is None:
386 self.folder = scene.FOLDER 397 self.folder = scene.FOLDER
390 self.set_interact(self.INITIAL) 401 self.set_interact(self.INITIAL)
391 402
392 def set_interact(self, name): 403 def set_interact(self, name):
393 self.current_interact = self.interacts[name] 404 self.current_interact = self.interacts[name]
394 self.rect = self.current_interact.interact_rect 405 self.rect = self.current_interact.interact_rect
406 if self.scene:
407 self._fix_rect()
395 assert self.rect is not None, name 408 assert self.rect is not None, name
396 409
397 def contains(self, pos): 410 def contains(self, pos):
398 if hasattr(self.rect, 'collidepoint'): 411 if hasattr(self.rect, 'collidepoint'):
399 return self.rect.collidepoint(pos) 412 return self.rect.collidepoint(pos)