# HG changeset patch # User Neil Muller # Date 1302121577 -7200 # Node ID 4e3f9cb49489e32fbabc51d028dd6c9860f0caed # Parent 2b4de243e9f2320e7df83af0f47513f5965ec33f Fix bug in jump to tile top logic diff -r 2b4de243e9f2 -r 4e3f9cb49489 skaapsteker/sprites/player.py --- a/skaapsteker/sprites/player.py Wed Apr 06 22:17:59 2011 +0200 +++ b/skaapsteker/sprites/player.py Wed Apr 06 22:26:17 2011 +0200 @@ -93,16 +93,21 @@ # surface best_move = (0, 0) clip_area = 0 - for obj in self._last_collide: + for obj in self._last_collide[:]: + if not obj.collide_rect.colliderect(self.collide_rect): + # Prune stale objects from the list + self._last_collide.remove(obj) + continue clip = obj.collide_rect.clip(self.collide_rect) clip_area += clip.width * clip.height if (obj.floor or obj.block) and \ - clip.width > obj.collide_rect.width /2 and \ - self.collide_rect.bottom < obj.collide_rect.top + obj.collide_rect.height / 3: + clip.width > TILE_SIZE[0] / 2 and \ + self.collide_rect.bottom < obj.collide_rect.top + TILE_SIZE[1] / 3: delta = self.rect.bottom - self.collide_rect.bottom self.collide_rect.bottom = obj.collide_rect.top - 1 self.rect.bottom = self.collide_rect.bottom + delta - break + self.init_pos() + return # Jump out of this case min_area = clip_area for attempt in [(0, 2), (2, 0), (-2, 0), (2, 2), (-2, 2)]: clip_area = 0