# HG changeset patch # User Neil Muller # Date 1282941309 -7200 # Node ID d9b19449436fa31f5d9014389f84c7ecab64af05 # Parent c67a4a4d78f6ae7e0ae01396d7da58da3da86749 The flying fish fix (take 1) diff -r c67a4a4d78f6 -r d9b19449436f gamelib/state.py --- 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,