Mercurial > pyntnclick
comparison gamelib/state.py @ 280:d9b19449436f
The flying fish fix (take 1)
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Fri, 27 Aug 2010 22:35:09 +0200 |
parents | 8e27efd331aa |
children | fe899fb63866 |
comparison
equal
deleted
inserted
replaced
279:c67a4a4d78f6 | 280:d9b19449436f |
---|---|
378 # these are set by set_scene | 378 # these are set by set_scene |
379 self.scene = None | 379 self.scene = None |
380 self.state = None | 380 self.state = None |
381 self.current_interact = None | 381 self.current_interact = None |
382 self.rect = None | 382 self.rect = None |
383 self.orig_rect = None | |
383 # TODO: add masks | 384 # TODO: add masks |
384 | 385 |
385 def _fix_rect(self): | 386 def _fix_rect(self): |
386 """Fix rects to compensate for scene offset""" | 387 """Fix rects to compensate for scene offset""" |
388 # Offset logic is to always work with copies, to avoid | |
389 # flying effects from multiple calls to _fix_rect | |
390 # See footwork in draw | |
387 if hasattr(self.rect, 'collidepoint'): | 391 if hasattr(self.rect, 'collidepoint'): |
388 self.rect.move_ip(self.scene.OFFSET) | 392 self.rect = self.rect.move(self.scene.OFFSET) |
389 else: | 393 else: |
390 for rect in list(self.rect): | 394 self.rect = [x.move(self.scene.OFFSET) for x in self.rect] |
391 rect.move_ip(self.scene.OFFSET) | |
392 | 395 |
393 def set_scene(self, scene): | 396 def set_scene(self, scene): |
394 assert self.scene is None | 397 assert self.scene is None |
395 self.scene = scene | 398 self.scene = scene |
396 if self.folder is None: | 399 if self.folder is None: |
451 | 454 |
452 def interact_default(self, item): | 455 def interact_default(self, item): |
453 return Result("It doesn't work.") | 456 return Result("It doesn't work.") |
454 | 457 |
455 def draw(self, surface): | 458 def draw(self, surface): |
459 old_rect = self.current_interact.rect | |
460 if old_rect: | |
461 self.current_interact.rect = old_rect.move(self.scene.OFFSET) | |
456 self.current_interact.draw(surface) | 462 self.current_interact.draw(surface) |
463 self.current_interact.rect = old_rect | |
457 if self._interact_hilight_color is not None: | 464 if self._interact_hilight_color is not None: |
458 if hasattr(self.rect, 'collidepoint'): | 465 if hasattr(self.rect, 'collidepoint'): |
459 frame_rect(surface, self._interact_hilight_color, | 466 frame_rect(surface, self._interact_hilight_color, |
460 self.rect.inflate(1, 1), 1) | 467 self.rect.inflate(1, 1), 1) |
461 else: | 468 else: |