Mercurial > skaapsteker
diff skaapsteker/sprites/player.py @ 149:5b4d73d301a1
Don't change image if it will introduce new collisions
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Tue, 05 Apr 2011 17:35:14 +0200 |
parents | 0474df61d5b1 |
children | 06be025c821c |
line wrap: on
line diff
--- a/skaapsteker/sprites/player.py Tue Apr 05 17:13:32 2011 +0200 +++ b/skaapsteker/sprites/player.py Tue Apr 05 17:35:14 2011 +0200 @@ -21,6 +21,7 @@ self.rect = None self._image_dict = {} self._animation_frame = 0.0 + self._recent_collisions = [] # State flags and such self.running = False self.jumping = False @@ -42,9 +43,16 @@ cur_pos = self.collide_rect.bottomleft else: cur_pos = (0, 0) + cand_image = images[int(self._animation_frame)] + cand_collide_rect = cand_image.get_bounding_rect(1) + cand_collide_rect.bottomleft = cur_pos + if cand_collide_rect.collidelist(self._recent_collisions) != -1 \ + and self.collide_rect.collidelist(self._recent_collisions) == -1: + # We introduce a new collision, so don't update the image + return self.image = images[int(self._animation_frame)] + self.collide_rect = self.image.get_bounding_rect(1) self.rect = self.image.get_rect() - self.collide_rect = self.image.get_bounding_rect(1) self.rect_offset = self.rect.left - self.collide_rect.left, self.rect.bottom - self.collide_rect.bottom self.collide_rect.bottomleft = cur_pos self.rect.bottomleft = cur_pos[0] + self.rect_offset[0], cur_pos[1] + self.rect_offset[1] @@ -64,6 +72,10 @@ def set_facing(self, new_facing): self.facing = new_facing + def collided(self, other): + self._recent_collisions.append(other.collide_rect) + while len(self._recent_collisions) > 10: + self._recent_collisions.pop(0) def set_pos(self, pos): self.starting_tile_pos = pos