changeset 186:72e92893ccb8

Use layers for floor check
author Neil Muller <drnlmuller@gmail.com>
date Wed, 06 Apr 2011 20:49:47 +0200
parents c3dfcd241c3a
children 92ab784ecf5a
files skaapsteker/physics.py skaapsteker/sprites/base.py
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/physics.py	Wed Apr 06 20:36:58 2011 +0200
+++ b/skaapsteker/physics.py	Wed Apr 06 20:49:47 2011 +0200
@@ -44,6 +44,7 @@
         self.velocity = (0.0, 0.0)
         self.rect = pygame.Rect(0, 0, 10, 10) # sub-classes should override
         self.collide_rect = pygame.Rect(0, 0, 10, 10) # rectangle we use for collisions
+        self.floor_rect = self.collide_rect
         self.image = pygame.Surface((10, 10))
         self.image.fill((0, 0, 200))
         self.collision_group = None
@@ -83,6 +84,7 @@
         self.rect.topleft = int(f_x), int(f_y)
         delta_pos = self.rect.left - old_pos[0], self.rect.top - old_pos[1]
         self.collide_rect.move_ip(delta_pos)
+        self.floor_rect.move_ip(delta_pos)
 
     def _check_mask(self):
         mask = self._mask_cache.get(id(self.image))
@@ -267,14 +269,14 @@
                 # Check if we are still in contact with the ground
                 still_on_solid = False
                 for other in self._collision_groups[sprite.collision_layer]:
-                    if (other.floor or other.block) and collides(other.collide_rect):
+                    if (other.floor or other.block) and collides(other.floor_rect):
                         still_on_solid = True
                         break
                 sprite.on_solid = still_on_solid
             else:
                 # Are we currently in contact with the ground
                 for other in self._collision_groups[sprite.collision_layer]:
-                    if (other.floor or other.block) and collides(other.collide_rect):
+                    if (other.floor or other.block) and collides(other.floor_rect):
                         sprite.on_solid = True
                         break
 
--- a/skaapsteker/sprites/base.py	Wed Apr 06 20:36:58 2011 +0200
+++ b/skaapsteker/sprites/base.py	Wed Apr 06 20:49:47 2011 +0200
@@ -30,6 +30,7 @@
         self.starting_tile_pos = pos
         self.rect = self.image.get_rect(midbottom=(pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1]))
         self.collide_rect = self.rect.move(0, 0)
+        self.floor_rect = Rect(self.collide_rect.topleft, (self.collide_rect.width, 2))
         self._layer = Layers.PLAYER
         self.setup(**opts)
 
@@ -82,9 +83,11 @@
         self.tile_pos = pos
         self.image = image
         self.collide_rect = self.image.get_bounding_rect(1)
+        self.floor_rect = Rect(self.collide_rect.topleft, (self.collide_rect.width, 2))
         self.rect = self.image.get_rect()
         self.rect_offset = self.collide_rect.left - self.rect.left, self.rect.top - self.rect.top
         self.collide_rect.topleft = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1]
+        self.floor_rect.topleft = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1]
         self.rect.topleft = pos[0] * TILE_SIZE[0], pos[1] * TILE_SIZE[1]
 
     def get_debug_color(self):