# HG changeset patch # User Neil Muller # Date 1302115787 -7200 # Node ID 72e92893ccb83859bbaa37ea13dc7e5b3d383312 # Parent c3dfcd241c3a69cf178082adef4c072e62c54d76 Use layers for floor check diff -r c3dfcd241c3a -r 72e92893ccb8 skaapsteker/physics.py --- 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 diff -r c3dfcd241c3a -r 72e92893ccb8 skaapsteker/sprites/base.py --- 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):