# HG changeset patch # User Neil Muller # Date 1302116558 -7200 # Node ID 30a5f7cf670a9ea8610671e6fa3aedd85fc40df4 # Parent 92ab784ecf5a57081263a32ef43f8e6ccbf9e4e8 Hack'ish logic to move out of colliding with floors better diff -r 92ab784ecf5a -r 30a5f7cf670a skaapsteker/sprites/player.py --- 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