Mercurial > skaapsteker
changeset 188:30a5f7cf670a
Hack'ish logic to move out of colliding with floors better
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 06 Apr 2011 21:02:38 +0200 |
parents | 92ab784ecf5a |
children | 9d08f99b5ddf |
files | skaapsteker/sprites/player.py |
diffstat | 1 files changed, 11 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/skaapsteker/sprites/player.py Wed Apr 06 20:50:00 2011 +0200 +++ b/skaapsteker/sprites/player.py Wed Apr 06 21:02:38 2011 +0200 @@ -94,15 +94,22 @@ # surface best_move = (0, 0) clip_area = 0 - for rect in self._last_collide: - clip = rect.collide_rect.clip(self.collide_rect) + for obj in self._last_collide: + 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: + 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 min_area = clip_area for attempt in [(0, 2), (2, 0), (-2, 0), (2, 2), (-2, 2)]: clip_area = 0 - for rect in self._last_collide: + for obj in self._last_collide: cand_rect = self.collide_rect.move(attempt) - clip = rect.collide_rect.clip(cand_rect) + clip = obj.collide_rect.clip(cand_rect) clip_area += clip.width * clip.height if clip_area < min_area: min_area = clip_area