so we have
Vector A; // velocity before
//apply gravity
//apply movement from input
//apply any other physics
Vector B; // velocity after
Vector2 vel = B - A;
//Terrain collision check
if(vel.X > 0) { wall.Left - player.Width }
else { player.X = wall.Right }
if(vel.Y > 0) { player.Y = wall.Bottom }
else { player.Y = wall.Bottom - player.Height }