Mercurial > boomslang
changeset 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 | c67a4a4d78f6 |
children | eb3cfcaff469 |
files | gamelib/state.py |
diffstat | 1 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/gamelib/state.py Fri Aug 27 22:12:03 2010 +0200 +++ b/gamelib/state.py Fri Aug 27 22:35:09 2010 +0200 @@ -380,15 +380,18 @@ self.state = None self.current_interact = None self.rect = None + self.orig_rect = None # TODO: add masks def _fix_rect(self): """Fix rects to compensate for scene offset""" + # Offset logic is to always work with copies, to avoid + # flying effects from multiple calls to _fix_rect + # See footwork in draw if hasattr(self.rect, 'collidepoint'): - self.rect.move_ip(self.scene.OFFSET) + self.rect = self.rect.move(self.scene.OFFSET) else: - for rect in list(self.rect): - rect.move_ip(self.scene.OFFSET) + self.rect = [x.move(self.scene.OFFSET) for x in self.rect] def set_scene(self, scene): assert self.scene is None @@ -453,7 +456,11 @@ return Result("It doesn't work.") def draw(self, surface): + old_rect = self.current_interact.rect + if old_rect: + self.current_interact.rect = old_rect.move(self.scene.OFFSET) self.current_interact.draw(surface) + self.current_interact.rect = old_rect if self._interact_hilight_color is not None: if hasattr(self.rect, 'collidepoint'): frame_rect(surface, self._interact_hilight_color,