# HG changeset patch # User Neil Muller # Date 1302017714 -7200 # Node ID 5b4d73d301a18cd5c37fb8ea6a9735a0c1fbdd44 # Parent 0474df61d5b18a47e014aeb006891097cd80ec30 Don't change image if it will introduce new collisions diff -r 0474df61d5b1 -r 5b4d73d301a1 skaapsteker/sprites/player.py --- 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