Mercurial > pyntnclick
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) |