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