private bool HandleCollisions(GameTime gameTime, CollisionDirection direction, BlockCollision collision, Rectangle tileBounds, Vector2 depth, bool intersects, int x, int y)
{
if (collision != BlockCollision.Passable && intersects)
{
// If we crossed the top of a tile, we are on the ground.
if (PreviousState.Bounds.Bottom <= tileBounds.Top)
{
if (collision == BlockCollision.Platform)
{
IsOnGround = true;
}
}
if (collision == BlockCollision.Gravity)
{
Tile tile = Map.Tiles[x, y, 1];
if (tile.Block == BlockType.UpArrow)
GravityDirection = GravityDirection.Up;
else if (tile.Block == BlockType.DownArrow)
GravityDirection = GravityDirection.Down;
else if (tile.Block == BlockType.RightArrow)
GravityDirection = GravityDirection.Right;
else if (tile.Block == BlockType.LeftArrow)
GravityDirection = GravityDirection.Left;
return true;
}
if (collision == BlockCollision.Impassable || IsOnGround)
{
//Now that we know we hit something, resolve the collison
if (direction == CollisionDirection.Horizontal)
{
SimulationState.Position.X += depth.X;
IsOnGround = true;
}
if (direction == CollisionDirection.Vertical)
{
//Cancel jump if hit something (Ie, when you jump and hit the roof)
IsJumping = false;
JumpTime = 0;
//Obviously hit ground or roof
IsOnGround = true;
SimulationState.Position.Y += depth.Y;
}
}
}
return false;
}