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: