It seems like your problem is here:
if (collision == GameMap.TileCollision.Block || IsOnGround)
{
// Resolve the collision along the Y axis.
Position = new Vector2(Position.X, Position.Y + depth.Y);
// Perform further collisions with the new bounds.
bounds = BoundingRectangle;
}
You should take away depth.Y from Position.YIf I understand correctly, as co-ordinates in game systems typically originate from (0your movement issue can be resolved by David's answer,0) but you want to implement being the top left of the mapable to move upwards through platforms.
In addition, This can be solved with an additional if statement. When you shouldcollide with a platform, check the players Y velocity and the target block type to see which edgeif you should pushcan move upwards through it. If the player to depnding on whichplayer's Y velocity is less deepset above 0, instead of just pushing higher Y values up and higher X values toor the rightblock type cannot be moved through upwards, then resolve the collision as normal.