Exemplo n.º 1
0
 def  __resolve_tile_collisions__(self, sideTiles, aboveBelowTiles, previousBB, collisionLayer):
     """
     Resolves collisions with Spike Tiles first, and sets State based on collision results.  These
     State changes would be appropriate for a platformer.
     """
     originalX, originalY = self.Position
     
     allTiles = set()
     allTiles.update(sideTiles)
     allTiles.update(aboveBelowTiles)
     
     for tile in allTiles:
         if type(tile) in self._specialTiles:
             self.ResolveCollision(tile)
             tile.ResolveCollision(self)
             
             # after resolving, get rid of all the tiles of that type so we only collide once
             for sideTile in list(sideTiles):
                 if isinstance(sideTile, type(tile)):
                     sideTiles.remove(sideTile)
             for aboveBelowTile in list(aboveBelowTiles):
                 if isinstance(aboveBelowTile, type(tile)):
                     aboveBelowTiles.remove(aboveBelowTile)
             break
     
     # collides with normal square tiles    
     if collisionLayer.Name == Constants.EditorConstants.LAYER_NAME_COLLISION_TILES:
         Actor.__resolve_tile_collisions__(self, sideTiles, aboveBelowTiles, previousBB, collisionLayer)
     
     # For a platformer, switch to the land state when hitting the ground
     if (originalY > self.Position[1]):
         # got pushed up, must be on ground 
         if not self._onGround:
             #self.ChangeState('land')
             self._onGround = True
     else:
         '''
         # little hack to make falling off things slower - CAD
         if (self._onGround):
             self.Velocity = Vector((self.Velocity.x, self.Velocity.y * 0.60))
         '''
         if (self.Velocity.y > 0.0):
             self._onGround = False
         
     if (originalY < self.Position[1]):
         # hit a ceiling, stop moving up
         self.Velocity = Vector((self.Velocity.x, 0))
     if (originalX != self.Position[0]):
         # hit a wall, Velocity goes to 0?
         self.Velocity = Vector((0, self.Velocity.y))